我知道这是一个非常简单的问题,但我找不到答案。
x86 程序集中的寄存器(eax、ebx edx 等)是有符号的还是无符号的?如果默认情况下它们是有符号的,例如,如果我们将变量声明为 unsigned int,计算机如何知道将寄存器视为无符号?谢谢!
最佳答案
CPU 不知道也不关心。相反, 中的位旗帜 register 是针对某些操作设置的,您的程序如何处理这些标志取决于源代码告诉它的内容。
例如。,
mov eax, 0FFFFFFFFh
test eax, eax
js isNegative
对比
mov eax, 0FFFFFFFFh
test eax, eax
jb isNegative
第一个跳转到 'IsNegative' 因为
test
在这里设置标志标志。第二个没有,因为test
将进位标志重置为 0
和 jb
只有在 1
时才会跳转.
关于汇编 x86 寄存器有符号或无符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27677906/