-1

我遇到了一个 sic/xe 机器的代码……下面是对我来说是问题根源的行……

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

现在给出'a'将有一个目标代码,其中将使用pc相对和立即模式....但b将只有立即模式....现在长度为0033,那么为什么使用pc relative模式....如果按照惯例必须使用 pc 相对模式,那么为什么不在“b”中同时使用 pc 相对模式和直接模式呢?

4

2 回答 2

0

当需要改变机器码在内存中的位置时,使用相对于程序计数器的地址。这通常是垃圾收集所必需的。见 Andrew W. Appel 的第 13.3 章;继续编译;剑桥大学出版社,2007 年。

于 2019-07-11T07:44:44.507 回答
-1

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

首先,您的“代码行”完全脱离上下文,因为第一列表示位置,所以我们缺少中间的所有位置。减一。

其次,请使用适当的标签将此作为作业。减一。

第三,请附上对原始来源的引用,比如你的大学给你的PPT文件。减二十。

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

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

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

'b' 的含义相同:由于 b=0 和 p=0 我们使用立即寻址,并且操作码的“地址”为 3,因此 A 加载了常数 3。

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

于 2011-11-28T22:16:44.780 回答