2016-10-16 67 views
-1

假設一個字節已經在數據段直接存儲器尋址模式

DSEG  SEGMENT 
    NUM DB ? 
DSEG  ENDS 

然後定義,什麼是以下指令尋址模式的術語的含義?

LEA  SI, NUM 

MOV  NUM, 1AH 

由於NUM爲存儲器條目的標籤(比如1000H),我假定第一一個被解釋爲MOV SI, [1000]和第二被解釋爲MOV [1000], 1AH。所以,他們使用直接內存尋址模式。我對嗎?

+0

'LEA'加載操作數的地址,而不是存儲在那裏的值。 –

+0

所以在這種情況下地址是'[10000]'。不是嗎? – mahmood

+0

'10000H'超過16位,你使用的是16位x86,所以你錯了! –

回答

2

沒有,不完全。

LEA用於將地址移動到目的地。因此,標籤NUM所代表的地址被移至SI。這是直接模式,因爲您直接將值移入寄存器。

第二個,雖然它沒有byte ptr[],將值0x1a移動到由標籤NUM表示的內存位置。這是直接模式,因爲您正在使用由NUM表示的原始內存地址。

+0

你的意思是'lea'使用立即尋址,而第二個使用直接模式? – mahmood

+1

不是。 LEA並不真正移動數據,它只是計算出地址和偏移量,使您可以快速進行一些簡單的數學計算。看看我對這個問題的回答:http://stackoverflow.com/questions/1658294/whats-the-purpose-of-the-lea-instruction –

+0

第二個是使用直接尋址。 –