vm2gol-v2

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

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

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

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

vm2gol v2 製作メモ(13) サブルーチンに引数を1個渡す / add_sp

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前々回と前回でいろいろ片付いたので引数やります! 引数はスタックに置いて渡すそうです! まず引数を1個だけ使うのをやってみます。 次のようにサブルーチン呼び出し(call)の直前でスタックに …

vm2gol v2 製作メモ(12) リファクタリング / cp

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 道具が用意できたので引数渡しをやりたい! のですが、今回はリファクタリング回にします。 前回やっつけで追加した copy_sp_to_bp と copy_bp_to_sp を整理して、 せっかくのリファクタリング回な…

vm2gol v2 製作メモ(11) 引数渡しの準備 / bp, push, pop

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る さて、ダンプ表示が改善されたところで次に進みます。 call, ret で(多段の)サブルーチン呼び出しができたところまでやったので…… 次はサブルーチンに引数で値を渡せるようにします (ここらへん…

vm2gol v2 製作メモ(10) ステップ実行 / ダンプ表示の改善

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る さて、多段のサブルーチン呼び出しなんかやったりして、だんだん育ってきました。 それに連れてちょっとずつプログラムも長くなってきて、実行時の動きに不満が出てきましたので、 今回は本題の方…

vm2gol v2 製作メモ(9) 2段以上のサブルーチン呼び出し / スタック領域とスタックポインタ

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回簡単なサブルーチンをやりましたが、 今回はサブルーチンからまた別のサブルーチンを呼ぶ、 というのをやってみたいです。 これも普通にできてほしい。 今の状態ではこれはできません。 なぜか…

vm2gol v2 製作メモ(8) サブルーチンの呼び出し(call, ret)

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る どんどんプログラムっぽくしていきましょう。 プログラムといえばサブルーチン! サブルーチンやりましょう! 最初は簡単なのがいいので、 reg_a に値をセットするだけの サブルーチンをやってみま…

vm2gol v2 製作メモ(7) ラベルとアセンブラ

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る さて、機械語コードをいくつか書いてきて、 ジャンプ先のアドレスを調べて修正するのに慣れてきた一方で、だんだん面倒にもなってきました。 プログラムを修正するたびに調べるのも面倒だし、書き…

vm2gol v2 製作メモ(6) if文っぽい条件分岐

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回 compare と jump_eq を使っていきなりカウンタを作ってしまいましたが、 この2つがあれば、 a = 0 b = 0 if a == b c = 2 else c = 3 end a = 4 みたいな普通の if 文っぽいことができそうで…

vm2gol v2 製作メモ(5) 条件分岐(compare, jump_eq)

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る チンタラやっててなかなか進みませんが一歩ずつやっていきます。 ループができるようになったら、次は条件分岐ですよ! プログラムといえば条件分岐! 条件分岐はどうやるかというと…… compare と …

vm2gol v2 製作メモ(4) カウンタ / プログラムをファイルに

目次ページに戻る / 前 / 次 前回からの差分 コンピュータのようなものを作っているので、 何か compute させようということで、足し算をさせて、 regチカのときのループと組み合わせてカウンタを作ってみます。 reg_a の値を 1, 2, 3, ... と増やしていくと…

vm2gol v2 製作メモ(3) regチカ(jump)

目次ページに戻る / 前 / 次 前回からの差分: https://github.com/sonota88/vm2gol-v2/compare/02...03 プログラムといえばループ! ですね(※1)。 ループをやりましょうということで、 jump 命令を追加して regチカをやりましょう。 (※1 ……と書いてはいま…

vm2gol v2 製作メモ(2) プログラムカウンタとVMの骨組み

目次ページに戻る / 前 / 次 前回からの差分: https://github.com/sonota88/vm2gol-v2/compare/01...02 第一回はさすがにあっさりすぎたのでどんどんやっていきます。 今の状態では vm = Vm.new した後に vm に対して外部から指示してあれこれやらせていて、…

vm2gol v2 製作メモ(1) 最初のVM

目次ページに戻る / 次 とにかく始める とにかくやるのだぁ (『30日でできる! OS自作入門』 p14) とりあえずアレですよね? レジスタとメモリがあるんですよね? などといって適当に書き始めます。 慣れていてサッと始められるので Ruby です。 サッと始…

vm2gol v2 製作メモ 目次2

1 〜 41: vm2gol v2 製作メモ ちまちまいじって経緯をメモしていますが、とりあえず以下は無視して最新のスナップショット( main ブランチ)のソースを見てもらうのがいいんじゃないかなと思います。 42. ライフゲームのテスト 43. フォーマットなどいろい…

簡単な自作言語のコンパイラ vm2gol v2 の製作過程

RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話 の製作過程を雑にダラダラ書きます。 下書きっぽいものは用意しているので、打ち切りにならずに完走はできると思います(2019-10-05 完走しました!) 予定では全38回 …

RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話

Qiita に引っ越しました。 qiita.com