我使用AT& T语法在x64程序集中创建了一个程序,但我不知道为什么mov运算符副本地址变量要注册。这是我的代码:
.globl main
.text
main:
mov $a, %rax
mov $format, %rdi # set 1st parameter (format)
mov %rax, %rsi # set 2nd parameter (current_number)
mov $0, %rax # because printf is varargs
sub $8, %rsp # align stack pointer
call printf # printf(format, sum/count)
add $8, %rsp # restore stack pointer
ret
.data
a: .quad 123
format: .asciz "%d\n"
程序输出6295616而不是123.请帮助我理解我做错了什么。
答案 0 :(得分:0)
因为您已用美元符号表示您想要立即模式。删除它以获得绝对模式。