繁体   English   中英

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

[英]Assembly x86 registers signed or unsigned

我知道这是一个非常简单的问题,但我找不到答案。 x86 程序集中的寄存器(eax、ebx edx 等)是有符号的还是无符号的? 如果默认情况下它们是有符号的,例如,如果我们将变量声明为 unsigned int,计算机如何知道将寄存器视为无符号? 谢谢!

CPU 不知道也不关心。 相反,标志寄存器中的位是针对某些操作设置的,您的程序如何处理这些标志取决于源代码告诉它的内容。

例如,

mov eax, 0FFFFFFFFh
test eax, eax
js isNegative

对比

mov eax, 0FFFFFFFFh
test eax, eax
jb isNegative

第一个跳转到“IsNegative”,因为test在这里设置了标志标志。 第二个没有,因为test将进位标志重置为0并且jb只有在它是1才会跳转。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM