コンピュータシステムの理論と実装

4章入出力操作プログラム

@SCREEN D=A @R1 M=D @8192 D=A @R1 M=M+D (press) @KBD D=M @white D;JEQ @SCREEN D=A @R0 //カウンタ M=D (bloop) @R0 D=M @R1 D=D-M @press D;JGE //スクリーンに書き込み @R0 A=M M=-1 //加算処理 @R0 M=M+1 @bloop 0;JMP (white) //初期化 //@R0 //M=0 …

4章乗算プログラム

@R2 M=0 (LOOP) @R1 D=M @END D;JLE @R0 D=M @R2 M=D+M @R1 M=M-1 @LOOP 0;JMP (END)4章のプロジェクトで書いた乗算するプログラムです

4章機械語

4章のプロジェクトで、機械語のプログラム書いているときに気づいたのですが、 D=D+2のように直接2以上の数値は使えないんですね。2以上の数値で計算するには @2 D=D+Aのように@命令でAレジスタに指定した数値を格納してから、 Aレジスタを使って、2以上の…

2章ALU

HDLではif文が使えないので if nx then x = !x みたいなのはどうすればいいのか悩んだんですが、 単純にx = !xをあらかじめ計算しておいて、その後nxで 分岐させるというやり方で実装しました。 例えば上の例だと、 Not16(in=x,out=x2);//あらかじめ計算 Mux…

5章CPU

コンピュータシステムの理論と実装の5章のCPUの実装の部分で苦戦して、 完成するの1ヶ月ぐらいかかりました。 せっかくなんでコードを載せておこうと思います。 CHIP CPU { IN inM[16], // M value input (M = contents of RAM[A]) instruction[16], // In…