立即和程序计数器相对寻址

时间:2011-08-02 06:49:51

标签: assembly

我遇到了一个sic / xe机器的代码....下面是那些对我来说是问题根源的线路......

0003         LDB  #LENGTH  ;a
0020         LDA  #3       ;b
0033 LENGTH  RESW 1        ;c
103C        +LDT  #4096    ;d

现在给出'a'将有一个目标代码,其中将使用pc相对和立即模式....但b将只有立即模式....现在长度是0033,所以为什么使用pc相对模式....如果按照约定必须使用pc相对模式,那么为什么不在'b'中同时使用pc relative和immediate?

2 个答案:

答案 0 :(得分:0)

很抱歉,但这不是我对问题的期望。

首先,您的“代码行”完全脱离了上下文,因为第一列表示位置,因此我们错过了中间的所有位置。一个减去那个。

其次,请使用适当的标签将此作为家庭作业。一个减去那个。

第三,请提供对原始来源的引用,例如the PPT file your university gave you。二十减去那个。

认为自己很幸运,我只能减去一个。

现在我不是一个坏人,所有人都在一起,所以这里是我的答案FWIW:

LENGTH是属于地址0033的标签,保留3字节字,位于当前PC位置附近。由于汇编程序在决策中是自治的,因为PC相对要优先,并且由于最大偏差为2047绰绰有余,所以汇编程序采用PC-ralative。如果你查看我链接的PPT中的操作码,你会看到PC相对(p = 1)的偏移量为2D(十六进制),LDB指令后的位置为6,而2D + 6 = 33(所有十六进制,QED。

同样意义上是'b':由于b = 0且p = 0,我们使用立即寻址,操作码的“地址”为3,因此A加载常量3。

只有操作码中的加号表示format4使用带有20位地址字段的4字节指令。

答案 1 :(得分:0)

需要更改机器代码在存储器中的位置时,使用相对于程序计数器的地址。这对于垃圾收集通常是必需的。见安德鲁·W·阿佩尔(Andrew W. 连续编译;剑桥大学出版社,2007年。