Computer Scienceは学問としての領域。
自作するスライド。
エミュレータのスライド。
スタックとヒープの解説記事。
やる。
計算の仕組みを理解する本。 無料のコンピュータサイエンスの教科書。 実装して理解する本。- 97, 128, 171, 180, 185
メモ。
- @value はAレジスタにvalueを格納することを示す
- 例. @17 はAレジスタに17を格納する
- A命令
- 操作を行いたいアドレスを指定する命令
- C命令
- 計算命令
- デバイスはメモリマップを通じて、ほかのメモリと全く同じようにCPUから扱うことができる
- キーボードを押している間、メモリのどこかの値が変わっている
- アセンブラは、かんたんに作れた。単なるテキスト処理にすぎない
- 高水準プログラムは初めに中間コードに変換され、その中間コードは機械語に変換される
- 中間コードは実際のプラットフォームで実行される代わりに、バーチャルマシンで実行されるように設計されている
- 1. 高水準コードからVM命令の中間コードへの変換を行う
- 2. VMコードから対象プラットフォームにおける機械語への変換を行う
- スタックマシンという計算モデルにおいて、算術命令はスタックの一番上からオペランドを取り出し、その結果をスタックの一番上に置く。どのような算術命令や論理命令であっても、単純なスタックによるモデルを用いて、その命令のための評価器を実装することができる
- Jackクラスファイル → (コンパイラ) → VMファイル → (VM変換器) → Hackアセンブリコード → (アセンブラ) → Hackバイナリコード
- JVMはバイトコードと呼ばれる中間言語を実行するスタック型のバーチャルマシンである
- インタフェース
- そのデータ構造が何をするか表現する。データ構造がサポートしている操作一式と、セマンティクスを定義する
- 実装
- そのデータ構造をどのようにやるかを表現する
- セマンティクス
- 操作の意味
コンパイラ作りのスライド。
ピクセルについての論文。
GPUの解説。
低レイヤの本。
命令セットの一覧。
計算機科学を動くコードで学ぶ本。
メモリ管理のリファレンス。
ハーバード大学のコンピュータサイエンス講座の日本語訳。
コンピュータ・サイエンスの動画集。
JVMを実装する。 VM実装の予備知識。実装して理解できた。
- 難しそうに見えるが、単にバイナリをパースしていく作業
- Goだと、binary.Readで構造体のフィールドのバイト数だけ読み進められる
- Constant Pool はコンパイル時に埋め込まれたクラスの情報や参照を保持しておくためのシンボルテーブル
- 実行の流れ
- ClassFile Structureを読み込む
- Constant Poolを読み込む
- メソッドの情報を読み込む
- Code Attributeを読み込む
- オペコードを実行する
- オペランドスタック
- JVMはレジスタへ書き込むのではなく、メモリ上に値を積む。積んだ値を命令がオペランドとしてポップして処理する
[オペコード][オペランド(オペコードによって長さが変わる)]
みたいな感じ