我有这段代码:
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应该是正确的,但它显示我的错误。我该怎么办?
答案 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中的一个。