题
作为参考,该代码适用于 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
数组1:DS.b 4
组织300
我是否正确地认为遵循最后一个 org 指令,例如在本例中,array1 指向 300?
解决方案
- 是的,听起来不错。地址为
sequenceN
超出 5 个字节sequence0
. - “这取决于”,我想......由于它是复数形式的“地址”,我猜他们想要整个范围,在这种情况下,您的后一个答案是正确的。
- 不,我希望有多个
org
s 仅适用于它们后面的代码,因此在这种情况下array1
价格为 100 美元。由于后者之后没有代码或数据生成发生org
, ,它基本上被汇编器忽略。
其他提示
我假设“ORG”意味着“起源”——分配给正在发出的代码或数据段的第一个地址。
是的,200 和 205
Sequence0 从 200 开始,延伸 5 个字节到 204
不,array1 从 100 开始,org 300 之后的任何内容都将从 300 开始
您正在使用: MOVE.W #sequenceO, A0
因此,您仅将地址的低位字(16 位)加载到 A0
. 。这只会在内存非常低的情况下工作( A0
在下面 $00010000
)
一般情况下使用 MOVE.W
在地址寄存器上变得很棘手。
尝试: LEA #sequence0, A0
(将 32 位地址加载到 A0
)
大多数汇编器也会这样做:
MOVEA.L #sequence0, A0
谢谢,戴夫·斯莫尔
不隶属于 StackOverflow