汇编小记16/3/27

最后更新2016-03-27 21:05:06


 [address]与[bx]

[address]

在debug中mov ax,[0] 等价于mov ax,ds:[0]     [0]表示内存偏移地址

但是在masm汇编解释器中,mov ax,[0] 等价于mov ax,0    [0]表示常量0

 [bx]

mov ax,[bx] 表示 bx存放的数据为一个偏移地址,段地址SA默认在ds中,将SA:EA处的数据送到ax中

(ax) = ((ds)*16+(bx))

mov [bx],ax 表示将ax处的数据送到SA:EA处

((ds)*16+(bx)) = (ax)

所以debug 中的 mov ax,[0]

可以在源程序中这样写

mov bx,0

mov ax,[0]


 16进制数不能以字母开头

比如 mov ax,0ffffh 而不是mov ax,ffffh

所以很容易推出大于Axxxh前面都应该加0


 loop与cx搭配使用

比如

s:mov ax,[bx]

  mov es:[bx],ax

 loop s

本质上loop s在masm解释器解释后表示s标识处的ip

本例中s等于mov ax,[bx]这一句的(ip)

隐含(cx) = (cx)-1 当(cx)等于0时,循环退出,继续执行下下面的汇编语句


mov ax,4c00h

int 21h

程序结束后的标准模板,一共5个byte

程序刚执行时,(cx)表示源程序总指令的值(byte)

则程序结束指令之前总有(cx)-5条指令


在一个谎言的国度,沉默就是英雄
原文地址:https://www.cnblogs.com/EdsonLin/p/5326905.html