2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

4章 機械語 (コンピュータシステムの理論と実装)

2
Posted at

はじめに

これは、「コンピュータシステムの理論と実装」(以下「Nand2Tetris」という)の第4章 機械語のプロジェクトに対するレポートである。

Qiitaでは、画像の利用に制約があるため、フローチャートなど掲載することは省いている。

プロジェクトに対するレポート

目標

  • 機械語によるプログラミングを行いHackを知ること。

材料

  • Nand2Tetrisで定義している機械語
  • CPUエミュレータ

実装

乗算プログラム

Hackでは加算器しかないため、乗数分、被乗数を加算することで乗算を行う。

LOOPから抜け出す分岐は、ループの最初に入れている。そして分岐予測できるようにしている。

Mult.asm
    // Put your code here:
        @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)
        @END
        0;JMP

入出力操作プログラム

キーボード入力部とスクリーンペイント部に大きく分かれる。

ペイント部では、最初1ビットずつ変更しようとしたが、メモリはワード単位であることに気づきワード単位で置き換えるように変更している。

レジスタの使い方は以下の通りである。

レジスタ 内容
R0 色 黒:−1、白:0
R1 ピクセルアドレス
Fill.asm
    // Put your code here:
        @R0
        M=0
        @R1
        M=0
(LOOP)  
        @KBD
        D=M
        @COLORBLACK
        D;JEQ
        @R0    //color
        M=0
        @PAINT
        0;JMP
(COLORBLACK)
        @R0    //color
        M=-1
        @PAINT
        0;JMP
(PAINT)
        @SCREEN
        D=A
        @8191
        D=D+A
        @R1  // Address 
        M=D
(FILL)
        @R0  // color
        D=M
        @R1
        A=M
        M=D
        @R1
        MD=M-1
        @SCREEN
        D=D-A
        @FILL
        D;JGE
        @LOOP
        0;JMP
(END)
        @END
        0;JMP
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?