2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~
機械語とアセンブラ言語 高級言語 (ソフトウェア) C言語など 機械語 アセンブラ言語 (ソフトウェア) (ソフトウェア) 1対1 ・最終的には、機械語に変換される ・人間が扱いやすい 機械語 (ソフトウェア) アセンブラ言語 (ソフトウェア) 1対1 コンピュータ (ハードウェア) ・コンピュータの本質的命令 ・人間に比較的わかりやすい 2
COMETⅡとCASLⅡ COMETⅡ(コンピュータ) COMETⅡは、実在しないコンピュータだが、コンピュータとしての五大機能を備えた仮想のコンピュータである。 CASLⅡ(アセンブラ言語) CASLⅡは、COMETⅡ上で動作する機械語に対応するアセンブラ言語である。 注意:CASLⅡの仕様書は、情報処理技術者試験を実施いている情報処理推進機構から入手できるほか、情報処理技術者試験の「案内書・願書」の巻末に記載されている。 また、CASLⅡのプログラミングを体験できるシミュレータも提供されている。 その他、多くの有志によってCASLⅡを学習できる教材がインターネット上で提供されているので、必要に応じて学習してもらいたい。 3
COMETⅡの主な仕様 1語は16ビット 主記憶の容量は65536語で0~65535番地 逐次制御 汎用レジスタは8つ(GR0~GR7) その他のレジスタとして、スタックポインタ(SP)とプログラムレジスタ(PR) 演算結果により設定されるフラグレジスタ(FR) OF SF ZF 4
機械語の構造 OP r/r1 x/r2 adr OP(8ビット):命令コード(回路指定) r/r1(4ビット):レジスタ(出力&入力) 出力先(レジスタ) OP r/r1 x/r2 adr 回路指定 入力先(レジスタまたは実効アドレス) OP(8ビット):命令コード(回路指定) r/r1(4ビット):レジスタ(出力&入力) x/r2(4ビット):レジスタ(入力) 1語の場合:(r/r1)+(x/r2)(adrはなし;第2語はなし) 2語の場合:(x/r2)+(adr)の値(x/r2≧8⇒0+(adr)) adr(16ビット):主記憶の番地(入力) 5
アセンブラ言語(機械語命令)の例 ラベル 命令コード オペランド ADDA GR1,GR2 ADDA 1 2 ラベル 命令コード オペランド ■レジスタGR1の値にレジスタGR2の値を加える ラベル 命令コード オペランド ADDA GR1,GR2 ADDA 1 2 ■レジスタGR1の値に実効アドレス(DATA)の値(#01FA)を加える ラベル 命令コード オペランド ADDA GR1,DATA DATA DC #01FA ADDA 1 (8) 実効アドレス(DATA) 6
アセンブラ言語のプログラミングの例 ■1+2を計算する(実効アドレス(ANS)に答え3が記憶される) ラベル 命令コード オペランド EXAM START LD GR0,DATA1 ADDA GR0,DATA2 ST GR0,ANS RET DATA1 DC #0001 DATA2 #0002 ANS DS 1 END 命令領域 データ領域 7
プログラムの実行 アドレス 値 #0000 **** ~ #002D #002E PUSH * 0 #002F *(スタックへ積む) #0030 LD (8) #0031 #0100 #0032 ADDA #0033 #0101 #0034 ST #0035 #0102 #0036 POP #0037 アドレス 値 #0038 **** ~ #00FF #0100(DATA1) #0001 #0101(DATA2) #0002 #0102(ANS) ****(実行後、#0003が入る) #0103 #FFFF (1)まず、OSによってプログラムとデータがメモリ上に書き込まれる。 (2)通常、レジスタを使用する前はレジスタの内容を退避させる(黄色の部分)。 8
注意すべきこと ロードアドレス(LAD)、プッシュ(PUSH)、コール(CALL)だけは実行アドレスに格納されている値ではなく、実行アドレス(アドレス)そのものを演算することに注意する
コンピュータシステム[再掲] コンピュータ 外部 プログラム データ 結果 処理 10
5大機能(2)[再掲] 中央処理装置(CPU) 制御装置 演算装置 記憶装置 入力装置 出力装置 プログラム データ 制御 11
ノイマン型コンピュータ プログラム内蔵方式 逐次制御方式 12
コンピュータシステム(まとめ) ノイマン型コンピュータ 四則演算 論理演算 論理回路 2進数 ブール代数 半導体 プログラム内蔵方式 逐次制御方式 2進数(命令・データ) 四則演算 (足し算・補数表現・シフト演算) 論理演算 論理回路 2進数 ブール代数 半導体 13