汇编x86寄存器有符号或无符号

时间:2014-12-28 15:43:58

标签: assembly x86

我知道这是一个非常简单的问题,但我找不到答案。 x86汇编中的寄存器(eax,ebx edx等)是否已签名或未签名?如果它们是默认签名的,那么计算机如何知道将寄存器视为无符号的,例如我们将变量声明为unsigned int?谢谢!

2 个答案:

答案 0 :(得分:7)

CPU不知道也不关心。相反, Flags 寄存器中的位在某些操作上设置,程序对这些标志的作用取决于源代码告诉它的内容。

如,

mov eax, 0FFFFFFFFh
test eax, eax
js isNegative

VS

mov eax, 0FFFFFFFFh
test eax, eax
jb isNegative

第一次跳到'IsNegative'因为test在这里设置了标志标志。第二个没有,因为test将进位标记重置为0jb仅在1时跳转。

答案 1 :(得分:0)

x86中的32位寄存器是默认的无符号。例如,从32位操作数到64位寄存器的移动总是在长模型下进行零扩展。但是每个指令都根据其目的对寄存器进行了自己的解释,例如“添加”和“添加”。指令记录有符号或无符号的寄存器。您应该参考英特尔文档了解详细信息。