Assmeby SUBQ 和 dest 寄存器

Assmeby SUBQ and dest registers

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

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

然后

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

然后

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

终于

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

r15和rsp不应该一样吗??它们相差 8 有什么不同? 怎么回事?

已解决: 我的原始代码是:

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

当然,由于第 3 行的 pushf,代码将始终跳转到 "notEqual"!

已解决:我的原始代码是:

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

当然,由于第 3 行的 pushf,代码将始终跳转到 "notEqual"!