1,
匯編指令:具有對(duì)應(yīng)的機(jī)器碼指令,被編譯為機(jī)器指令,最終由CPU執(zhí)行。
偽指令:由編譯器來(lái)執(zhí)行的指令,編譯器據(jù)其執(zhí)行相關(guān)的編譯工作。
2,
segment和ends定義一個(gè)段的起始,指令、數(shù)據(jù)、堆棧被劃分到不同的棧。
end標(biāo)示一個(gè)匯編程序結(jié)束,assume假設(shè)某一段寄存器與segment…ends定義的段相關(guān)聯(lián)。
end后面加標(biāo)號(hào)通知編譯器程序入口,設(shè)置CS:IP。
3,
mov cx,3
s:
add ax,ax
loop s
執(zhí)行l(wèi)oop時(shí)先cx減1,若cx不位0就跳轉(zhuǎn)至s處。
4,
and al,01110011B
or al,00111010B
5,
段寄存器:ds, ss, cs, es;
寄存器:ax, bx, cx, dx,
ah, al, bh, bl, ch, cl, dh, dl,
sp, bp, si, di。
6,
[bx], [bx+si], [bx+di], [bx+si+3], [bx+di+3] 段都為ds;
[bp], [bp+si], [bp+di], [bp+si+5], [bx+di+5] 段都為ss。
7,
除法,后面可跟寄存器或內(nèi)存單元。
div 寄存器
div 內(nèi)存單元
al = 16位/8位; ah = 16位%8位。
ax= 32位/16位;dx = 32位%8位。
地位商,高位余。
div word ptr [dx+si+8];ax為ax除該內(nèi)存單元值的商,dx為ax除改內(nèi)存單元的余數(shù)。
8,
dup數(shù)據(jù)復(fù)制
db 3 dup (0); 0 0 0
db 3 dup (0, 1,2);0,1,2, 0,1,2, 0,1,2
db一個(gè)數(shù)據(jù)一個(gè)字節(jié);dw一個(gè)數(shù)據(jù)一個(gè)字word,雙字節(jié);dd一個(gè)數(shù)據(jù)雙字double word,四字節(jié)。
9,
操作符offset取得標(biāo)號(hào)的偏移地址,是由編譯器處理的符號(hào)。
mov ax, offset start;取標(biāo)號(hào)start的偏移地址賦值給 ax
10,
jmp通過(guò)修改ip或cs:ip無(wú)條件跳轉(zhuǎn)。
jmp short 標(biāo)號(hào);ip = ip + (8位位移)
jmp near ptr 標(biāo)號(hào); ip = ip + (16位位移)
short是段內(nèi)短轉(zhuǎn)移,對(duì)ip的修改范圍是(-128--127)前后2的7次方
near ptr 段內(nèi)近轉(zhuǎn)移,范圍是(-32768--32767)前后2的15次方
這個(gè)位移不是標(biāo)號(hào)的目的地址,是更具標(biāo)號(hào)位置計(jì)算出來(lái)的當(dāng)前ip值距離標(biāo)號(hào)位置的的差,jmp根據(jù)這個(gè)相對(duì)位移位置加當(dāng)前ip的值得到標(biāo)號(hào)位置賦值給ip使其跳轉(zhuǎn)。
段間轉(zhuǎn)移:
jmp far ptr 標(biāo)號(hào);cs=標(biāo)號(hào)所在段cs,ip=標(biāo)號(hào)所在段ip
jmp ax; ip = ax
jmp word ptr ds:[0] ;ip = ds:[0]
jmp dword ptr ds:[0]; ip = ds:[0], cs = ds:[2]
11,
jcxz 標(biāo)號(hào); if(cx ==0){jmp short 標(biāo)號(hào)}
loop 標(biāo)號(hào);cx--; if(cx!=0){ jmp short 標(biāo)號(hào)}
ret; pop ip
retf ;pop ip 和pop cs
call 標(biāo)號(hào);push ip和 jmp near ptr 標(biāo)號(hào)
call ax; push ip 和jmp near ptr ax
call word ptr ds:[0];同上
12,
乘法,后面可跟寄存器或內(nèi)存單元。
mul 寄存器
mul 內(nèi)存單元
如果是8位乘發(fā)結(jié)果放入 ax中,18位乘發(fā)高位放dx低位放ax
mul byte [0]; ax = al * ds:[0]
mul bx; ax = ax*bx的低位值,dx = ax*bx的高位值