【问题标题】:immediate and program counter relative addressing立即数和程序计数器相对寻址
【发布时间】:2011-08-02 06:49:50
【问题描述】:

我遇到了一个 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 呢?

【问题讨论】:

  • 抱歉,我无法回答您的问题。你能澄清一下吗? (看起来 a 确实不是 PC 相关的,但我不知道这个特定的架构。)
  • @david 我读到(我指的是 leland l beck 关于系统软件的书)在 sic/xe 结构中,地址是 pc 相关的,如果超出范围,则基本相对....所以我非常相信会是这种情况,但后来我看到对于“b”只使用即时模式(虽然不使用 PC 模式,但可行)......然后在下一段书中说明了“a”的情况没有任何理由

标签: assembly sic


【解决方案1】:

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

【讨论】:

  • 您是在谈论压缩/垃圾收集 JITed 代码块 + “静态”数据吗?这段代码是用 asm 源代码编写的,所以它是提前编译的,实际上可以是静态的,不需要更多。 PC 相对寻址的另一个主要原因是,相对于地址空间的大小,当数据接近代码时,它比绝对寻址更紧凑。 (例如,在 64 位地址空间中具有 32 位 PC 相关的 x86-64。)
【解决方案2】:

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

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

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

第三,请包括对原始来源的引用,例如the PPT file your university gave you。减二十。

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

现在我不是一个坏人,所有的人都在一起,所以这是我的答案 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 2017-06-23
    • 1970-01-01
    • 2013-04-07
    • 2018-05-02
    • 2012-09-02
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多