【问题标题】:How to calculate physical address from this assembly instruction?如何从此汇编指令计算物理地址?
【发布时间】:2017-03-27 09:33:55
【问题描述】:

以下是英特尔微处理器的寄存器值

CX: FF0A

BX: AB5D

DI: BDEF

DX:1234

DS:CC20

SP:CD0F

说明:

  1. 添加 [BX+DI], CX

  2. MOV DX,[SP+1652H]

我想知道如何计算上述两条指令的物理地址

【问题讨论】:

  • 第一条指令也依赖于ds。第二条指令无效。
  • DS 是 CC20。现在请告诉我如何计算物理地址?
  • 那么您也应该在问题中提及 ds 寄存器的值。以免读者错过。
  • 这看起来很眼熟……昨晚不是有人问过这个作业问题吗>?
  • @DavidHoelzer 这只是其中的三分之一......(我想知道有多少学生在上这门课)。 stackoverflow.com/q/40568659/4271923

标签: assembly hex cpu-architecture microprocessors hardware-programming


【解决方案1】:

对于 1. ADD [BX+DI], CX 您需要先计算有效地址。

有效寻址 = Base + Index + Offset

然后,物理寻址将是: 物理寻址 = 分段 * 0x10 + 有效寻址

在您的情况下,Base 将是 bx 的值,index 将是 di 的值,并且 offset 将为空。现在自己计算。

【讨论】:

  • @SaminaJabeen 在 16b 模式下 x86 无法在任何指令中编码 [sp + imm16] 内存寻址,因此从技术上讲它是无效的。在 32b 模式下,[esp + imm32] 可以工作,所以问题的作者可能对此感到困惑。在 16b 模式下,通常使用 [bp + imm16] 代替(在特定代码部分的开头将 sp 复制到 bp 中),这有点棘手,因为它不会使用 ds 作为段寄存器,但另一个(就像esp 在 32b 模式下一样)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多