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