-1

我最近开始深入研究 Assembly,当我分析以下代码段时,我无法确定发生了什么。本质上,0xFFFFFFFF 被移入EAX,然后 0x10 被添加到其中。在 GDB 中查看时EAX,执行后的值为 0xF 而不是 0x9。当我添加 0x11 而不是 0x10 时,会显示正确的结果 (0x10)。任何帮助将非常感激。

我在下面附上了调试输出。

命令执行后的第一个值为EAX,使用 显示print/x $eax


(gdb) ni
$11 = 0xffffffff
Dump of assembler code from 0x8048096 to 0x80480a0:
=> 0x08048096 <_start+22>:      add    eax,0x10
   0x08048099 <_start+25>:      mov    eax,0x0
   0x0804809e <_start+30>:      add    BYTE PTR ds:0x804910c,0x22
End of assembler dump.

0x08048096 in _start ()

(gdb) ni
$13 = 0xf
Dump of assembler code from 0x8048099 to 0x80480a3:
=> 0x08048099 <_start+25>:      mov    eax,0x0
   0x0804809e <_start+30>:      add    BYTE PTR ds:0x804910c,0x22
End of assembler dump.

0x08048099 in _start ()
4

1 回答 1

2

您似乎期望添加0x10-1( 0xFFFFFFFF) 将产生0x9.

但是0x1016(十进制),并且添加-1到它产生15(十进制),即0xF.

所以一切都在这里正常工作。

于 2013-11-12T22:47:35.187 回答