
コツコツ作成しているCコンパイラですが、return文が無いと色々不便なのでreturn文を追加しました。
return文はそこに来たら関数の最後にジャンプすれば良いので、jmp命令でプロローグの直前にジャンプすればOKです。
jmpする前にraxに値を入れておきます。
実行結果はこんな感じです。
$ ./9cc "main(){return 10;}" .intel_syntax noprefix .global main main: push rbp mov rbp, rsp sub rsp, 0 push 10 pop rax jmp .Lreturn000 pop rax .Lreturn000: mov rsp, rbp pop rbp ret |
無駄に毎回ジャンプしていますが、その辺りは今後の課題という事で...
ここまでくると、コンパイラの方が賢くてテストコードのミスを実行結果に教えられる事が多くなってきました。
if, while, forは既に足したので、簡単なプログラムなら書く事ができそうです。
0 件のコメント :
コメントを投稿