我在x64程序集中製作了一個程序,使用AT & T語法,但我不明白mov運算符爲什麼要拷貝地址變量來註冊。這裏是我的代碼:爲什麼在x64程序集中移動拷貝變量地址來註冊?
.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.請幫我理解我做錯了什麼。
你想'移動[$ a],%rax'。地址處的值,而不是地址。 –
我以前試過,但是我得到:「錯誤:無效字符'['開始操作數1'[$ a]'」。 – ssergiuss