我已经学习了一半的汇编语言,对于有符号和无符号整数在位上的表示方式很熟悉。我知道这可能是一个奇怪的问题,答案也很明显,但是我想知道是否可以使用像加法这样的算术运算来处理一个被认为是有符号的数字和另一个被认为是无符号的数字。我考虑了多个例子,如下所示,将产生正确的结果:
10000001(1字节整数,被视为无符号,相当于129)
+
11111111(1字节整数,被视为有符号(二进制补码系统),相当于-1)
10000000(1字节整数,在无符号逻辑中相当于128)
现在,如果上面的值在AL寄存器中,并且我们有以下指令代码(以GAS格式):
addb -1, %al
在执行操作后,如果EFLAGS寄存器的进位标志(CF)被设置,将会提示发生了溢出,但实际上并没有发生。可能是因为存在一个无符号数导致,此时应该参考EFLAGS寄存器的溢出标志(OF)。所以我不确定是否有必要这样做。
ADD.W D3,A5
或在TMS32050上是ADD *+
将符号扩展16位值并将其添加到32位寄存器中。TMS还具有ADDU *+
以将16位无符号值添加到32位寄存器中。 - supercat