供参考,代码适用于motorola 68008。
说我有以下代码:
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
我认为A0会保持值200而A1值是205吗?
过去论文中的一个考题是:“sequence0和sequenceN的物理地址是什么?”,答案是“200和205”,还是“200-204和205” -209" ?
我见过几段带有多个组织指令的代码,例如;
org 100
array1:ds.b 4
org 300
我是否认为遵循了最后的组织指令,例如在这种情况下,array1指向300?
答案 0 :(得分:2)
我假设“ORG”表示“origin” - 要分配给正在发出的代码或数据段的第一个地址。
答案 1 :(得分:2)
sequenceN
的地址超出sequence0
。org
只应用于跟随它们的代码,因此在这种情况下,array1
将为100美元。由于在后者org
之后没有发生代码或数据生成,因此汇编程序基本上忽略了它。答案 2 :(得分:1)
是,200和205
Sequence0从200开始,并延伸5个字节到204
不,array1从100开始,组织300之后的所有内容都将以300开始
答案 3 :(得分:1)
您正在使用:MOVE.W #sequenceO, A0
因此,您只将地址的低位字(16位)加载到A0
。
这只能在非常低的内存中使用(A0
下的$00010000
)
通常在地址寄存器上使用MOVE.W
会变得棘手。
尝试:LEA #sequence0, A0
(将32位地址加载到A0
)
大多数装配工也会这样做:
MOVEA.L #sequence0, A0
谢谢,Dave Small