1

以下是英特爾微處理器的寄存器值如何從該彙編指令中計算物理地址?

CX:FF0A

BX:AB5D

DI:BDEF

DX:1234

DS:CC20

SP:CD0F

指令:

  1. ADD [BX + DI],CX

  2. MOV DX,[SP + 1652H]

我想知道如何計算上述兩條指令的物理地址

+1

它也取決於'ds'的第一條指令。第二條指令無效。 – harold

+0

DS是CC20。現在請告訴我如何計算物理地址? –

+0

你應該提及ds寄存器在問題中的價值。讓讀者不要錯過它。 –

回答

1

對於1. ADD [BX + DI],CX 您將需要首先計算有效地址。

有效解決=基地+指數+偏移

然後,物理尋址將是: 物理地址=分割*爲0x10 +有效解決

在你的情況,基地將是BX的價值,索引將是di的值,並且偏移將是空的。現在自行計算。

+0

它是。謝謝。並且第二條指令是錯誤的? –

+0

@SaminaJabeen在16b模式下,x86無法在任何指令中對[[sp + imm16]]內存尋址進行編碼,所以在技術上它是無效的。在32b模式下'[esp + imm32]'可以工作,所以問題的作者可能會因此而困惑。在16b模式下,通常會使用'[bp + imm16]'(在特定部分代碼的開始處將'sp'複製到'bp'中),這是一個小問題,因爲它不會使用'ds'作爲段寄存器,但另一個(就像32位模式下的esp一樣)。 – Ped7g