コンピュータシステムの理論と実装 機械語
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > コンピュータシステムの理論と実装 機械語
機械語
仕様によって定められた形式に従い、プロセッサほかレジスタなどを用いてメモリを操作する。
ニーモニックからアセンブリへ
ただし、0111101000101101とか言われても人間にはわかりにくいので、ニーモニックを使って命令を把握する。どんどん命令をニーモニックに変換していくと、ニーモニックからバイナリへ変換するプログラムを書けばいいんじゃね?となる。これがアセンブリ言語である。
あと4章で語られていることはたくさんあるけど、まぁ、各自読んでねー。
4章のプロジェクト
Mult.asmとFill.asmの2つのプログラムを書くように要求される。ぶっちゃけ慣れだ!頑張れ!
Fill.asm
Mult.asmは別にどうってことはない。躓いたのがFill.asmである。何故かRAM[16384]に-1(1111111111111111)を入れても1ピクセルの横棒にならずに黒いドットが表示されているだけだった。
さすがにこれおかしいだろと思って調べると、原因はJDKのバージョンにあった。http://nand2tetris-questions-and-answers-forum.32033.n3.nabble.com/screen-memory-mapping-td4028461.htmlから、JDKのバージョンを上げたところ、うまく1ピクセルの横棒が表示されるようになってアセンブリをかけるようになった。
Fill.asmのアセンブリ
一応乗っけとこう。とはいえ、無駄な部分があるんだよなぁ。ごめんなぁ。
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/04/Fill.asm
// Runs an infinite loop that listens to the keyboard input.
// When a key is pressed (any key), the program blackens the screen,
// i.e. writes "black" in every pixel. When no key is pressed, the
// program clears the screen, i.e. writes "white" in every pixel.
// Put your code here.
(LOOP)
@i
M=0
@KBD
D=M
@BLACK
D;JGT
(WHITE)
@SCREEN
M=0
@i
D=M
@8190
D=D-A
@LOOP
D;JGT
@i
D=M+1
@SCREEN
A=A+D
M=0
@i
M=M+1
@WHITE
0;JMP
(BLACK)
@SCREEN
M=-1
@i
D=M
@8190
D=D-A
@LOOP
D;JGT
@i
D=M+1
@SCREEN
A=A+D
M=-1
@i
M=M+1
@BLACK
0;JMP
@LOOP
0;JMP
(END)
@END
0;JMP
一覧
- コンピュータシステムの理論と実装 ブール論理
- コンピュータシステムの理論と実装 ブール論理のつづき
- コンピュータシステムの理論と実装 ALUの実装
- コンピュータシステムの理論と実装 レジスタとメモリとカウンタ
- コンピュータシステムの理論と実装 機械語
- コンピュータシステムの理論と実装 CPU
- コンピュータシステムの理論と実装 コンピュータそのもの
- コンピュータシステムの理論と実装 アセンブラ
- コンピュータシステムの理論と実装 バーチャルマシン#1
- コンピュータシステムの理論と実装 バーチャルマシン#2