匯編入門學習筆記 (四)—— [BX] 和 loop指令
參考:《匯編語言》 王爽 第5章
1.[BX]
mov al,[1]
在debug中,會把bs:1 中數據賦給al,但在在masm中不會把bs:1 中數據賦給al,而是把 [1] 認為是 1 賦給al。
如果要實現(xiàn)在debug中的mov al,[1],在masm中就需要[bx]
如:
mov bx,1
mov al,[bx]
還可以用 bs:[1] 的方式
如:
mov al,bs:[1]
2.loop
循環(huán) 要使用 loop指令
例子:計算2^20
- assumecs:codesg
- codesgsegment
- start:movax,0
- movcx,20
- s:addax,2
- loops
- movax,4c00H
- int21H
- codesgends
- endstart
cx 存放 循環(huán)的次數,每次循環(huán)減1
s是標號 可以任意取名,表示循環(huán)的開始處,loop 跳轉到s處,可以用debug單步調試看到 上面代碼,loop s其實就是 loop 0006H
3.debug 中l(wèi)oop調試
可以用 -g 000B (安裝上面代碼的調試)運行到指定代碼停止,來跳出循環(huán)。
或者在循環(huán)中直接用 -p 來跳出循環(huán)
4.一段安全空間
一般情況下 DOS中 0:200H~0:2ffH 空間 沒有系統(tǒng)或者其他程序的數據或者代碼,可以使用。
5.段前綴的使用
前面的mov al,bs:[1]
這里bs: 叫做段前綴
不僅bs可以
mov ax,ds:[bx]
mov ax,cs:[bx]
mov ax,ss:[bx]
mov ax,es:[bx]
都可以
例子:把內存 ffff:0~ffff:b 單元中的數據復制到 020:0~020:f 中。
- assumecs:codesg
- codesgsegment
- start:movax,0ffffh
- movds,ax
- movax,0020H
- moves,ax
- movcx,12
- movbx,0
- s:moval,ds:[bx]
- moves:[bx],al
- incbx
- loops
- movax,4c00H
- int21H
- codesgends
- endstart
評論