011111100 在此 LC-3 代码中指的是什么?

问题描述

好的,所以我正在查看 LC-3 中的示例程序,其中一行代码如下:

0010 0 10 011111100 ; R2 <- M[x3100]

所以我知道代码正在获取地址 x3100 处的内容并将它们存储到 R2 中,但是我对它们如何获取二进制代码的偏移部分感到困惑。当我用二进制查找 01111110 时,它是 252,十六进制数是 FC。那么这与 x3100 有何关系?

解决方法

立即数,在某些文本中称为 PCOffset9,是相对于 pc 的偏移量。因此,更完整的程序大概是这样的:

      .ORIG x3000
3000  ...
3001  ...
3002  ...
3003  LD R2,#252
      ...
      ...
3100

      .END

当这条指令执行时,PC 持有值 x3003,用于从内存中获取指令 LD R2,#252。在该指令的执行过程中,首先使用 PC 来获取指令,然后递增,然后将“有效地址”计算为 ea = PC + PCOffset9。这里PC是x3004(是x3003然后+1),直接是xFC,所以它们的总和是x3100。如果在另一条指令中使用(即在 x3003 以外的位置),则相同的偏移量 #252 将引用不同的内存位置。请注意,PCOffset9 是一个有符号的 9 位字段:在上述添加到 PC 之前,它被符号扩展为 16 位。有符号它可以向前和向后到达,所以范围是-256到+255。