将 32 位带符号整数存储到寄存器中的具体细节是什么?

What are the specifics of STORING a 32 bit signed integer into a register?

我的数字类型是有符号的二进制补码整数。

在内存寄存器 %rdi/edi/di 中,我有 0xFFFFFFFF。 在 %rsi/esi/si 中,我有 0x80000000.

我的指令是addl %edi, %esi.

如何正确添加这些?

我认为答案是:

因为我要添加完整的 32 位寄存器,所以我可以添加全部数量的 0xFFFFFFFF 和 0x80000000。

所以,我将一个有符号整数添加到一个有符号整数中,它们都是 32 位的。我有效地添加了 -2147483648 和 0x80000000。由于 0x80000000 是十六进制的 2147483648,所以我将这两个相加得到零。

零旗激活 进位标志被激活(因为我添加了 32 位寄存器的前导值)

在32位二进制补码中,0xFFFFFFFF表示-1,0x80000000表示-2,147,483,648。这些总和为 −2,147,483,649。这不适合 32 位,因此会溢出。计算结果为0x7FFFFFFF,表示2,147,483,647.

在位级别:FFFFFFFF加上80000000产生17FFFFFFF,这意味着7FFFFFFF存储在32位目标中,1 是进位。