寄存器 AL 和 AX 溢出到哪里?

Where do registers AL and AX overflow to?

请告诉我以下汇编(伪)代码的结果是什么?
我们已经将寄存器 EAX 的所有位都设置为 0,所以反过来我们也将 AHALAX 设置为 0。但是当我减去最低位时AL,我们将取补码并相加,得到一串 1 后跟一个 0。

XOR eax, eax
SUB al 0x01

所以总而言之,我的问题是,在执行上面的代码时,只是 AL 会全是 1,还是也会 结转到 AXEAX.

add/sub 的进位输出进入 CF,EFLAGS 中的进位标志。

sub al, 1的操作数是AL,不是EAX。 EAX 的高 24 位不受 8 位操作数大小的指令影响。

如果你想将整个 EAX 翻转为全 1,你需要使用 sub eax, 1。 (或 not eax,或 dec eax)。 sub al, 1 是一条不同的指令,区别在于它只影响 AL(和 EFLAGS),不影响 AL 之外的任何位。


giving us a bunch of 1s followed by a 0.

没有。在 2 的补码中,-1 由一个设置了所有位的数字表示。例如,在 8 位中它是 0xFF,在 32 位中它是 0xFFFFFFFF。底部有一个 0 位,表示 -2.

will just AL be full of 1s, or will it also carry over to AX and EAX.

只是艾尔。您可以自己尝试一下(如果您仍然感到困惑,然后要求解释结果)。