6章 アセンブラ
本章では、アセンブリ言語で書かれたプログラムをバイナリで書かれたプログラムに変換する為に、アセンブラがどのような動作をしているのかを理解する
★単語
・シンボル:値に名前を付けたもの
・ラベル:アドレスを示すシンボル
・バイナリコード:処理を依頼する命令を、CPUが理解できるように2進数で表したコードのこと
・Parserモジュール:入力コードのアクセスをカプセル化し、あせんぶり言語のコマンドを読み、パースし、扱いやすい構造のデータに置換えるプログラム
・カプセル化:「実装(ソースコード)」と「振る舞い(実行結果)」を分離して「実装(ソースコード)」を隠蔽する
※外部からの入力を守る
・構文解析:コンピュータが理解できる形式にコンパイルする
・Codeモジュール:アセンブリ言語のニーモニックをバイナリコードに変換する。
・Symbol Tableモジュール:シンボルと(Hackの場合、RAMかROMのアドレス)の対応表が保持されている
★アセンブリ言語
・Add
// Computes R0 = 2 + 3 (R0 refers to RAM[0])
@2
D=A //D=2
@3
D=D+A //D=2+3
@0
M=D //M=5
・Max(シンボルあり)
// Computes R2 = max(R0, R1) (R0,R1,R2 refer to RAM[0],RAM[1],RAM[2])
@R0
D=M //D=R0
@R1
D=D-M //D=R0-R1
@OUTPUT_FIRST
D;JGT //OUTPUT_FIRST>0ならば、(OUTPUT_FIRST)にjump
@R1
D=M //D=R1
@OUTPUT_D
0;JMP //無条件に(OUTPUT_D)にjump
(OUTPUT_FIRST)
@R0
D=M //D=R0
(OUTPUT_D)
@R2
M=D //R2=D
(INFINITE_LOOP)
@INFINITE_LOOP
0;JMP //無条件に(INFINITE_LOOP)にjump
・MaxL(シンボルなし)
// Symbol-less version of the Max.asm program.
@0
D=M //D=R0
@1
D=D-M //D=R0-R1
@10
D;JGT //10>0 jump
@1
D=M //D=R1
@12
0;JMP //無条件でjump
@0
D=M //D=R0
@2
M=D //R2=D
@14
0;JMP //無条件でjump
・Rect(シンボルあり)
// Draws a rectangle at the top-left corner of the screen.
// The rectangle is 16 pixels wide and R0 pixels high.
@0
D=M //D=R0
@INFINITE_LOOP //INFINITE_LOOP≦0 (INFINITE_LOOP)にjump
D;JLE
@counter
M=D
@SCREEN
D=A
@address
M=D
(LOOP)
@address
A=M
M=-1
@address
D=M
@32
D=D+A //D=address+R32
@address
M=D
@counter
MD=M-1
@LOOP
D;JGT //LOOP>0 (LOOP)にjump
(INFINITE_LOOP)
@INFINITE_LOOP
0;JMP //無条件で(INFINITE_LOOP)にjump
・RectL(シンボルなし)
// Symbol-less version of the Rect.asm program.
@0
D=M
@23
D;JLE
@16
M=D
@16384
D=A
@17
M=D
@17
A=M
M=-1
@17
D=M
@32
D=D+A
@17
M=D
@16
MD=M-1
@10
D;JGT
@23
0;JMP
Next
7章 バーチャルマシン#1:スタック操作(編集中)
Back
1章 ブール理論
1章 ブール理論(番外編)
2章 ブール算術
3章 順序回路
4章 機械語(前半)
4章 機械語(後半)
5章 コンピュータアーキテクチャ(前半)
5章 コンピュータアーキテクチャ (後半)
・Twitter
https://twitter.com/tango3564
・Instagram
https://www.instagram.com/tango3690/