未知汇编语法

时间:2017-03-22 21:50:59

标签: c gcc assembly x86-64

我已经研究了基于gcc -S输出的汇编语言,我找到了一些我以前从未见过的语法。 来自C代码:

#include <stdio.h>
void main() {
        printf("%d\n", sizeof(int));
}

我有这个:

        .file   "test.c"
        .def    __main; .scl    2;      .type   32;     .endef
        .section .rdata,"dr"
.LC0:
        .ascii "%d\12\0"
        .text
        .globl  main
        .def    main;   .scl    2;      .type   32;     .endef
        .seh_proc       main
main:
        pushq   %rbp
        .seh_pushreg    %rbp
        movq    %rsp, %rbp
        .seh_setframe   %rbp, 0
        subq    $32, %rsp
        .seh_stackalloc 32
        .seh_endprologue
        call    __main
        movl    $4, %edx
        leaq    .LC0(%rip), %rcx
        call    printf
        nop
        addq    $32, %rsp
        popq    %rbp
        ret
        .seh_endproc
        .ident  "GCC: (tdm64-1) 5.1.0"
        .def    printf; .scl    2;      .type   32;     .endef

即使这段代码非常清晰易懂,但对我来说,这一行对我来说是完全奇怪的。我说的话是:

 leaq    .LC0(%rip), %rcx

即使我知道leaq是加载有效地址的指令,操作数语法对我来说还不清楚,我的意思是格式化字符串的标签,指令指针作为参数?它有什么作用? 在此先感谢:)

0 个答案:

没有答案