我知道这是一个非常简单的问题,但我找不到答案。 x86汇编中的寄存器(eax,ebx edx等)是否已签名或未签名?如果它们是默认签名的,那么计算机如何知道将寄存器视为无符号的,例如我们将变量声明为unsigned int?谢谢!
答案 0 :(得分:7)
CPU不知道也不关心。相反, Flags 寄存器中的位在某些操作上设置,程序对这些标志的作用取决于源代码告诉它的内容。
如,
mov eax, 0FFFFFFFFh
test eax, eax
js isNegative
VS
mov eax, 0FFFFFFFFh
test eax, eax
jb isNegative
第一次跳到'IsNegative'因为test
在这里设置了标志标志。第二个没有,因为test
将进位标记重置为0
而jb
仅在1
时跳转。
答案 1 :(得分:0)
x86中的32位寄存器是默认的无符号。例如,从32位操作数到64位寄存器的移动总是在长模型下进行零扩展。但是每个指令都根据其目的对寄存器进行了自己的解释,例如“添加”和“添加”。指令记录有符号或无符号的寄存器。您应该参考英特尔文档了解详细信息。