instruction: 0.662 syscall: 0.180 runtime: 0.158 unexpect rax value Description of problem: - When I execute "mov -0x8(%rbp), %rax" and "movq 0xb8000, (%rax)", the value of rax should be 0x7fedf but it is 0x7fefe. It is 1 less. Steps to reproduce: - 1. Code currently executed
(gdb) x/2i $pc
=> 0x2202 :	mov    -0x8(%rbp),%rax
   0x2206 :	movq   $0xb8000,(%rax)
- 2. Value of memory address -0x8(%rbp)
(gdb) x /xg $rbp-0x8
0x7fec8:	0x000000000007fedf
- 3. Value of rax before execution
(gdb) p /x $rax
$1 = 0xfffffffd
- 4. Value of rax after execution
(gdb) p /x $rax
$1 = 0x7fedf
It's all right so far. - 5. View the current execution code again
(gdb) x/i $pc
=> 0x2207 :	movl   $0xb8000,(%rax)
the code address changed from 0x2206 to 0x2207 and the code changed from "movq xx, xx" to "movl xx, xx".
Now rax is 0x7fedf. - 6. After execution
After executing "movl $0xb8000,(%rax)"
The rax change to 0x7fede Additional information: