【发布时间】:2013-12-29 16:01:35
【问题描述】:
我想知道在使用 IA32 架构时,默认情况下操作数是有符号还是无符号。
在 Linux 操作系统上,我使用 as(GNU 汇编器)将 253 存储在 %eax 寄存器中。存储在%al 中的实际值(即eax 的lsb)显示-3。我在这里假设 al 使用范围 -127 到 +127 而不是 0 到 255。
我正在使用 gdb 来检查寄存器值。
所以想知道操作数是否默认在 IA32 架构中签名。
【问题讨论】:
-
它们本身既没有签名也没有签名。它们是签名还是未签名取决于您如何使用它们。 AL 中的值为 11111101。问这个是有符号还是无符号就像是在问杯子是半满的还是半空的。
-
@RaymondChen 感谢您的 cmets,当我查看寄存器 %al(lsb of %eax) 时,它显示 -3,所以我试图理解为什么它显示 -3 而不是 253跨度>
-
-3和253,您的查看器选择将其呈现为带符号值 -
253 和 -3 都是对位模式 11111101 的有效解释。在 Internet 上快速搜索显示 GDB always considers the contents of an ordinary register as an integer when the register is examined in this way。因此 GDB 将寄存器视为已签名以用于显示目的,但这是一个解释问题。 CPU 不在乎。
-
@RaymondChen 感谢您的cmets,我现在明白了