LC-3 代码中的 011111100 指的是什么?
What does 011111100 refer to in this LC-3 Code?
好的,我正在看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。如果在另一条指令中使用相同的偏移量 #252 将引用不同的内存位置(即在 x3003 以外的位置)。注意 PCOffset9
是一个带符号的 9 位字段:在上面添加到 PC 之前,它被符号扩展为 16 位。被签名它可以向前和向后伸展,所以范围是-256到+255。
好的,我正在看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。如果在另一条指令中使用相同的偏移量 #252 将引用不同的内存位置(即在 x3003 以外的位置)。注意 PCOffset9
是一个带符号的 9 位字段:在上面添加到 PC 之前,它被符号扩展为 16 位。被签名它可以向前和向后伸展,所以范围是-256到+255。