GR0: - 10jple4

In document PowerPoint プレゼンテーション (Page 89-112)

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令解読」

番地 情報

move 5,GR0

sub 6,GR0

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令解読」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

命令解釈

NZflg

:{

-,-

GR0:

NZflg

:{

10

GR0: -

10

jple 4

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

10

GR0: -

10

jple 4

実行 データ読出し

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

10

GR0: -

10

jple 4

実行 データ読出し

演算実行

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

実行 (±

データ読出し 演算実行

結果格納

NZflg

:{

-,-

GR0:

NZflg

:{

10

GR0: -

10

jple 4

条件分岐命令 により、PCの 値が設定され、

分岐が生じる ことになる

通常、PCはカウントアップ するが・・

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:4で「命令読出し」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

10

GR0: -

10

・・という手順で条件分岐 が生じる

但し,次のような場合は・・・

NZflagsが条件を満たしていない場合

例えば{NZ}={00}

or

{01}など場合,

jplt命令では・・・

条件分岐命令が異なる場合

例えば,jpge命令,jpeq命令などでは 条件が異なるので・・・

分岐は生じない

結果として,次の命令を実行する

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0: -

10

jple 4

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:2で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0: -

10

jple 4

条件分岐命令の条件が 成立せず、PCの値が設 定されない・・分岐せず!

PCはカウントアップ・・

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:3で「命令読出し」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

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 で 実行する手順について

香川大学工学部・創造工学部 今井研究室

平西宏彰、

(OB)

原慎也

(

)

、今井慈郎

「こんなプログラム」をコンピュータに処理させたい

int main() { int a;

int b;

a = 0;

b = 0;

while ( a < 5 ) {

In document PowerPoint プレゼンテーション (Page 89-112)

Related documents