制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令解読」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令解読」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 2
(±
命令解釈
NZflg
:{-,-
}GR0:
NZflg
:{10
}GR0: -
10jple 4
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令実行」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 2
(±
NZflg
:{-,-
}GR0:
NZflg
:{10
}GR0: -
10jple 4
実行 データ読出し
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令実行」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 2
(±
NZflg
:{-,-
}GR0:
NZflg
:{10
}GR0: -
10jple 4
実行 データ読出し
演算実行
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令実行」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 4
実行 (±
データ読出し 演算実行
結果格納
NZflg
:{-,-
}GR0:
NZflg
:{10
}GR0: -
10jple 4
条件分岐命令 により、PCの 値が設定され、
分岐が生じる ことになる
通常、PCはカウントアップ するが・・
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:4で「命令読出し」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 4
(±
NZflg
:{-,-
}GR0:
NZflg
:{10
}GR0: -
10・・という手順で条件分岐 が生じる
但し,次のような場合は・・・
◼
NZflagsが条件を満たしていない場合例えば{NZ}={00}
or
{01}など場合,jplt命令では・・・
◼
条件分岐命令が異なる場合例えば,jpge命令,jpeq命令などでは 条件が異なるので・・・
分岐は生じない
結果として,次の命令を実行する
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令実行」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 2
(±
NZflg
:{-,-
}GR0:
NZflg
:{00
}GR0: -
10jple 4
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:2で「命令実行」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 3
(±
NZflg
:{-,-
}GR0:
NZflg
:{00
}GR0: -
10jple 4
条件分岐命令の条件が 成立せず、PCの値が設 定されない・・分岐せず!
PCはカウントアップ・・
制御装置(∋
PC
)、 演算装置(∋GR
,N・Z-flags
) および 記憶装置の関係PC:3で「命令読出し」
番地 情報 0 1 2 3 4 5 6
7
:
move 5,GR0
sub 6,GR0jple 4
10 20
次の命令
:
PC: 3
(±
NZflg
:{-,-
}GR0:
NZflg
:{10
}GR0: -
10次の命令を実行
◼
代入文や四則演算文(実際はmoveや加減算の命令のみを紹介 しているが:-
)について具体的に説明◼
分岐命令および条件(付き)分岐命令について具体的に説明◼
これに加え“
halt”
はmoveなどと異なり,引数を持たないPCのカウントアップを抑制
ここまでの結論(まとめ1)
情報リテラシを理解する(その6)
ここでは、次のようなプロセスで内容を可視化する。
① 簡単な「級数(数列の和)」を求めるプログラムを示し、
1.
その構造の理解を目指す。 (①-1)2.
プログラムの基本3要素を紹介する。 (①-2)② プログラムの基本3要素を処理(=プログラムの要素を実行)するための
「コンピュータの構造や動作」を把握してもらい、
1.
プログラム内蔵方式の理解を目指す。 (②-1)2.
プログラム=命令系列+データ集合の原理を紹介する。(②-2)③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、
解釈そして実行)できる形式に変換する過程を示し、
1.
(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)2.
当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)コンピュータに具体的な処理を実行させる
•
これまでに「代入文」「四則演算文」「分岐文」「条件分岐文」および「プログラム状態」について話を続けてきた
•
その意図は(比較的まとまった)プログラムをコンピュータに処理させ たい、との思いからだった•
では、実際に処理させるには・・思い出して欲しい。我々、人間が理 解できるプログラムは、コンピュータが直接、読出し、解釈、実行でき るプログラムとは(かなり)違った形式となっていることを「こんなプログラム」をコンピュータに処理させたい
END
L2 L1
START
i = 0 S = 0
if ( i > n+1 ) gotothenL2
S = S + i i = i + 1 goto L1
no yes
S=0; i=0; /* 初期値*/
while (i <= n+1){
S=S+i;
i=i+1;
}
コンピュータに具体的な処理を実行させる (2)
•
では、誰が、「人間が理解できるプログラム」を「コンピュータが直接、読出し、解釈、実行できるプログラム」に書き換えてくれるかを考える 必要がある
•
「是非に及ばず・・」ということになれば、実力行使するしかない•
以下の作業を見ていくことにするアセンブリコード作成の事例紹介
0: move 20,GR0 1: move GR0,23 2: move GR0,24 3: move 24,GR1 4: sub 22,GR1 5: jpgt 13 6: move 23,GR0 7: add 24,GR0 8: move GR0,23 9: move 24,GR0 10: add 21,GR0 11: move GR0,24 12: jump 3
13: halt
20: 0 // Zero 21: 1 // One 22: 5 // N1
23: (non-init)// S 0: move Zero,GR0
1: move GR0,S 2: move GR0,i 3: move i,GR1 4: sub N1,GR1 5: jpgt L2 6: move S,GR0 7: add i,GR0 8: move GR0,S 9: move i,GR0 10: add One,GR0 11: move GR0,i 12: jump L1 13: halt
20: 0 // Zero 21: 1 // One 22: 5 // N1 23: // S move Zero,GR0
move GR0,S move GR0,i L1: move i,GR1 sub N1,GR1 jpgt L2 move S,GR0 add i,GR0 move GR0,S move i,GR0 add One,GR0 move GR0,i jump L1 L2: halt Zero: 0 One: 1
N1: 5 // N+1 S: (未初期化)
アセンブリコード作成の事例紹介
0: move 20, GR0 1: move GR0, 23 2: move GR0, 24 3: move 24, GR1 4: sub 22, GR1 5: jpgt 13
6: move 23, GR0 7: add 24, GR0 8: move GR0, 23 9: move 24, GR0 10: add 21, GR0 11: move GR0, 24 12: jump 3
13: halt
20: 0 // Zero 21: 1 // One 22: 5 // N1 23: (non-init)// S 24: (non-init)// i
http://stwww.eng.kagawa-u.ac.jp/~imai/H27Labo/Higashikakiuchi/
左の記述なら「東垣内君の
CPU
シミュレータ」でも処理可能0: move 20, GR0 1: move GR0, 23 2: move GR0, 24 3: move 24, GR1 4: sub 22, GR1 5: jpgt 13
6: move 23, GR0 7: add 24, GR0 8: move GR0, 23 9: move 24, GR0 10: add 21, GR0 11: move GR0, 24 12: jump 3
13: halt
20: 0 // Zero 21: 1 // One 22: 5 // N1 23: (non-init)// S 24: (non-init)// i
http://stwww.eng.kagawa-u.ac.jp/~imai/H27Labo/Higashikakiuchi/
左の記述なら「東垣内君の
CPU
シミュレータ」でも処理可能0: move 20,GR0 1: move GR0,23 2: move GR0,24 3: move 24,GR1 4: sub 22,GR1 5: jpgt 13
6: move 23,GR0 7: add 24,GR0 8: move GR0,23 9: move 24,GR0 10: add 21,GR0 11: move GR0,24 12: jump 3
13: halt 20: 0 21: 1 22: 5
23: (non-init)// S 24: (non-init)// i
左の記述なら「原 慎也君の
CPU
シミュレータ」でも処理可能http://stwww.eng.kagawa-u.ac.jp/~imai/H30Labo/Hara/simulator3/index.html
0: move 20,GR0 1: move GR0,23 2: move GR0,24 3: move 24,GR1 4: sub 22,GR1 5: jpgt 13
6: move 23,GR0 7: add 24,GR0 8: move GR0,23 9: move 24,GR0 10: add 21,GR0 11: move GR0,24 12: jump 3
13: halt 20: 0 21: 1 22: 5
23: (non-init)// S 24: (non-init)// i
左の記述なら「原 慎也君の
CPU
シミュレータ」でも処理可能http://stwww.eng.kagawa-u.ac.jp/~imai/H30Labo/Hara/simulator3/index.html
コンピュータに具体的な処理を実行させる (3)
•
以上で、確かに「結構、面倒な変換作業を見て」プログラムが処理で きることは理解できたが・・•
このような面倒な作業を、新しいプログラムを考える度に「誰が担当 するのか?!」という疑問が湧いてくる(という向きも当然、あろうと 考える) そこで・・•
「コンパイラ
」があれば、「面倒な作業」を任せることができる•
改めて・・VisualCompiler によるコンパイル結果
(生成コード)を VisualCPUSimulator で 実行する手順について
香川大学工学部・創造工学部 今井研究室
平西宏彰、