dword 雙字 就是四個位元組贊同ptr pointer縮寫 即指標
裡的資料是乙個位址值,這個位址指向乙個雙字型資料
比如mov eax, dword ptr [12345678] 把記憶體位址12345678中的雙字型(32位)資料賦給eax
.5 指令要處理的資料有多長?
cpu的指令,可以處理兩種尺寸的資料,byte(8位)和word(16位)。所以在機器指令中要指明,指令進行的是字操作還是位元組操作。對於這個問題,組合語言中用一下方法處理。
(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檢視記憶體的結果如下:
:1000 ff ff ff ff ff ff ......
那麼指令:
mov ax,2000h
mov ds,ax
mov byte ptr [1000h],1
將使記憶體中的內容變為:
: 1000 01 ff ff ff ff ff ......
而指令:
mov ax,2000h
mov ds,ax
mov word ptr [1000h],1
將使記憶體中的內容變為:
: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 兩個單元的內容。
(3) 其他方法
有些指令預設了訪問的是字單元還是位元組單元,比如:push [1000h] 就不用指明訪問的是字單元還是位元組單元,因為push指令只進行字操作。
1 關於dword ptr 指令
8086cpu的指令,可以處理兩種尺寸的資料,byte 和word 所以在機器指令中要指明,指令進行的是字操作還是位元組操作。對於這個問題,組合語言中用一下方法處理。1 通過暫存器名指明要處理的資料的尺寸。例如 下面的指令中,暫存器指明了指令進行的是字操作 mov ax,1 mov bx,ds 0 ...
1 關於dword ptr 指令
8086cpu的指令,可以處理兩種尺寸的資料,byte 和word 所以在機器指令中要指明,指令進行的是字操作還是位元組操作。對於這個問題,組合語言中用一下方法處理。1 通過暫存器名指明要處理的資料的尺寸。例如 下面的指令中,暫存器指明了指令進行的是字操作 mov ax,1 mov bx,ds 0 ...
關於 1 」 2 2 1 的具體意思
標準輸入 standard input 的檔案描述符是 0 標準輸出 standard output 是 1 標準錯誤 standard error 是 2 和 都是重定向輸出 是覆蓋,是追加 1 指標準資訊輸出路徑 也就是預設的輸出方式 2 指錯誤資訊輸出路徑 2 1 指將標準資訊輸出路徑指定為錯...