zoukankan      html  css  js  c++  java
  • 几个汇编指令解析

    1. call 子程序偏移量

    注解:子程序偏移量是指,call指令即将跳转至的子程序的地址(子程序的第一个字节)减去 call 指令读取后 CS:IP指向的指令(即,call 指令的下一指令的地址)


    2. STOS (STOre into String) 存入串指令

      STOS DST

      STOSB //存放字节串 ( DI ) = AL

      STOSW //存放字串 ( DI ) = AX

      执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.

      a.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值.

      b.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]

     3. LODS ( LOaD from String ) 从串取指令

      LODS SRC

      LODSB //从字节串取 AL=(SI)

      LODSW //从字串取 AX= (SI±1) (SI)

      执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.

      a.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.

      b.源串允许使用段超越前缀来改变数据存储的段区.


    4 ret , retn, retf

    retn表示return near,与之对应的是retf;n没有恢复段的过程,retf有个除了pop ip以外还会pop cs;

    不管是retn还是rentf,后面带的数字是在执行完ret指令以后sp增加的字节数,默认ret相当于ret 0

    retn 4相当于pop ip,add sp, 4(esp相当于移动了8个字节)也就是在返回的同时释放了参数使用的栈空间,windows api中常见的stdcall就是这种调用形式,所以省去了函数调用外的一条add指令


    5 jecxz和jecz

    根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);


    6 cld和std

    清除方向标志,在字符串的比较,赋值,读取等一系列和rep连用的操作中,di或si是可以自动增减的而不需要人来加减它的值,cld即告诉程序si,di向前移动,std指令为设置方向,告诉程序si,di向后移动
  • 相关阅读:
    线段树
    2016.9.4
    使用CSS代码修改博客模板
    爬虫
    PHP初学[DAY2]
    2016.8.23
    一个自动设置游戏房间的脚本
    可逆矩阵生成
    #2284. 接水果(fruit)
    #3762. 有趣的数(number)
  • 原文地址:https://www.cnblogs.com/rainduck/p/2138628.html
Copyright © 2011-2022 走看看