0

我有这个代码:

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),d3wokrs 但代码有问题,因为我知道代码 d3(a6),d3 应该是正确的,但它显示了一个错误。我该怎么做?

4

2 回答 2

0

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

所以正确的说法是:

add.b   (a6,d3),d3
于 2014-10-30T14:25:55.633 回答
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 之一。

于 2014-11-10T12:44:20.390 回答