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

コツコツ作成している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は既に足したので、簡単なプログラムなら書く事ができそうです。

参考URL

0 件のコメント :

コメントを投稿