假設一個字節已經在數據段直接存儲器尋址模式
DSEG SEGMENT
NUM DB ?
DSEG ENDS
然後定義,什麼是以下指令尋址模式的術語的含義?
LEA SI, NUM
和
MOV NUM, 1AH
由於NUM
爲存儲器條目的標籤(比如1000H),我假定第一一個被解釋爲MOV SI, [1000]
和第二被解釋爲MOV [1000], 1AH
。所以,他們使用直接內存尋址模式。我對嗎?
假設一個字節已經在數據段直接存儲器尋址模式
DSEG SEGMENT
NUM DB ?
DSEG ENDS
然後定義,什麼是以下指令尋址模式的術語的含義?
LEA SI, NUM
和
MOV NUM, 1AH
由於NUM
爲存儲器條目的標籤(比如1000H),我假定第一一個被解釋爲MOV SI, [1000]
和第二被解釋爲MOV [1000], 1AH
。所以,他們使用直接內存尋址模式。我對嗎?
沒有,不完全。
LEA
用於將地址移動到目的地。因此,標籤NUM
所代表的地址被移至SI
。這是直接模式,因爲您直接將值移入寄存器。
第二個,雖然它沒有byte ptr
或[]
,將值0x1a移動到由標籤NUM
表示的內存位置。這是直接模式,因爲您正在使用由NUM
表示的原始內存地址。
你的意思是'lea'使用立即尋址,而第二個使用直接模式? – mahmood
不是。 LEA並不真正移動數據,它只是計算出地址和偏移量,使您可以快速進行一些簡單的數學計算。看看我對這個問題的回答:http://stackoverflow.com/questions/1658294/whats-the-purpose-of-the-lea-instruction –
第二個是使用直接尋址。 –
'LEA'加載操作數的地址,而不是存儲在那裏的值。 –
所以在這種情況下地址是'[10000]'。不是嗎? – mahmood
'10000H'超過16位,你使用的是16位x86,所以你錯了! –