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"!
所以我用汇编写了一段代码,我试图用 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"!