プログラミングとアーキテクチャ 第2章 続き
アセンブリ言語のところでは、よく使う命令群、記憶割り当てを行う擬似命令(CASLでもあったねDSとかDCとかだっけ?)などの説明がされている。
命令群であれば、
; コメント MOVL A,B ; A番地のロングワードの内容をB番地のロングワードにコピーする MOVAL A,B ; ロングワードAのアドレスをB番地のロングワードに移す。 INCL A ; A番地のロングワードに1をたす DECL A ; A番地のロングワードから1をひく CMPL B,A ; A番地とB番地のロングワードを比較する
記憶割り当てであれば
NUMBERS: .BYTE 1,2,3 ; NUMBERSというラベルが与えられて、整数1,2,3が格納される。アドレスは1が格納された番地 MANGO: .LONG MANGO ; MANGOのアドレス値で初期化 .LONG MANGO ; MANGOのアドレス値で初期化 LEMON: .LONG . ; LEMONのアドレス値で初期化 "."は現在のアドレス(正しくは現在のロケーションカウンタの値)を示す ; ロケーションカウンタはプログラムカウンタのアセンブラ版。命令やデータが格納されている場所のこと BANANA: .LONG . ; BANANAのアドレス値で初期化 .LONG . ; BANANAのアドレス値 + 4 で初期化
こんなのが紹介されている。
ラベルとかをつけると、いくら低レベルといわれるアセンブリでも結構プログラミング言語っぽくなる。書きたくないけど。
後半には2パスアセンブラの動作のフローチャートがある。
パス1では、シンボルテーブルの作成、コメントの削除、命令サイズの計算などの下準備をして、パス2で実際に2進コードに変換して生成している。