最后更新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条指令