间接寻址如何在汇编语言motorola 68k中工作

时间:2014-10-30 14:17:11

标签: assembly 68000 easy68k

我有这段代码:

loop2
        move.b  (a4)+,d3      * moving the morse code array input to d3
        muls    #5,d3
        add.b   $d3(a6),d3    * moving the character in morse code array to d4
        move.b  d3,d4
        cmp.b   #dot,d4

在这里,我正在访问从a4开始的数组。我正在获取数组的元素并将其乘以5以移动到我拥有所需元素的内存位置。

a6表示包含特定字符的数组的起点。

声明$d3(a6),d3 wokrs但代码有问题 因为我知道代码d3(a6),d3应该是正确的,但它显示我的错误。我该怎么办?

2 个答案:

答案 0 :(得分:0)

正在发生的事情是$用于指定十六进制常量,d3在技术上是一个有效的十六进制常量,它使用a6 + 0xd3作为内存地址。您要完成的任务使用不同的语法,即两个寄存器都在括号中:(a6,d3)

所以正确的陈述是:

add.b   (a6,d3),d3

答案 1 :(得分:0)

add.b (a6,d3),d3中,您可能应声明用于生成地址的d3的大小:(a6,d3.w)(a6,d3.l),具体取决于您的需要。一般情况下,在乘法后,您将获得完整的32位结果,并且应使用d3.l。只有当您确定乘法结果符合16位时,才能使用d3.w
如果您专门为68020+(020,030,040,060)编写代码,还可以考虑使用像(a6,d3.w*n)这样的缩放寻址模式,其中n是1,2,4,8中的一个。