Open1
毎日アウトプット(2022) コンパイラ編
セルフホストできるCコンパイラの作成を目指す
1/1
[参考]
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
gccでIntel syntaxなアセンブリを出力
gcc -S -masm=intel "ファイル名"
1/3
C言語の可変長引数に関して
これでprintf同様にフォーマット指定された文字列を受け取れる
void error(char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
exit(1);
}
1/4
読むだけにとどめる
1/5
卒論執筆のため休憩