我有一个子程序,需要计算一个涉及其中的一些乘法和加法的函数。问题是我不明白如何在内存中存储有符号整数。
我是否使用普通整数并以特定方式使用它?
存储一个值只是将其二进制模式复制到内存中,因此符号在这里是无关紧要的。但是,当加载比寄存器宽度更窄的值时,必须区分有符号和无符号类型,因为CPU需要知道它应该零扩展或符号扩展值以填充寄存器。
此外,ARM使用二进制补码,这意味着两个值上的加,减和non-widening multiplication不关心值是有符号还是无符号,因为结果将完全相同。除了右移之外的所有按位操作都是一样的。对于基本操作,只有加宽乘法,除法,大于/小于和右移的比较产生不同的有符号结果,因此需要不同的指令。你应该阅读this answer了解更多信息。
进一步阅读