2015-05-03 コンピュータシステムの理論と実装(第4章〜) 第4章 機械語 Hackコンピュータの仕様 ノイマン型コンピュータHackの仕様は以下の通り レジスタ:16bit幅のレジスタのDとAのレジスタを持つ メモリアドレス空間:ともに16bit幅の命令メモリとデータメモリを持つ、アドレス空間はともに15bit 注意 仕様によりHackマシンに定数を代入するには、@を用いてAレジスタを利用する方法しか存在しない。 アドレッシングモード 要求されたメモリのワードに対して、そのアドレスを指定する方法には3種類ある。結局ビット列を「データ」として解釈するか、「アドレス」として解釈するかの違い起因している。 イミディエイトアドレッシング方式:オペランドをデータとして解釈する。そのまま直接メモリに格納する。非常に高速。 直接アドレッシング:オペランドをメモリのアドレスとして解釈する。その指定されたアドレスの値をデータと解釈して、直接メモリに格納する。 間接 アドレッシング:オペランドをメモリのアドレスとして解釈する。ここまでは直接アドレッシングと共通だが、その指定されたアドレスの中身をさらにアドレスとして解釈する。その指定されたアドレスの値をデータとして解釈して、メモリに格納する。C言語でいう配列やポインタの取り扱いに相当する。 命令 アドレス命令(A命令)と計算命令(C命令)からならる。 A命令(16bit) 0vvv vvvv vvvv vvvv Aレジスタに15bitのアドレス空間の値を設定する。 C命令(16bit) 111a cccc ccdd djjj dst=cmp;jmp「計算内容、計算結果の格納場所、次に実行するプログラム」を指定する。cmp :命令はすべて算術演算と論理演算 dst:レジスタA,レジスタD,およびM(レジスタAの指定するアドレスのメモリ)の3通り jmp :ジャンプ先はレジスタAに格納されている命令メモリのアドレスを参照する。ジャンプするかはjjjの3bitの8通りの条件に依存する。