[英]how does indirect addressing work in assembly language motorola 68k
我有以下代码:
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
起作用,但是代码出错,因为我知道代码d3(a6),d3应该是正确的,但显示出错误。 我该怎么办?
这是因为$
是用于指定十六进制常量,而d3
从技术上讲是一个有效的十六进制常量,它使用a6 + 0xd3
作为内存地址。 您要完成的操作使用了不同的语法,即两个寄存器都在括号中: (a6,d3)
因此正确的陈述是:
add.b (a6,d3),d3
在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之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.