1 關於dword ptr 指令

2021-09-06 01:35:26 字數 1857 閱讀 3064

8086cpu的指令,可以處理兩種尺寸的資料,

byte

和word

。所以在機器指令中要指明,指令進行的是字操作還是位元組操作。對於這個問題,組合語言中用一下方法處理。

(1)通過暫存器名指明要處理的資料的尺寸。

例如:下面的指令中,暫存器指明了指令進行的是字操作:

mov ax,1

mov bx,ds:[0]

mov ds,ax

mov ds:[0],ax

inc ax

add ax,1000

下面的指令中,暫存器指明了指令進行的是位元組操作:

mov al,1

mov al,bl

mov al,ds:[0]

mov ds:[0],al

inc al

add al,100

(2)在沒有暫存器名存在的情況下,用操作符

x ptr

指明記憶體單元的長度,

x在彙編指令中可以為

word

或byte。

例如:下面的指令中,用word ptr

指明了指令訪問的記憶體單元是乙個字單元:

mov word ptr ds:[0],1

inc word ptr [bx]

inc word ptr ds:[0]

add word ptr [bx],2

下面的指令中,用byte ptr

指明了指令訪問的記憶體單元是乙個字單元:

mov byte ptr ds:[0],1

inc byte ptr [bx]

inc byte ptr ds:[0]

add byte ptr [bx],2

在沒有暫存器參與的記憶體單元訪問指令中,用word prt

或byte ptr

顯性地指明所要訪問的記憶體單元的長度是很必要的。否則,

cpu無法得知所要訪問的單元,還是位元組單元。

假如我們用debug

檢視記憶體的結果如下:

2000:1000 ff ff ff ff ff ff ......

那麼指令:

mov ax,2000h

mov ds,ax

mov byte ptr [1000h],1

將使記憶體中的內容變為:

2000: 1000 01 ff ff ff ff ff ......

而指令:

mov ax,2000h

mov ds,ax

mov word ptr [1000h],1

將使記憶體中的內容變為:

2000:

1000 01 00 ff ff ff ff ......

這是因為 mov byte ptr [1000h],1

訪問的是位址為

ds:1000h

的位元組單元,修改的是

ds:1000h

單元的內容;而

mov word ptr [1000h],1

訪問的是位址為

ds:1000h

的字單元,修改的是

ds:1000h

和 ds:1001h

兩個單元的內容。

ptr用來指出運算元的型別或尺寸

,通常用在跳轉

/調子程式或定址。定址時用來指明是

byte

、word

還是dword,

跳轉時則是

far或

near。

(3) 其他方法

有些指令預設了訪問的是字單元還是位元組單元,比如:push [1000h]

就不用指明訪問的是字單元還是位元組單元,因為

push

指令只進行字操作。

1 關於dword ptr 指令

8086cpu的指令,可以處理兩種尺寸的資料,byte 和word 所以在機器指令中要指明,指令進行的是字操作還是位元組操作。對於這個問題,組合語言中用一下方法處理。1 通過暫存器名指明要處理的資料的尺寸。例如 下面的指令中,暫存器指明了指令進行的是字操作 mov ax,1 mov bx,ds 0 ...

關於dword ptr 指令的意思

dword 雙字 就是四個位元組 ptr pointer縮寫 即指標 裡的資料是乙個位址值,這個位址指向乙個雙字型資料 比如mov eax,dword ptr 12345678 把記憶體位址12345678中的雙字型 32位 資料賦給eax贊同 5 指令要處理的資料有多長?cpu的指令,可以處理兩種...

關於編譯指令

自定義條件識別符號 define 下面例子中自定義了條件識別符號 bbbbb 識別符號和定義它的指令都不區分大小寫,但大家一般慣用大寫.begin showmessage 識別符號 bbbbb 已定義 showmessage 識別符號 bbbbb 未定義 end 測試預定義的 debug 和 rel...