我遇到了一个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?
答案 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年。