[英]Motorola 68k Addressing errors
所以,基本上,我在星期三有考试,并且我从星期五开始学习68k汇编,因为我一直在努力学习星期五通过的数学考试(我知道您不在乎,但是我这么说您不认为我是个******。)无论如何,我正在尝试编写一个子程序,该程序将[i]与数字#12进行比较。 如果[i] =#12,则内存偏移量($ 8200 + [i])= D3-#1,否则ELSE内存偏移量($ 8100 + [i])= 2 * D3。 当我尝试组装(使用ASIMTOOL)时,它给了我这些错误
ERROR in line 10: Displacement out of range
ERROR in line 12: Displacement out of range
ERROR in line 15: Invalid syntax
ERROR in line 16: Invalid syntax
我知道这段代码是s * it的负载,但是我没有人提供帮助,我正在尝试自己完成这项工作。 如果您能提供帮助,那就太好了,谢谢。 这是代码:
ORG $8000
START MOVE.l #0,D3
MOVEA.l #$8200,a0
MOVEA.l #$8100,a1
CMP.w #12,i
BEQ.s VERO
JMP FALSO
VERO: SUB.w #1,D3
MOVE.l D3,i(a0)
FALSO: MULU.w #2,D3
MOVE.w D3,i(a1)
STOP #2000
i DC.w 12
x DC.w #4
y DC.w #3
END START
您可能要下载《 M68000程序员参考手册》。 这是该文档中寻址方式的摘要( “表2-4。有效寻址方式和类别” ):
Addressing Modes Syntax
Register Direct
Data Dn
Address An
Register Indirect
Address (An)
Address with Postincrement (An)+
Address with Predecrement -(An)
Address with Displacement (d16,An)
Address Register Indirect with Index
8-Bit Displacement (d8,An,Xn)
Base Displacement (bd,An,Xn)
Memory Indirect
Postindexed ([bd,An],Xn,od)
Preindexed ([bd,An,Xn],od)
Program Counter Indirect
with Displacement (d16,PC)
Program Counter Indirect with Index
8-Bit Displacement (d8,PC,Xn)
Base Displacement (bd,PC,Xn)
Program Counter Memory Indirect
Postindexed ([bd,PC],Xn,od)
Preindexed ([bd,PC,Xn],od)
Absolute Data Addressing
Short (xxx).W
Long (xxx).L
Immediate #<xxx>
与MOVE.l D3,i(a0)
匹配的寻址模式是“间接寄存器,地址随位移” 。 问题是您似乎正在尝试从变量中加载值,并将其用作单个指令中的位移。 位移必须是一个立即常数,所以这就是它不起作用的原因。 相反,您可以使用ADDA
将i
的值添加到a0
,然后执行move.l d3,(a0)
。
您可能应该从DC.w
s中删除#
号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.