8086CPU的指令,可以處理兩種尺寸的數(shù)據(jù),,byte和word,。所以在機器指令中要指明,指令進行的是字操作還是字節(jié)操作,。對于這個問題,,匯編語言中用一下方法處理。 (1)通過寄存器名指明要處理的數(shù)據(jù)的尺寸,。 例如: 下面的指令中,,寄存器指明了指令進行的是字操作: mov ax,1 mov bx,ds:[0] mov ds,ax mov ds:[0],ax inc ax add ax,1000 下面的指令中,寄存器指明了指令進行的是字節(jié)操作: mov al,1 mov al,bl mov al,ds:[0] mov ds:[0],al inc al add al,100 (2)在沒有寄存器名存在的情況下,,用操作符 X ptr 指明內(nèi)存單元的長度,,X在匯編指令中可以為word或byte。 例如: 下面的指令中,,用word ptr 指明了指令訪問的內(nèi)存單元是一個字單元: mov word ptr ds:[0],1 inc word ptr [bx] inc word ptr ds:[0] add word ptr [bx],2 下面的指令中,,用byte ptr 指明了指令訪問的內(nèi)存單元是一個字單元: mov byte ptr ds:[0],1 inc byte ptr [bx] inc byte ptr ds:[0] add byte ptr [bx],2 在沒有寄存器參與的內(nèi)存單元訪問指令中,用word prt 或byte ptr 顯性地指明所要訪問的內(nèi)存單元的長度是很必要的,。否則,,CPU無法得知所要訪問的單元,還是字節(jié)單元,。 假如我們用Debug查看內(nèi)存的結果如下: 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 ...... 這是因為 mov byte ptr [1000H],1訪問的是地址為 ds:1000H 的字節(jié)單元,,修改的是ds:1000H 單元的內(nèi)容;而mov word ptr [1000H],1 訪問的是地址為 ds:1000H 的字單元,,修改的是 ds:1000H 和 ds:1001H 兩個單元的內(nèi)容,。 PTR用來指出操作數(shù)的類型或尺寸,通常用在跳轉/調(diào)子程序或尋址,。尋址時用來指明是BYTE、WORD還是DWORD,跳轉時則是FAR或NEAR,。 (3) 其他方法 有些指令默認了訪問的是字單元還是字節(jié)單元,,比如:push [1000H] 就不用指明訪問的是字單元還是字節(jié)單元,因為push指令只進行字操作,。 |
|