2

作为参考,代码适用于摩托罗拉 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. 我见过一些带有多个组织指令的代码,例如;

    组织 100

    数组1:ds.b 4

    组织 300

我认为遵循最后一个 org 指令是否正确,例如在这种情况下,array1 指向 300?

4

4 回答 4

2

我假设“ORG”的意思是“原点”——分配给正在发出的代码或数据段的第一个地址。

于 2009-05-26T13:24:30.067 回答
2
  1. 是的,听起来不错。的地址sequenceN超出 5 个字节sequence0
  2. “这取决于”,我猜......因为它是复数形式的“地址”,我猜他们想要整个范围,在这种情况下,你的后一个答案是正确的。
  3. 不,我希望多个orgs 只适用于它们后面的代码,所以在这种情况下,array1它将是 100 美元。由于后者之后没有代码或数据生成org,因此汇编器基本上忽略了它。
于 2009-05-26T13:32:07.573 回答
1
  1. 是的,200 和 205

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

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

于 2009-05-26T13:34:52.200 回答
1

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

因此,您仅将地址的低位字(16 位)加载到A0. 这只适用于非常低的内存(A0$00010000

一般来说MOVE.W,在地址寄存器上使用 a 会很棘手。

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

大多数汇编程序也会这样做:

MOVEA.L #sequence0, A0

谢谢,小戴夫

于 2015-02-26T01:00:55.777 回答