Ниже приведена строка командной строки 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?