コンピューター理論、チョットデキルようになりたい

コンピュータサイエンスの学び直しです

学び直し16日目:4章 機械語②

記録

Hack 機械語の仕様を読んでる途中。機械語で何を指示しているのかおぼろげにわかってきた。ALU、D レジスタ、A レジスタ、M レジスタの操作方法を定義したのが機械語。どのような計算をするか、どこの値を操作するのか、何をどこに格納するか、次はなにをするか命令してるんだな、と理解。

機械語で操作されるレジスタ

D レジスタの用途
  • 16bit を使って、「comp, dest, jump」を設定する。機械語としては、dest = comp;jump という文法表記。
  • comp領域:D, A, M レジスタに対して、ALU でどのような演算を実行するか設定する。7bit あるので 128 通り定義できるが、Hack の場合は28命令。何ができるかは、ALU の仕様を思い出そう。
  • dest領域:ALU の演算結果をD, A, M レジスタのどこに格納するか決める。dest は 3bit あるので 8 通りすべて選択可能。
  • jump領域:ALU の出力結果応じて、次に何をするか決める。出力結果の組み合わせは、正、負、ゼロの3つで8通り。
A レジスタの用途
  • ①定数を代入する
  • ②メモリ操作を行う
  • ③移動先を指定する。
M レジスタの用途
  • A レジスタのワードで指定されるある番地のメモリ領域で、データや命令が記憶されている。
  • 命令メモリとデータメモリの2つのメモリ空間を持つ。
その他
  • ALU の演算で A レジスタを操作する場合は、同時に M レジスタを操作するべきではない。M レジスタは A レジスタを参照しているため衝突発生してバグるんだと思う。現に、ALU の仕様として、同時に A と M をいじるようなことはしてない。

機械語の種類

アドレス命令(A 命令)と計算命令(C 命令)の二種。

A 命令
C 命令
  • 計算して、計算結果を指示した場所に格納して、次に何をやるか指定する。

今日の筋トレ

今日もリングフィットやるか。