我正在编写一些x86-64程序集,并且更改数据部分的顺序似乎会改变结果。
以下是数据部分:
.data
pstr: .asciz "%d\n"
a: .long 10
b: .long 3
c: .long 300
dnm2: .long 0
这是代码,它正在执行a = b / a
然后打印a
。 (以复杂的方式,但这不是问题)。当前的顺序(a,b,c)给出结果99,而更改的顺序(b,a,c)给出结果0.我使用clang从gcc生成我的可执行文件。
.text
.globl main
main:
pushq %rbp
movq %rsp, %rbp
movq a(%rip), %rax
movq %rax, %rbx
movq %rax, %rbx
movq b(%rip), %rcx
movq %rcx, %rax
movq %rax, a(%rip)
movq %rbx, dnm2(%rip)
movq a(%rip), %rax
movq dnm2(%rip), %rbx
xorq %rdx, %rdx
idiv %rbx
movq %rax, a(%rip)
movq a(%rip), %rsi
leaq pstr(%rip), %rdi
call printf@PLT
movq %rsp, %rbp
popq %rbp
ret