GCC с -masm = intel создает синтаксис AT & T - PullRequest
0 голосов
/ 21 сентября 2019

Ниже приведена строка командной строки gcc, которую я использовал для вывода на лист ассемблера, используя -masm = intel.Обе строки командной строки работают, но они оба производят синтаксис AT & T, а не синтаксис Intel.

gcc -S -masm=intel Svx.c

, но это приводит к смешанному синтаксису Intel и AT & T.

      .file "Svx.c"
    .intel_syntax noprefix
    .text
    .globl  main
        .type   main, @function
    main:
.LFB0:
        .cfi_startproc
    push    rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    mov rbp, rsp
    .cfi_def_cfa_register 6
    mov DWORD PTR -4[rbp], 0
    jmp .L2
.L3:
    add DWORD PTR -4[rbp], 1
.L2:
    cmp DWORD PTR -4[rbp], 1000000000
    jne .L3
    mov eax, DWORD PTR -4[rbp]
    pop rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"
    .section    .note.GNU-stack,"",@progbits

Вывод выглядит как измененный синтаксис Intel, но специфичные для AT & T директивы cfi для обработки стека не переводятся.И добавьте DWORD PTR -4 [rbp], 1 не является синтаксисом Intel.

Почему я получаю смешанный синтаксис AT & T и Intel с -masm = intel?

1 Ответ

2 голосов
/ 21 сентября 2019

Директивы CFI - это директивы для ассемблера GNU .В целом, такие директивы (начинающиеся с .) не имеют никакого отношения к тому, какой диалект ассемблера вы выбрали, и поэтому такие строки, о которых вы беспокоитесь, не являются «специфичными для AT & T» и даже не связаны с AT & T.

И add DWORD PTR -4[rbp],1 - это Синтаксис Intel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...