-
byte ptr 和單詞 ptr 的含義如下。
位元組 PTR 表示 [di] 處的乙個位元組,表示指令訪問的儲存單元是乙個位元組單位,即 8 位,即最大數字為 0FFH,換算成 10 位小數。
這個數字是256。
由於方括號,該指令訪問記憶體。
這都是記憶。
定址上,方括號內的DI為位址變更暫存器,整個表示方式將DI中的內容作為偏移位址,然後用(DS)*16+(DI)得到的值作為儲存器中的實體地址。
如果沒有位元組 ptr,則實體地址對應低位元組內容,然後實體地址加 1 對應高位元組內容。 使用 byte ptr,您只需要獲取與實體地址對應的乙個位元組的內容。
Word ptr 表示指令訪問的儲存單元是兩個位元組單元,強制定義為字大小。 由於它只給出乙個記憶體位址,我不知道我想給 ax 的是位元組還是字,所以我需要用 word 來明確指出 ptr 是乙個顯示宣告。
mov ds:[si],10f 這是不允許的,因為 si 指向的空間大小只有 8 位(1 位元組),所以 mov wprd ptr ds:[si],10f 是告訴 CPU mov 的源位址大小為 2 位元組,其中可以儲存 10f。
-
位元組 PTR 表示 [di] 處的位元組,[di] 表示 di 指定的記憶體位址。
位元組 ptr [di],0 是將 [di] 處的乙個位元組填為 0,如果是字 ptr,則將該位置的兩個位元組填為 0。
word ptr word ptr [si] ;這是必須定義為字大小的。
mov ds:[si],10f ;這是不允許的,因為 SI 指向的空間大小只有 8 位(1 位元組),所以 mov wprd ptr ds:[si],10f 是告訴 CPU mov 的源位址大小為 2 位元組,其中可以儲存 10f。
10F 需要占用 9 位,記憶體中的最小空間為 1 位元組,因此 10F 需要占用記憶體中 2 個位元組的記憶體空間。
-
位元組 ptr 稱為屬性修飾符,具體來說,運算元是位元組; 相應地,ptr 運算元這個詞是乙個詞。
因此,mov byte ptr[bp],20h的結果,將20h的直接數放入ds x 10h+bp中,即位址21000+6200=27200h的內容為20h;
mov word ptr[bx],2000h,27200h 為 00h,27202h 為 20h,以 Intel 的倒位元組順序儲存。
-
Mov 位元組 ptr [bp], 20h 和.
mov word ptr [bx],2000h,這是什麼意思? 有區別嗎?
x86 CPU 可以執行 16 位指令或 8 位指令。
在說明中,如果您不解釋位數是多少,CPU 將無法完成其工作。
MOV CX, 200, Inc AL,這兩個指令使用暫存器,這對位數非常清楚。
鑑於:mov [bp],20h,此指令使用記憶體。
對於記憶體,可以傳輸兩個位元組或乙個位元組。
此指令有多少位數字?
這必須寫成:
mov byte ptr
bp],20h。
mov word ptr
bp],20h。
其中:位元組 PTR 或字 PTR,
描述如下:8 位或 16 位。
-
bp 暫存器資料段應儲存在堆疊段 ss 中,位址應為 ss*10h+bp
-
都是可整除的,但 div word ptr 位址的內容是 word,div 位元組 ptr 位址的內容是位元組
生成的機器指令也不同。
-
前者遞增 bx 指向的記憶體單元的值,後者遞增 bx 暫存器 inc 位元組 [bx] 的值,即增量 bx 指向的位元組單元格中的值 inc 字 [bx] 和增量 bx 指示的字(2 位元組)單元格的值。
-
byte
ptr 稱為屬性修飾符,具體來說,運算元是位元組; 相應地,字
ptr 運算元是乙個詞。
所以,mov
byteptr[bp],20h
因此,將 20 小時的即時計數放入 DS 中
x10h+bp,即位址21000+6200=27200h的內容為20h;
和 movword
ptr[bx],2000h
因此,27200h 是 00h,27202h 是 20h,它們以英特爾的反位元組順序儲存。
-
NEG是乙個補充指令,即補充乙個數字,你的指令採用暫存器間接定址的方式,目的是彌補位址di的下八位位元組,補充後內容保留在原來的位址,即di所代表的位址,下面是乙個簡單的程式, 可以直接拿去測試(編譯通過):
data segment
a dw 0014h
data ends
code segment
assume cs:code,ds:data
main: mov ax,data
mov ds,ax
mov di,a;執行此步驟後,您可以檢查位址 0014 的內容。
mov al,byte ptr[di];將位址單元 0014 值的下八位位元組分配給 al
neg byte ptr[di];編號 0014 中較低的 8 位數字是補充的。
mov bl,byte ptr[di];將補充後的內容分配給BL,可以比較AL和BL的值,看看有什麼區別。
mov ax,4c00h
int 21h
code ends
end main
這個程式先給位址0014賦給di,然後補0014的下八度內容,比如說我機0014的下八度內容是d8,補好後就變成了28,程式執行後al=14d8,bl=1428,那14個可以忽略他,不同的機器有不同的值,只要比較一下最後兩個上線的內容,不知道能不能看懂?
我們再舉乙個例子來說明補碼(以下資料都是十六進製的):
d8 後跟 28 28 + d8 = 100
14 補碼後面跟著 ec ec+14=100
1234 後跟 edcc edcc+1234=10000
ffff 補償後為 0001 ffff+0001=10000
1111 補償後跟 eeef 1111 + eeef = 10000
找到乙個模式,對吧? 呵呵,你可以一一測試。
-
這兩個問題是一回事,當無法確定儲存單元的長度時,必須用 x ptr 來解釋。
對於 8086,指令中有暫存器或彈出和推送指令。
1.如果指令中有暫存器,則可以確定儲存單元的長度或運算元的大小,例如:
mov ax,1
MOV BX、DS:[0] 等,2 位元組的運算元,字單位(16 位)。
mov al,1
MOV BH、DS:[0]等,操作 1 位元組,位元組單位(8 位)。
2.指令中有pop和push,運算元為2位元組,字單位(16位)。
在這兩種情況下,都可以確定儲存單元長度或運算元大小,並且無需使用 X PTR 來描述它。
X ptr 表示記憶單元的長度或運算元的大小。 任何無法確定儲存單元長度或運算元大小的內容都必須用 X PTR 描述。
-
x86 CPU 可以執行 16 位指令或 8 位指令。
在指令中,如果不指定白位數是多少,CPU 將不會這樣做。
mov cx, 200
inc al
這種指令使用暫存器,這使得位數非常清晰。
mov ds:[0],1,此指令使用記憶體。
在記憶體的情況下,可以傳輸兩個位元組或乙個位元組。
此指令有多少位數字?
這會混淆 CPU。
必須寫成:mov word ptr ds: [0],1,並新增 “word ptr”,即“word attributes”,這是 16 位數字的傳輸。
-
位元組 PTR [BP] 和字 PTR [BX] 是組合語言中的偽指令,用於指定儲存單元的資料。
這些型別通常位於本書的第 4 章中,請參閱組合語言程式設計部分的偽指令部分。
-
將ESP位址加上4C值(實際上是ESP+4C的值)的儲存單元位址傳送到重提的位址,如果使用MOV,則會在ESP+4C單元中傳送乙個雙字到EAX
-
將 SS(堆疊段)中的 ESP+4c 位址(注意它是位址,而不是位址中的值)放入 EAX 暫存器中(該暫存器可以儲存 4 個位元組,與您輸入的 4 位元組位址完全匹配)。 “dword ptr”是將儲存單元指定為雙字(同樣,word-ptr指定為字,byte-ptr指定為位元組)。
此外,MOV和LEA的區別:MOV AX、BUFF; 它是將 buff 儲存單元中的資料放入 ax 暫存器中。
而 Lea Ax, buff ; 就是把buff儲存單元的位址放到ax暫存器裡。
兩者的區別在於,乙個傳遞內容,另乙個傳遞位址。
-
即儲存單元ESP指向的儲存單元開頭的位址,在偏移位4之後,暫存器ESP對應的字首ss超過字首ss到eax
LEA 和 MOV 之間的區別是 Yes。
lea eax,dword ptr ss:[esp+4c],===mov offset dword ptr ss:[esp+4c],