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

Posted

技术标签:

【中文标题】011111100 在此 LC-3 代码中指的是啥?【英文标题】:What does 011111100 refer to in this LC-3 Code?011111100 在此 LC-3 代码中指的是什么? 【发布时间】:2021-08-04 00:47:07 【问题描述】:

好的,我在看一个LC-3的示例程序,一行代码如下:

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

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

【问题讨论】:

【参考方案1】:

立即数,在某些文本中称为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。

【讨论】:

感谢您的解释!我想我的问题是我没有意识到十六进制数的加减与常规整数不同 虽然计算机使用二进制存储数字和加法,而且我们经常使用十六进制来表示二进制,但我认为加法和减法的工作方式与数字基数无关。在某种意义上,寄存器只保存没有数字基数的数字:数字基数用于以字符串形式(字符序列)共享数字,例如I/O、打印、输入等。如果您对此有疑问,请提出。这里,x3004 + xFC = #12292 + #252 = #12544 = x3100。

以上是关于011111100 在此 LC-3 代码中指的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

AddressFamily.FireFox 在 .NET 套接字中指的是啥?

OData Edm.GeographyPoint 在 SQL Server 数据库中指的是啥类型

从 Java 代码中指定 DIP 尺寸的正确方法是啥?

是啥导致在此代码中调用 updateUIView()?

在此构建期间“以代码 9009 退出”是啥意思?

是啥导致 Safari 无法在此代码中获取 navigator.geolocation.getCurrentPosition?