2020-01-01から1年間の記事一覧
記録 記録 どんなことやってるかは、何となく理解できたと思う。45日目にまとめたようなことを実装して、Jack プログラムをソースとして与えることでトークナイズとパースが実行されたXMLファイルを出力している。このXMLファイルの中身を見れば、パーサによ…
記録 構文解析器のしくみ トークナイザ パーサ 再帰的な構文解析のざっくり理解 記録 構文解析が、トークナイザとパーサの2つの仕事に分かれていることを学んだ。 構文解析器のしくみ 構文解析器は、トークナイザとパーサから成る。トークナイザでプログラム…
記録 コンパイラとは コンパイラがやること 構文解析 コード生成 今日の筋トレ 記録 いよいよ高水準言語のコンパイラに突入。 コンパイラとは 「コンパイラは、一言でいえば、変換を行うプログラムである」とのこと。VM のあたりから思っていたけど、やっぱ…
記録 気になったところメモ 今日の筋トレ 記録 かなりごぶさた。かなり妥協しているが、とりあえず一通り読めました。高水準言語として、結構シンプルな Jack という言語に慣れ親しむための章。使い方は C とか Python とか、一般的な言語を触ったことがあれ…
記録 実装 ブートストラップコード 展望 今日の筋トレ 記録 ダレてきてしまったので、いったんこの章を完了とする。 実装 要点としては、VM ではスタック構造をとるため、関数呼び出しやフロー制御(分岐やループ処理)が入れ子型の構造となってることを理解…
記録 関数呼び出しプロトコル 今日の筋トレ 記録 書いてある通り、としか言いようがない。中でも、関数呼び出しについてだけ記載しておく。 関数呼び出しプロトコル if 文は、if-goto が呼ばれたときにスタックの最上位をポップして 0 かどうかで判定してい…
記録 プログラムフロー サブルーチン呼び出し 今日の筋トレ 記録 7章で作った VM に、プログラムフローとサブルーチン呼び出しを追加する。これにより、VM が完成する。プログラムフローは if、while、for など、条件に応じて次の実行先が変わる処理のこと。…
記録 今日の筋トレ 記録 いつものように、コードは写経させていただいた。 github.comコンピュータ理論の勉強というよりは、Python でいい感じにコード書くにはどうしたらいいんだろう、みたいな方に興味が向いてしまった。実装力が未熟な自分としては、あま…
記録 フロントエンドとバックエンド 有名な VM まとめ 今日の筋トレ 記録 フロントエンドとバックエンド 高水準言語のコンパイラは、二段階構成となっている。高水準言語から中間言語へと変換され、中間言語からハードウェアプラットフォームの機械語へと変…
記録 フロントエンドとバックエンド 有名な VM まとめ 今日の筋トレ 記録 フロントエンドとバックエンド 高水準言語のコンパイラは、二段階構成となっている。高水準言語から中間言語へと変換され、中間言語からハードウェアプラットフォームの機械語へと変…
記録 やること マッピング ガイドライン RAM アドレス0~15 VM 変換器の使い方 プログラムの構成 今日の筋トレ 記録 仕事がちょっと立て込んでて、一日に進める量が最近少なめ。やっと実装の節に目を通せた。VM 言語からアセンブリ言語への変換プログラムを実…
記録 やること マッピング ガイドライン RAM アドレス0~15 VM 変換器の使い方 プログラムの構成 今日の筋トレ 記録 仕事がちょっと立て込んでて、一日に進める量が最近少なめ。やっと実装の節に目を通せた。VM 言語からアセンブリ言語への変換プログラムを実…
記録 算術操作 配列操作 オブジェクト操作 今日の筋トレ 記録 VMの仕様を学び中。VMサンプルプログラムを眺めながら仕様の深堀り。ポイントは、「いちいちスタックを介する」ということ。 算術操作 上位言語で x や i という変数や定数をたとしても、VM にと…
記録 概要 算術・論理コマンド メモリアクセスコマンド 今日の筋トレ 記録 VMの仕様を学んだ。今回は概要、算術・論理コマンド、メモリアクセスコマンドの3つ。プログラムフローと関数呼び出しコマンドは次の章で拡充するとのこと。 概要 VM プログラムは、.…
記録 バーチャルマシン(Virtural Machine, VM) 概要 VM 言語 スタックマシン 今日の筋トレ 記録 コンパイラ構築に向けた始めの一歩として、バーチャルマシンを学ぶ。高水準プログラムを機械語へ一気に変換するのではなく、その間に中間コードを設けるらし…
記録 6章まとめ 今日の筋トレ 記録 main プログラムを書いたのだけど、モジュール読み込みでこけてしまいうまく動かない…Python の調査になるのでいったん飛ばしちゃおう。path がなんかアカンのかな。github.com 6章まとめ 機械語の仕様と、機械語とニーモ…
記録 Symbol Table モジュール 次やること 今日の筋トレ 記録 引き続き Hack コンピュータのアセンブラを Python で実装中。今日は Symbol と実アドレスを紐づけるための Symbol Table モジュールを実装(写経)。github.com Symbol Table モジュール Symbol…
記録 Code モジュール 次やること 今日の筋トレ 記録 引き続き Hack コンピュータのアセンブラを Python で実装中。今日はアセンブリ言語のニーモニックをバイナリコードへ変換するモジュールを書いた。相変わらず以下を参考にさせていただいている。github.…
記録 Parser モジュール 次やること 今日の筋トレ 記録 Hack コンピュータのアセンブラを Python で実装中。アセンブラって結局のところ、アセンブリ言語をある規則のもと 0/1 に書き換えるテキスト変換プログラムなのでは。。自力でがんばろうと思ったけど…
記録 仕様 アセンブラを構成するモジュール シンボルを含むアセンブラ 展望 今日の筋トレ 記録 アセンブラをどうやって実装するか見た。4つのモジュールから構成されるようにすればよさげ。また、アセンブラはどの言語を用いても作れるみたいなので、割とな…
記録 ファイルの種類 シンボル 今日の筋トレ 記録 アセンブリコマンドとバイナリコードの対応表を基本的には良いすればよいわけだが、その対応表を作るにあたり規約を定められている。 ファイルの種類 バイナリコードのファイル拡張子が .hack、アセンブリ言…
記録 シンボル 今日の筋トレ 記録 ここからソフトウェア階層の話。アセンブリ言語を0/1 表記の機械語に変換するアセンブラについて学ぶ。基本的には「決められたコマンドをそれに対応する機械語(バイナリ表記)の変換する」作業がされてるっぽい(変換テー…
記録 Computer 5章おさらい 今日の筋トレ 記録 Memory と CPU ができたので、いよいよ Computer の HDL を実装した。拍子抜けするくらい簡単だったw。部品をきちんと用意できれば、コンピュータは簡単につくれるのだなぁ。けっこう時間かかったけど、楽しか…
記録 コツ CPU 今日の筋トレ 記録 やっと CPU 書き終えた。自力でがんばろうとしたけど、結局以下を参考にさせていただいてしまった。。 blog.tojiru.net 考え方はだいたいあっていたが、その先の地道な作業を考え抜く力が不足している。ともあれ、形にはな…
記録 今日の筋トレ 記録 CPU の HDL を作成中。前回の考え方に従い、結線をどうすればいいか探り探り書いている。ALU の仕様の復習をやりつつ地道にやっている。何日かかるやら。 今日の筋トレ A メニュー予定(ダンベル重量 5kg) ダンベルフライ リングフィ…
記録 考え方 A, C 命令共通 A 命令の場合 C 命令の場合 今日の筋トレ 記録 Memory に続き、CPU の HDL を考え中。まだコードは書けてないけど、おぼろげに何をやったらよいかは見えてきた気がします。 考え方 A 命令、C 命令(4章参照)の意味をひとつずつ理…
記録 考え方 Memory のコード 今日の筋トレ 記録 Hack コンピュータの Memory の HDL を実装した。既存回路の使いまわしで楽チンかと思ったけど、アドレスの扱い方の理解が足りてなくて思いのほか苦戦。。CPU とかどうなるんだろう…。またこのお方のお世話に…
記録 今日の筋トレ 記録 Hack ハードウェアの実装内容について読んだ。HDL を書くのが待ち遠しい。 CPU は複雑そうだが、3章でやった ALU, PC, レジスタを復習しながら試行錯誤するのが楽しそう。 データメモリ(RAM)については、SCREEN と KEYBOARD のメモ…
記録 今日の筋トレ 記録 Hack ハードウェアのプラットフォーム仕様を読んだ。仕様についても、すんなり入ってきた気がする。次の実装が楽しみだ。メモリマップやレジスタマップが何を意味するのか、ようやく理解できた気がする。どこをいじったら何が動くの…
記録 プログラム内蔵方式 ノイマン型アーキテクチャ メモリ CPU CPU がやること 入出力 今日の筋トレ 記録 Hack というコンピュータを構築する。背景を読んだ。ほとんど知ってることだったけど、正確な定義を再確認できたのは有意義だった。 プログラム内蔵…