[bx] 和 loop 指令

[bx]

assume cs:code
code segment
start:  mov ax, 2000H
        mov ds, ax
        mov al, [0]
        mov bl, [1]
        mov cl, [2]
        mov dl, [3]
        
        mov ax, 4c00H
        int 21H
code ends
end start

[bx]是什么?

[bx] 它表示一個內(nèi)存單元,跟 [0] 一樣,它的偏移地址在[bx]中

[bx] 與 [0] 的區(qū)別:

mov ax, [0]:在編譯器中運行時,會當(dāng)做 mov ax,0來執(zhí)行,而使用 mov ax, [bx]??會獲取偏移地址為0出的內(nèi)存單元的數(shù)據(jù)
?mov ax, [bx]

描述性符號:“()”,具體應(yīng)用如下:

()只是為了描述所用,在真實開發(fā)中不能這樣使用。

  • ax中的內(nèi)容為 0010H,我們可以這樣描述:(ax)=0010H
  • 2000:1000出的內(nèi)容為 0010H,我們可以著這樣描述:(21000H)=0010H,括號中的地址即為物理地址(內(nèi)容)
  • 對于 mov ax,[2],我們可以這樣描述:(ax)=( (ds)*16+2)
  • 對于 mov [2]. ax,我們可以這樣描述:( (ds)*16+2)=(ax)
  • add ax,2:(ax)=(ax)+2
  • add ax,bx:(ax)=(ax)+(bx)
  • push ax:
(sp)=(sp)-2  
?((ss)*16+(sp))=(ax)
  • pop ax
?((ss)*16+(sp))=(ax)
?(sp)=(sp)+2  
  • idata,表示常量

[bx]

mov ax, [bx]

功能:將bx中存放的數(shù)據(jù)作為一個偏移地址 EA·段內(nèi)地址SA默認在ds中,將SA:EA處的數(shù)據(jù)送入ax中。

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

loop指令

計算 2^3。

; 使用loop計算 2^3

assume cs:code

code segment

start:  mov ax, 2
        
        ; 這里循環(huán)執(zhí)行 2+2的操作,cx中存放循環(huán)的次數(shù),s為標(biāo)號,可自己指定
        mov cx, 3
     s: add ax,ax
        loop s
        ; 循環(huán)結(jié)束
        mov ax, 4c00H
        int 21H
code ends

end start

解析:

  • 上面的標(biāo)號 s,表示的是一個地址,這個地址上有一條指令:add ax, ax
  • loop s執(zhí)行步驟:
    • (cx)=(cx)-1
    • 判斷cx中的值是否為0,如果為0則執(zhí)行下一步(退出循環(huán)),否則執(zhí)行循環(huán)中的指令即add ax,ax

基本框架

mov cx, 循環(huán)次數(shù)
s: 
    循環(huán)體
    loop s

案例

用加法計算 123*126, 結(jié)構(gòu)存在ax中;

assume cs:code

code segment

start:  mov ax,0
        mov cx, 126
    s:  add ax,123
        loop s
        
        mov ax, 4c00H
        int 21H
code ends

end start

調(diào)試時,我們可以使用p命令跳出循環(huán)。

計算ffff:0006單元中的數(shù)乘以3,將結(jié)果存放在dx中。

; 計算ffff:0006單元中的數(shù)乘以3,將結(jié)果存放在dx中
assume cs:code

code segment

start:  mov ax, 0ffffH ; [0]為什么是 0ffffH
        mov ds, ax
        mov bx, 6,
        mov al, [bx]
        mov ah, 0 ;[1]以上兩句可以改成 mov ax, [bx]嗎?
        mov dx, 0
        
        mov cx,3
        
    s:  add dx, ax
        loop s
        
        mov ax, 4c00H
        int 21H
code ends

end start

解析:

  • [0]:大于9FFFF的十六進制的數(shù)有很多,如A0000H....,在匯編語言中不能以字母開頭,所以在前面加上0
  • [1]:可以,能夠通過編譯
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容