Где я могу найти документацию по коду в этом файле .s? - PullRequest
0 голосов
/ 26 сентября 2019

Я создал ассемблер ниже, запустив

clang -s hello.c

, где hello.c - это имя файла для следующего:

#include <stdio.h>

main() {

printf("Hello\n");

}

Ассемблер находится в hello.s:

  .section  __TEXT,__text,regular,pure_instructions
  .build_version macos, 10, 14  sdk_version 10, 14
  .globl  _main                   ## -- Begin function main
  .p2align  4, 0x90
_main:                                  ## @main
  .cfi_startproc
## %bb.0:
  pushq %rbp
...

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Я думаю, что он называется GNU Assembler, и я нашел документацию для него здесь: https://www.sourceware.org/binutils/docs-2.12/as.info/index.html.

0 голосов
/ 26 сентября 2019

Вы можете найти документы в руководстве по GAS (clang / LLVM использует тот же синтаксис, включая директивы).https://sourceware.org/binutils/docs/as/

См. Также ссылки в https://stackoverflow.com/tags/x86/info и https://stackoverflow.com/tags/att/info для получения дополнительной информации о синтаксисе x86-64 AT & T.

Clang / LLVM может использовать синтаксис Intel, простокак GCC, но директивы не меняются.clang --x86-asm-syntax=intel, или, возможно, -masm=intel для совместимости с GCC.

Возможно, что-то и есть в руководстве по clang или LLVM.(Но не путайте это с языком ассемблера LLVM-IR : синтаксис asm для внутреннего представления LLVM.) Из быстрого поиска я не нашел никаких документов LLVM о том, как clang обрабатывает директивы GAS.


.globl _main - это , а не сам ярлык.Обратите внимание, что это до выравнивания выравнивания.Это просто модификатор атрибута для символа _main.

_main: - это позиция в выходном файле, к которой применяется метка.

Для понимания инструкций см. Как убрать «шум» из выходных данных сборки GCC / clang? для того, чтобы удалить ненужные директивы.

...