[C] コンパイラ作成 return文に対応する

コツコツ作成しているCコンパイラですが、return文が無いと色々不便なのでreturn文を追加しました。 return文はそこに来たら関数の最後にジャンプすれば良いので、jmp命令でプロローグの直前にジャンプすればOKです。 jmpする前にraxに値を入れておきます。 実行結果はこんな感じです。 ``` `gutter:false; $ ./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は既に足したので、簡単なプログラムなら書く事ができそうです。 ## 参考URL * [低レイヤを知りたい人のためのCコンパイラ作成入門](https://www.sigbus.info/compilerbook) * 進捗は[ここ](https://github.com/k28/9cc)

0 件のコメント :

コメントを投稿