COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1
ここでは機械命令レベルプログラミングを学びます 機械命令の形式は学びましたね機械命令を並べたプログラムを作ります 2 その前に
プログラミング言語について 4 プログラミング言語について 高級言語 (Java とか C とか ) と機械命令レベルの言語 ( アセンブリ言語 ) があります 5
プログラミング言語について 高級言語 (Java とか C とか ) と機械命令レベルの言語 ( アセンブリ言語 ) があります 高級言語 コンパイラ 機械命令 同レベルアセンブリ言語 6 プログラミング言語について 高級言語 (Java とか C とか ) と機械命令レベルの言語 ( アセンブリ言語 ) があります 高級言語 人間に近い 書きやすい アセンブリ言語 機械に近い プログラムの効率が良い と言われる 7
ここで挑戦するアセンブリ言語は 効率よりは 機械の動作を理解することが目的 あまり細かいことは気にしない 8 ここで挑戦するアセンブリ言語は 効率よりは 機械の動作を理解することが目的 あまり細かいことは気にしない でも 一応はアセンブリ言語の形になったプログラムを書きましょう 9
もう一つ お断り 10 ここで挑戦するアセンブリ言語は 機械が実在しない ( 仮想的 ) なものを使います 情報処理技術者試験で使われる仮想 CPU COMET-II のためのアセンブリ言語 CASL-II を使う http://www.jitec.jp/1_1download/shiken_yougo_ver2_0.pdf 11
ここで挑戦するアセンブリ言語は 機械が実在しない ( 仮想的 ) なものを使います 情報処理技術者試験で使われる仮想 CPU COMET-II のためのアセンブリ言語 CASL-II を使う たとえば Intel の PC 用 CPU (Core-/5/7i など ) を使ってもよいのだが 命令が複雑で 最初の学習には向かないだろう 12 ようやく本論アセンブリ言語 CASL-II 1
まず書き方の規則 14 まず書き方の規則 1 に 1 命令 [ ラベル :] OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ 15
まず書き方の規則 1 に 1 命令 [ ラベル ]: OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ LABEL1: ADDA GR, 257 16 まず書き方の規則 1 に 1 命令 [ ラベル ]: OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ LABEL1: ADDA GR, 257 ラベル OP コードオペランド 17
まず書き方の規則 1 に 1 命令 [ ラベル ]: OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ LABEL1: ADDA GR, 257 ラベル OP コードオペランド 18 命令 ( 何をするか ) を指定する ADDA= 足し算をする まず書き方の規則 1 に 1 命令 [ ラベル ]: OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ LABEL1: ADDA GR, 257 ラベル OP コードオペランド 19 操作の対象を指定する GR に 257 番地の内容を足す
まず書き方の規則 1 に 1 命令 [ ラベル ]: OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ LABEL1: ADDA GR, 257 ラベル OP コードオペランド 20 まず書き方の規則 1 に 1 命令 [ ラベル ]: OP コード, オペランド ( 複数 ) オペランドは命令によっていろいろ LABEL1: ADDA GR, 257 ラベル OP コードオペランド この命令の置いてある場所を す LABEL1 で される場所に置いてある 21
命令が並ぶと LD GR, 201 ADDA GR, 202 ST GR, 20 メモリ 201 番地の内容を汎用レジスタ へロード ( コピー ) メモリ 202 番地の内容と汎用レジスタ を足してレジスタ へ格納 汎用レジスタ の内容をメモリ 20 番地へストア ( コピー ) 22 命令が並ぶと 1 LD GR, 201 メモリ 201 番地の内容を汎用レジスタ へロード ( コピー ) 2 ADDA GR, 202 ST GR, 20 2 CPU GR 5 + 1 2 201 202 20 メモリ 202 番地の内容と汎用レジスタ を足してレジスタ へ格納 汎用レジスタ の内容をメモリ 20 番地へストア ( コピー ) メモリ 5 8
命令が並ぶと 1 LD GR, 201 メモリ 201 番地の内容を汎用レジスタ へロード ( コピー ) 2 ADDA GR, 202 ST GR, 20 24 CPU GR 8 5X + 1 2 201 202 20 メモリ 202 番地の内容と汎用レジスタ を足してレジスタ へ格納 汎用レジスタ の内容をメモリ 20 番地へストア ( コピー ) メモリ 5 8 命令が並ぶと 1 LD GR, 201 メモリ 201 番地の内容を汎用レジスタ へロード ( コピー ) 2 ADDA GR, 202 ST GR, 20 25 CPU GR 8 5X + 1 2 201 202 20 メモリ 202 番地の内容と汎用レジスタ を足してレジスタ へ格納 汎用レジスタ の内容をメモリ 20 番地へストア ( コピー ) メモリ 5 8
命令が並ぶと 1 LD GR, 201 メモリ 201 番地の内容を汎用レジスタ へロード ( コピー ) 2 ADDA GR, 202 ST GR, 20 26 CPU GR 8 5X + 1 2 201 202 20 メモリ 202 番地の内容と汎用レジスタ を足してレジスタ へ格納 汎用レジスタ の内容をメモリ 20 番地へストア ( コピー ) メモリ 5 8 このように命令を 1 ずつ順番に実 する ここまでまとめると 1 に1 命令 [ ラベル :] OPコード, オペランドの形 OPコード= 何をする命令か ( 命令種類 ) オペランド= 命令の操作対象 上から順に1 ずつ処理が進む ( 実 ) 27
もう少し先へ こう オペランドの書き方 28 オペランド LD GR,201 メモリ上の 201 番地の内容 29
オペランド LD GR,201 メモリ上の 201 番地の内容 プログラマのイメージは x=x+y ( 名前の付いた ) 変数 0 オペランド LD GR,201 メモリ上の 201 番地の内容 プログラマのイメージは x=x+y 番地でなく名前で呼びたい メモリ上の変数 y ( 名前の付いた ) 変数 1
オペランド LD GR,201 メモリ上の 201 番地の内容 プログラマのイメージは x=x+y 番地でなく名前で呼びたい メモリ上の変数 y ( 名前の付いた ) 変数 2 LD GR,y と書く 但し y は予めメモリ上に取った変数の名前 オペランド LD GR,201 メモリ上の 201 番地の内容 プログラマのイメージは x=x+y 番地でなく名前で呼びたい メモリ上の変数 y LD GR,y ( 名前の付いた ) 変数 但しこの授業では厳密にはしない 厳密には他の本を てください と書く 但し y は予めメモリ上に取った変数の名前
もう少し先へ こう オペランドの書き方 4 オペランド LD GR,201 汎用レジスタ 5
オペランド LD GR,201 汎用レジスタ COMET IIでは 汎用レジスタは GR0, GR1,, GR7 の8つ 6 7 オペランド LD GR,201 汎用レジスタ COMET IIでは 汎用レジスタは GR0, GR1,, GR7 の8つ どれをどう使ってもよい ( プログラマの勝手 ) が GR0 だけは指標レジスタとして使えない これも この授業では厳密には制限しない
脱線かな? いろいろな命令 COMET II の命令一覧 8 COMET II の命令の資料 教科書 28 ページ資料 : 情報処理技術者試験 試験で使用する情報技術に関する用語 プログラム言語など ver 2.2 の別紙 1 の 9 ページ https://www.jitec.ipa.go.jp/1_1download/shiken_yougo_ver2_2.pdf 命令の種類と動作は 4 ページの表 (5 ページは使わない ) を参照すること 9
COMET II の命令の資料 40 COMET II の命令の資料 41
COMET II の命令の資料 42 このぐらいにして 具体的なプログラミングに移ろう 4