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

Ani*_*nha 3 x86 assembly integer-overflow cpu-registers ctf

请告诉我以下汇编(伪)代码的结果是什么?
我们已经设置寄存器的所有位EAX为0,这样反过来我们也有AHALAX为0。但是,当我减去最低位AL,我们将采取补和补充,给我们一堆1秒,随后一0。

XOR eax, eax
SUB al 0x01
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,我的问题是在执行上述代码时,将AL充满1,或者也将延续到AXEAX

Pet*_*des 5

从加/减进位到CFLA,EFLAGS中的进位标志。

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

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


给我们一堆1,然后是0。

编号。以2的补码形式,-1用一个数字表示,其所有位均已设置。例如,在8位0xFF中为32位0xFFFFFFFF。随着0位在底部,这将代表-2

AL将全为1,或者也将延续到AX和EAX。

刚刚 您可以自己尝试一下(如果仍然感到困惑,然后要求对结果进行解释)。