Assmeby SUBQ和dest寄存器

时间:2015-03-11 09:23:16

标签: assembly gdb

所以我在汇编中编写了一个代码,我试图用GDB验证我的输出,并发现了令人费解的事情! 所以最初:

%r15 == 0 and
%rsp == 0x7fffffffe378

然后

#inst src, dest 
movq    %rsp, %r15
%r15 == 0x7fffffffe378 and
%rsp == 0x7fffffffe378

然后

subq    $88, %rsp
%r15 == 0x7fffffffe378 and
%rsp == 0x7fffffffe318   (new value) btw (378_base{16} - 88_base{10} == 320_base{16}!

终于

subq    $88, %r15
%r15 == 0x7fffffffe320 and    
%rsp == 0x7fffffffe318

r15和rsp应该不一样吗?它们与8有什么不​​同? 发生了什么事?

解决: 我的原始代码是:

(1) movq    %rsp, %r15
(2) subq    $88, %rsp
(3) pushf
(4) subq    $88, %r15
(5) cmpq    %rsp, %r15
(6) jne notEqual
(7) popf

当然,由于第3行的pushf,代码总是会跳转到“notEqual”!

1 个答案:

答案 0 :(得分:1)

解决:我原来的代码是:

(1) movq    %rsp, %r15
(2) subq    $88, %rsp
(3) pushf
(4) subq    $88, %r15
(5) cmpq    %rsp, %r15
(6) jne notEqual
(7) popf

当然,由于第3行的pushf,代码总是会跳转到“notEqual”!