【问题标题】:68k ASM addressing modes68k ASM 寻址模式
【发布时间】:2019-03-25 01:34:19
【问题描述】:

我在大学学习了一些 68k/Coldfire,并且很难理解更复杂的寻址模式(数字在取消引用的括号附近)。

我认为这里的例子是最好的:

A) lea:
A1) lea $5(a1,a2.l), a0
A2) lea -1(a1,a2), a0

B) move:
B1) move.b 1(a1),d0
B2) move.b -2(a1),d0

谁能用简单的语言解释一下每条指令中发生了什么?

如果需要,请详细说明(前/后增量等)。

谢谢!! ;)

【问题讨论】:

  • do 不是寄存器名称。我假设您的意思是d0,所以我在应用格式时修复了这个问题。您的第二个 LEA 省略了目标操作数,所以我认为应该是 a0。您是在这里询问 68000 或 Coldfire,还是两者兼而有之? (以防万一,我对 Coldfire 了解不多。)

标签: assembly 68000 addressing-mode coldfire


【解决方案1】:

广告说明:

  • A1) A0 将设置为 A1+A2+5
  • A2) A0 将设置为 A1+A2-1

正如 lea 指令的名称所暗示的那样,它用于将地址加载到地址寄存器中。它不会从间接寻址中移动数据。我还没有检查这些说明是否有效,而且我的 68k 技能现在已经很生疏了,所以我认为它们是有效的。未在 A2 中指定索引寄存器宽度会引入歧义。在我的脑海中,我不记得 .W 或 .L 是否是此处的默认寄存器宽度,因此指定这可能是个好主意。

广告移动说明:

  • B1) D0 将设置为紧跟在 A1 中存储的地址之后的字节。例如。如果 A1 设置为 $1000,则将读取的字节是地址 $1001 处的字节。
  • B2) 与 B1 相同,但内容将从 A1 地址前面的 2 个字节读取。再次假设 A1 将预加载 $1000,将读取的字节是位置 $FFE 处的字节。

为完整起见,寻址模式为:

  • A1) 使用索引和位移间接注册
  • A2) 同上
  • B1) 使用位移间接注册
  • B2) 同上

【讨论】:

  • 在 Coldfire 中无需指定索引寄存器的宽度 - 这里,索引寄存器始终为 .l - 也支持 68k 字宽。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多