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