ORG指令在汇编代码中做了什么?

时间:2009-05-26 13:21:52

标签: assembly motorola 68000

供参考,代码适用于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

    array1:ds.b 4

    org 300

  4. 我是否认为遵循了最后的组织指令,例如在这种情况下,array1指向300?

4 个答案:

答案 0 :(得分:2)

我假设“ORG”表示“origin” - 要分配给正在发出的代码或数据段的第一个地址。

答案 1 :(得分:2)

  1. 是的,这听起来不错。 sequenceN的地址超出sequence0
  2. 的5个字节
  3. “那取决于”,我猜...因为它是复数的“地址”,我猜他们想要整个范围,在这种情况下你的后一个答案是正确的。
  4. 不,我希望多个org只应用于跟随它们的代码,因此在这种情况下,array1将为100美元。由于在后者org之后没有发生代码或数据生成,因此汇编程序基本上忽略了它。

答案 2 :(得分:1)

  1. 是,200和205

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

  3. 不,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