【问题标题】:Can address be negative in the immediate field of the RISC-V I-Type?RISC-V I-Type 的直接字段中的地址可以是负数吗?
【发布时间】:2020-04-05 16:55:03
【问题描述】:

我了解到在 RICS_V ISA 中不需要“subi”,并且立即字段表示一个二进制补码整数来完全执行操作。

我的问题是,如果直接部分可以表示为负数,那么我们是否也可以将地址表示为负整数?

【问题讨论】:

    标签: riscv instruction-set


    【解决方案1】:

    RISC-V I-Type 的直接字段中的地址可以为负数吗?

    立即字段并不真正存储地址——它太短了,不能这样做。它存储中小整数,并在使用上进行了有符号扩展,因此它可以容纳正整数和负整数。

    我了解到在 RICS_V ISA 中不需要“subi”,并且立即字段表示一个二进制补码整数来完全执行操作。

    是的。立即数字段在使用前确实被符号扩展为 32(或 64)位,因此我们可以添加一个负立即数而不是减去一个正立即数。

    我的问题是,如果直接部分可以表示为负数,那么我们是否也可以将地址表示为负整数?

    后一项不继承前一项。

    内存系统有一个地址总线,它只是一个有序的位数组。在地址总线上没有考虑符号或负值——MSB 被视为更高的幅度而不是符号位。因此,我们认为地址是无符号数。

    但是,没有什么可以阻止您将内存地址解释(例如打印)为有符号整数。


    2 对有符号数的补码表示意味着在对有符号数进行加法、乘法、减法或比较时会出现与使用无符号数进行相同操作时相同的位模式。由于结果的位模式相同,真正的区别在于确定溢出,因为有符号数和无符号数溢出不同。

    我们应该对地址使用无符号算术,因为无符号具有正确的溢出标准:全 1 的值是一个很大的正数,如果递增,则会溢出并变为 0。

    相比之下,如果我们对地址使用有符号算术,即使我们应该从全 1 变为 0,我们也不会溢出。此外,如果我们将 1 加到 01111...111 得到 10000...000,我们在不应该的情况下得到溢出。


    请注意,在许多情况下,我们不会费心检查溢出,尤其是地址和指针运算。如果程序是正确的,那么在计算我们知道存在的某个内存的地址时,计算不会溢出。因此,验证您的内存分配是否成功非常重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      相关资源
      最近更新 更多