|
8086CPU的指令,可以處理兩種尺寸的數(shù)據(jù),byte和word。所以在機(jī)器指令中要指明,指令進(jìn)行的是字操作還是字節(jié)操作。對(duì)于這個(gè)問(wèn)題,匯編語(yǔ)言中用一下方法處理。 (1)通過(guò)寄存器名指明要處理的數(shù)據(jù)的尺寸。 例如: 下面的指令中,寄存器指明了指令進(jìn)行的是字操作: mov ax,1 mov bx,ds:[0] mov ds,ax mov ds:[0],ax inc ax add ax,1000 下面的指令中,寄存器指明了指令進(jìn)行的是字節(jié)操作: mov al,1 mov al,bl mov al,ds:[0] mov ds:[0],al inc al add al,100 (2)在沒(méi)有寄存器名存在的情況下,用操作符 X ptr 指明內(nèi)存單元的長(zhǎng)度,X在匯編指令中可以為word或byte。 例如: 下面的指令中,用word ptr 指明了指令訪問(wèn)的內(nèi)存單元是一個(gè)字單元: mov word ptr ds:[0],1 inc word ptr [bx] inc word ptr ds:[0] add word ptr [bx],2 下面的指令中,用byte ptr 指明了指令訪問(wèn)的內(nèi)存單元是一個(gè)字單元: mov byte ptr ds:[0],1 inc byte ptr [bx] inc byte ptr ds:[0] add byte ptr [bx],2 在沒(méi)有寄存器參與的內(nèi)存單元訪問(wèn)指令中,用word prt 或byte ptr 顯性地指明所要訪問(wèn)的內(nèi)存單元的長(zhǎng)度是很必要的。否則,CPU無(wú)法得知所要訪問(wèn)的單元,還是字節(jié)單元。 假如我們用Debug查看內(nèi)存的結(jié)果如下: 2000:1000 FF FF FF FF FF FF ...... 那么指令: mov ax,2000H mov ds,ax mov byte ptr [1000H],1 將使內(nèi)存中的內(nèi)容變?yōu)椋?/span> 2000: 1000 01 FF FF FF FF FF ...... 而指令: mov ax,2000H mov ds,ax mov word ptr [1000H],1 將使內(nèi)存中的內(nèi)容變?yōu)椋?/span> 2000:1000 01 00 FF FF FF FF ...... 這是因?yàn)?mov byte ptr [1000H],1訪問(wèn)的是地址為 ds:1000H 的字節(jié)單元,修改的是ds:1000H 單元的內(nèi)容;而mov word ptr [1000H],1 訪問(wèn)的是地址為 ds:1000H 的字單元,修改的是 ds:1000H 和 ds:1001H 兩個(gè)單元的內(nèi)容。 PTR用來(lái)指出操作數(shù)的類型或尺寸,通常用在跳轉(zhuǎn)/調(diào)子程序或?qū)ぶ贰ぶ窌r(shí)用來(lái)指明是BYTE、WORD還是DWORD,跳轉(zhuǎn)時(shí)則是FAR或NEAR。 (3) 其他方法 有些指令默認(rèn)了訪問(wèn)的是字單元還是字節(jié)單元,比如:push [1000H] 就不用指明訪問(wèn)的是字單元還是字節(jié)單元,因?yàn)?span style="font-family: Times New Roman;">push指令只進(jìn)行字操作。 |
|
|
來(lái)自: 真的吳語(yǔ) > 《匯編相關(guān)》