2019-06-01から1ヶ月間の記事一覧

vm2gol v2 製作メモ(23) 組み込みの eq / while文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 準備が整ったので while やります! ["var", "a"] , ["set", "a", 0] , ["while", ["eq", 0, 0] , ["set", "a", ["+", "a", 1]] ] こんな感じでやりたいのですが!! ["eq", 0, 0] の部分の eq が…

vm2gol v2 製作メモ(22) 組み込みの足し算

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 分岐ができたので次はループをやりたいですね。 簡単なところで、数を1ずつ増やしていくカウンタとか。 ["var", "a"] , ["set", "a", 0] , ["while" , ["eq", 0, 0] // 条件: 必ず真になるようにし…

vm2gol v2 製作メモ(21) case文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 関数まわりが整備できたので、次は条件分岐(if文)やりましょうか。 えーと、こんな感じで…… ["if" , ["eq", 33, 31] , [ ["set_reg_a", 11] ] , [ ["set_reg_a", 22] ] ] こんな感じで作っていま…

vm2gol v2 製作メモ(20) 値を返却してローカル変数に代入 / return, call_set文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 関数呼び出しができて、 ローカル変数が使えるようになって、 引数も渡せるようになりました。 あと関数まわりは返り値をどうにかすれば一通り必要なものが揃います。 今回は次の2つのステップに分…

vm2gol v2 製作メモ(19) 関数に引数を渡す

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 今回は関数の引数をやります。こんな感じで進めましょう。 引数を1個渡す 渡した引数をローカル変数に代入 引数を2個渡してローカル変数に代入 引数を1個渡す これを動かします。 // 19_func_arg.v…

vm2gol v2 製作メモ(18) ローカル変数の宣言と代入 / var, set文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る どうすれば「本棚の左端から36番目の本を取って」と言う代わりに「広辞苑を取って」と言えるようになるでしょうか? コンピュータが名前とモノの対応表を持てばよいのです。 『コーディングを支え…

vm2gol v2 製作メモ(17) main から別の関数を呼ぶ / call文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 空の main 関数の実行の次は、 main から 別の関数の呼び出しをやってみましょう。 簡単そうですが、これも一歩ずつということで 2段階に分けます。 関数定義を並べるだけ(main からの呼び出しは…

vm2gol v2 製作メモ(16) 簡単なコード生成

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 条件分岐とループができて、 サブルーチンの呼び出しができて、引数が渡せて、 結果を返せて、ローカル変数が使えるようになった!!! ので、これくらい揃えばもうなんでもできるんじゃね!?!?…

vm2gol v2 製作メモ(15) ローカル変数 / sub_sp

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 今回はローカル変数をやります! これまでスタックをこんな風に使っていました。 ベースポインタ 戻り先アドレス 引数1 引数2 入れ子の呼び出しがある場合はこう: ベースポインタ 戻り先アドレス …

vm2gol v2 製作メモ(14) 複数の引数を渡す / スタックオーバーフロー対策 / 返り値

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回は引数を 1個だけ渡すサブルーチン呼び出しができるようになりましたが、 今回はそれを 2個にしてみます。 それから、返り値の渡し方を調べたところ、 とりあえずは reg_a にセットすればよさ…