【发布时间】:2016-10-09 00:53:27
【问题描述】:
我想知道是否有人可以解释为什么它从 0000 变为 FFFF。
执行以下行后,EAX 中的值是多少?
mov eax,30020000h
dec ax
eax中的值改为3001FFFFh 为什么会翻转?
【问题讨论】:
-
AX 是 EAX 寄存器的低 16 位。那么 EAX 的低 16 位是什么? 0000 .因此,当您执行
dec ax时,它不会影响 EAX 的高 16 位,因此从 AX 中减去 1 是 FFFF。高位保持不变。我不同意结果是 3001FFFF 。我认为应该是 3002FFFF。 -
你认为它可能会减少 AX(所以 AH 和 AL)而不仅仅是寄存器的 AL 部分? @MichaelPetch
-
请参阅Understanding Carry vs. Overflow conditions/flags,了解二进制数学中的环绕。
-
您是否将二进制与十六进制混为一谈?
11h是00010001b。在 0 - 1 之后,AL 中的实际结果将是11111111b。 -
这就是我要说的。我认为您将二进制与十六进制混合在一起。去阅读teaching.idallen.com/dat2343/10f/notes/040_overflow.txt,它有二进制示例。请记住,二进制的 1111 是十六进制的 F。
标签: assembly x86 cpu-registers