如何从该汇编指令中计算物理地址?

问题描述:

以下是英特尔微处理器的寄存器值如何从该汇编指令中计算物理地址?

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. 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