美文网首页
关于逆向的一点儿小知识(二)

关于逆向的一点儿小知识(二)

作者: Fisheepnix | 来源:发表于2018-02-25 22:49 被阅读0次

内存寻址方式

   mov ax,[bx]

ax=[ds*10H+bx]

loop

 循环指令,循环次数由计数寄存器CX指定。是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次。执行LOOP指令时,CPU自动将CX的值减1,若CX=0,则结束循环;否则,重复执行循环体。

loop指令等价于C的do…while结构:

  cx =

循环次数;

  do {

  //

循环体

  cx--;

  } while (cx);

结构:

1      start: mov ax, 2

 2             mov cx, 11

 3      s: addax, ax

 4             loop s

and , or 指令

and 与    &

or  或     |

xor  异或  ^

not  非    ~

内存寻址方式

BP:基数指针寄存器      和堆栈指针SP联合使用,作为SP的校准

(1)在8086CPU中只有这四个寄存器可以在[...]中进行内存单元的寻址。

比如,下面的指令都是正确的:

mov ax,[bx]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp]

mov ax,[bp+si]

mov ax,[bp+di]

而下面都是错误的:

mov ax,[cx]

mov ax,[ax]

mov ax,[dx]

mov ax,[ds]

(2).在[...]中,这四个寄存器可以单独出现,或者只能以四种组合出现:bx和si、bx和di、bp和si、bp和di。

比如下面都是正确的

mov ax,[bx]

mov ax,[si]

mov ax,[di]

mov ax,[bp]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp+si]

mpv ax,[bp+di]

mov ax,[bx+si+idata]

mov ax,[bx+si+idata]

mov ax,[bp+si+idata]

mov ax,[bp+di+idata]

下面就是错误的

mov ax,[bx+bp]

mov ax,[si+di]

(3)只要在[....]中使用寄存器bp,而指令汇总没有显示给出段地址,段地址就默认在ss中。 比如下面的指令。

mov ax,[bp] 含义:(ax)=((ss)*16+(bp))

mov ax,[bp+idata] 含义:(ax)=((ss)*16+(bp)+idata)

mov ax,[bp+si] 含义:(ax)=((ss)*16+(bp)+(si))

mov ax,[bp+si+idata] 含义:(ax)=((ss)*16+(bp)+(si)+idata)

跳转指令和指令跳转原理

jmp指令

            jmp 地址      跳转到地址

call指令

ret指令

mul指令

MUL AB

乘法指令的功能是将A和B中两个无符号8位二进制数相乘,所得的16位积的低8位存于A中,高8位存于B中。如果乘积大于256,即高位B不为0,则OV置1;否则OV清0,CY总是清0。

例如:设(A)=50H(80),(B)=0A0H(160)

若执行MUL AB,

则执行结果为:

乘积为3200H(12800),

(A)=00H,(B)=32H,(OV)=1,(CY)=0

div指令

相关文章

网友评论

      本文标题:关于逆向的一点儿小知识(二)

      本文链接:https://www.haomeiwen.com/subject/ofedxftx.html