Open1

毎日アウトプット(2022) コンパイラ編

schnellschnell

セルフホストできるCコンパイラの作成を目指す
https://github.com/rui314/chibicc/commits/reference?after=ce61154cf542e630bc3e40262fdacdf20bf91b90+69&branch=reference

1/1

https://github.com/rui314/chibicc/commit/f722daaaae0606115df4ace5a852da23c1a5b0f3

The GNU Assembler(GAS) [参考]

gccでのコンパイルが可能なアセンブリ言語
C言語ライクなコメントの付与が可能
x86アセンブラとしてnasmとgasが大きくわけて存在するようだがどちらが良いかはわからない。gasはgccでもコンパイル可能なのが魅力だが情報が少ない。以下はgasのintel文法版での記述となる。raxに格納された値が最後に返される。(システムコールもraxレジスタに格納された番号に応じて呼び出される)

.intel_syntax noprefix
.global main
main:
    mov rax, 10
    ret

1/2

https://github.com/rui314/chibicc/commit/afc9e8f05faddf051aa3a578520d6484ab451282

gccでIntel syntaxなアセンブリを出力

gcc -S -masm=intel "ファイル名"

1/3

https://github.com/rui314/chibicc/commit/ef6d1791eb2a5ef3af913945ca577ea76d4ff97e

C言語の可変長引数に関して

これでprintf同様にフォーマット指定された文字列を受け取れる

void error(char *fmt, ...) {
  va_list ap;
  va_start(ap, fmt);
  vfprintf(stderr, fmt, ap);
  fprintf(stderr, "\n");
  exit(1);
}

1/4

https://github.com/rui314/chibicc/commit/c6ff1d98a1419e69c31902447e2caa85af4e9844
読むだけにとどめる

1/5

卒論執筆のため休憩