在RISC-V I-Type的立即数字段中可以为负吗?

问题描述 投票:0回答:1

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

我的问题是,如果立即数可以表示为负数,那么我们也可以将地址表示为负整数吗?

riscv instruction-set
1个回答
0
投票

在RISC-V I-Type的立即数字段中地址是否可以为负?

立即数字段并没有真正存储地址-这样做太短了。它存储中等大小的整数,并对其使用进行扩展符号化,以便可以容纳正整数和负整数。

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

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

我的问题是,如果立即数可以表示为负数,那么我们也可以将地址表示为负整数吗?

后一项不是从前一项开始的。

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

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

对于完整的寄存器宽度项,例如32位int或32位指针/地址,使用无符号与有符号会告诉我们何时考虑溢出。我们应该对地址使用无符号算法,因为无符号具有适当的溢出条件。全为1的值是一个较大的正数,如果递增,则溢出并变为0。

相反,如果我们对地址使用带符号算术,即使应该从全1到0,也不会溢出。此外,如果我们不给01111 ... 111加1产生10000 ... 000,我们不应该溢出[[will。


请注意,在很多情况下,我们不会费心检查溢出,尤其是使用地址和指针算术。如果程序正确,则在计算我们知道存在的某些内存的地址时,计算将不会溢出。因此,验证您的内存分配是否成功很重要。
© www.soinside.com 2019 - 2024. All rights reserved.