整数一つをコンパイルするコンパイラ
code:c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "引数の個数が正しくありません\n");
return 1;
}
printf(".intel_syntax noprefix\n");
printf(".global main\n");
printf("main:\n");
printf(" mov rax, %d\n", atoi(argv1));
printf(" ret\n");
return 0;
}
c言語で、ただ単にRAXに整数値をmovで入れるようなアセンブリをprintfで記述する
$ cc -o 9cc 9cc.c
$ ./9cc 42 > tmp.s
code:s
.intel_syntax noprefix
.global main
main:
mov rax, 42
ret
$ cc -o tmp tmp.s
$ ./tmp
$ echo $?
これは直前の終了値をとるやつ
加減算のできるコンパイラ