为什么在x64汇编中将复制变量地址移动到寄存器?

时间:2014-01-08 21:48:14

标签: linux assembly 64-bit

我使用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.请帮助我理解我做错了什么。

1 个答案:

答案 0 :(得分:0)

因为您已用美元符号表示您想要立即模式。删除它以获得绝对模式。