作为参考,该代码适用于 motorola 68008。

假设我有如下代码:

org 200
sequenceO: ds.b 5
sequenceN: ds.b 5

move.w #sequenceO, A0
move.w #sequenceN, A1
  1. 我认为 A0 将保存值 200 而 A1 将保存值 205 是否正确?

  2. 过去的一篇论文中的一个考试问题是:“sequence0和sequenceN的物理地址是多少?”,答案是“200和205”,还是“200-204和205-209”?

  3. 我见过一些带有多个 org 指令的代码,例如;

    组织100

    数组1:DS.b 4

    组织300

我是否正确地认为遵循最后一个 org 指令,例如在本例中,array1 指向 300?

有帮助吗?

解决方案

  1. 是的,听起来不错。地址为 sequenceN 超出 5 个字节 sequence0.
  2. “这取决于”,我想......由于它是复数形式的“地址”,我猜他们想要整个范围,在这种情况下,您的后一个答案是正确的。
  3. 不,我希望有多个 orgs 仅适用于它们后面的代码,因此在这种情况下 array1 价格为 100 美元。由于后者之后没有代码或数据生成发生 org, ,它基本上被汇编器忽略。

其他提示

我假设“ORG”意味着“起源”——分配给正在发出的代码或数据段的第一个地址。

  1. 是的,200 和 205

  2. Sequence0 从 200 开始,延伸 5 个字节到 204

  3. 不,array1 从 100 开始,org 300 之后的任何内容都将从 300 开始

您正在使用: MOVE.W #sequenceO, A0

因此,您仅将地址的低位字(16 位)加载到 A0. 。这只会在内存非常低的情况下工作( A0 在下面 $00010000)

一般情况下使用 MOVE.W 在地址寄存器上变得很棘手。

尝试: LEA #sequence0, A0 (将 32 位地址加载到 A0)

大多数汇编器也会这样做:

MOVEA.L #sequence0, A0

谢谢,戴夫·斯莫尔

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top