halt

In document PowerPoint プレゼンテーション (Page 53-85)

番地 情報

move a,GR0 add b,GR0 move GR0,c a:10

b:20

c: (初期値なし)

番地 情報

add b,GR0 move GR0,c

a:10 b:20

c: (初期値なし)

22 23 24

halt

X

(停止)

命令

系列

データ

集合

ここで PC の値を変更することができれば、実行 の順番を変更することができる

• PC

はカウンタであるが、ある値に設定する命令を用意すれば、分岐を 可能にする

このような命令を分岐命令( =

jump

命令)と呼ぶ

jump

メモリ番地」 という命令の形式で

PC

にメモリ番地が設定される ことが必要

(仮に他の場合と同様

PC

がカウントアップしても)この命令を実行後、

PC

の値が変更され、 実行する命令の格納されたメモリ番地が直接指 定される

分岐文:分岐命令( jump 番地)を使用する

分岐命令

メモリの1番地に分岐する 換言すると、この命令を

実行すると PC が1に設定

される

番地 情報

move a,GR0 add b,GR0

a:10 b:20

c: (初期値なし)

jump 1

番地 情報

move a,GR0 add b,GR0

a:10 b:20

c: (初期値なし)

PC:

番地に対応する情報

(命令)が読み出される

Program Counter(PC) ・ メモリ・ 「命令読出し」との関係

jump 1

Program Counter(PC) ・ メモリ・ 「命令読出し」との関係

番地 情報

move a,GR0 add b,GR0

a:10 b:20

c: (初期値なし)

PC:

番地に対応する情報

(命令)が読み出される

jump 1

Program Counter(PC) ・ メモリ・ 「命令読出し」との関係

番地 情報

move a,GR0 add b,GR0

a:10 b:20

c: (初期値なし)

PC:

PC

は名前の通り、

自動的にその値 をカウントアップ

番地に対応する情報

(命令)が読み出される

jump 1

Program Counter(PC) ・ メモリ・ 「命令読出し」との関係

番地 情報

move a,GR0 add b,GR0

a:10 b:20

c: (初期値なし)

jump 1

PC:

PC

は名前の通り、

自動的にその値 をカウントアップ。

しかし、 jump 命令で

PC

の値 が変更される!

番地に対応する情 報(命令)の読出し 分岐命令は

PC の値

を強制的に設定する

ことで,次に読み出 す命令の番地を変 更する

条件分岐命令とは何か?

常に分岐する場合,「無条件分岐命令」で実現する

繰り返しなどは「無条件分岐」となる

条件分岐は,ある条件が満足した時に分岐する.そうでなければ分 岐しない(次の命令を実行:PCがカウントアップするだけ)

条件とは ・・・ プログラム状態で決定

プログラム状態とは? ・・ でも復習

条件により処理を選択する

条件分岐とは、特定の条件のときは処理

A

を、そ れ以外のときは処理

B

を選択処理するプログラム 構造で、条件式が導出した状態に従い、次に実 行するサブプログラムを選択して分岐する。

右の記述では、

• if ( i > n + 1) then goto L2

などに相当する記述部分になる。

上で「条件式」とは

” ( i > n + 1) ”

を指し、値

I, n+1

の大小比較によって、真偽が決定される(プログ ラム状態の確定)

処理

A

処理

B

プログラム状態 (Program Status) について

変数a,bの関係(状態):

a<b, a=b, a>b

大小比較の条件は次の6通りとなる

a<b,a≦b,a==b,a!=b,a>b,a≧b

3つの状態(プログラム状態: Program Status)で、上の6通りを チェックできる?!

変数a,bの大小関係は次の3通り:

a>b , a=b, a<b

そこで、(a-b)を考える。 結果は・・・

プログラム状態 (Program Status) について

1) (a-b)>0 ・・・ a>b パターン{0,0}

2) (a-b)=0 ・・・ a=b パターン{0,1}

3) (a-b)<0 ・・・ a<b パターン{1,0}

の3通りで表現できるので、2進数で「 2ビットの情報量」となる。

ここで、少し天下りだが、「条件コードレジスタ」の導入を行う。

上記の3状態を以下のように定義する。

1) (a-b)>0 ・・・ {Nflag,Zflag}={0,0}

2) (a-b)=0 ・・・ {Nflag,Zflag}={0,1}

3) (a-b)<0 ・・・ {Nflag,Zflag}={1,0}

プログラム状態 (Program Status) について

プログラム状態 (Program Status) について

a>b

{NZ}={00}

a==b

{NZ}={01}

a<b

{NZ}={10}

a<b

False False True

a<=b

False True True

a==b

False True False

a!=b

True False True

a>b

True False False

a>=b

True True False

照会する aとbとの 比較条件

実際のaとbの関係

(aとbの関係状態)

比較条件

は6通り

比較条件は6通り 条件分岐命令も6通り

命令コード 「条件分岐命令」の意味

a<b jplt Jump

On

Less Than

a<=b jple Jump

On

Less Than Or Equal To

a==b jpeq Jump

On

Equal To

a!=b jpne Jump

On

Not Equal To a>b jpgt Jump

On

Greater Than

a>=b jpge Jump

On

GreaterThan Or Equal To

照会する

aとbとの 比較条件

(事例紹介)

高級言語風(コンパイラ言語風)の記述:

if (a<=b) then gotoL1

をアセンブリ言語へ変換するには・・・?

この文(statement)の意味は・・・

「変数aとbとが,条件a≦bを満足する時,L1番地に移動(goto L1)する」

ということ

条件分岐文:条件分岐命令(

jp

XX 番地)を使用する

但し、XXは

{lt,le,eq,ne,gt.ge}

のいずれか

if (a<=b) then gotoL1 をアセンブリ言語へ 1)変数aの値をソロバン(演算装置のGR0)に読出し,

2)それから変数bの値を減算して,

3)その結果が「負」,または「ゼロ」になれば,L1番地へ分岐する

(そうでなければ,次の命令を実行する)

と考えるべきなので・・

(事例紹介)

1)変数aの値をソロバン(演算装置のGR0)に読出し、

2)それから変数bの値を減算して、

3)その結果が「負」,または「ゼロ」になれば、

L1番地へ分岐する

(そうでなければ、次の命令を実行する)

と考える

条件分岐文:条件分岐命令(

jp

XX 番地)を使用する

但し、XXは

{lt,le,eq,ne,gt.ge}

のいずれか

move a,GR0

sub b,GR0

jpxx L1

次の命令

(事例紹介)

if (a<=b) then gotoL1 をアセンブリ言語へ

この文(statement)の意味は・・・

変数aとbとが、条件a≦bを満足する 時、L1番地に移動(goto L1)する

「変数aの値をソロバン(演算装置 のGR0)に読出し、変数bの値を 減算して、その結果が「負」、また

は「ゼロ」になれば、L1番地(実際

には、4番地等)へ分岐する(そう でなければ、次の命令を実行す る)」と考える

a>b

{NZ}=

{00}

a==b

{NZ}=

{01}

a<b

{NZ}=

{10}

jplt 分岐せず 分岐せず 分岐

jple 分岐せず 分岐 分岐

jpeq 分岐せず 分岐 分岐せず

jpne 分岐 分岐せず 分岐

jpgt 分岐 分岐せず 分岐せず

jpge 分岐 分岐 分岐せず

jple命令を使用する

「正」

「ゼロ」 「負」

(事例紹介)

move a,GR0

sub b,GR0

jple L1

次の命令

a: 10 b: 20 L1:

分岐命令に jple 命令を使用すると、実際のプログラムはこんな感じで・・

情報

move 5,GR0

sub 6,GR0

jple 4

10 20

条件分岐命令

条件が満足すれば、

メモリの4番地に分 岐する

次の命令

番地

そこで、処理の流れをトレースすると・・

条件(付き)分岐命令の実行をトレースする

ノイマン型コンピュータの動作の基本である「マシンサイクル」に基づ いて動作を順番にトレースする

特に、プログラムカンウンタ(PC)と条件コードレジスタ(Condition Code Register:CCR)の動きに着目する

今回は簡単に{N

flag

,Z

flag

}でCCRを表現する

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

初期化

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

初期化

初期化

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令読出し」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令読出し」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令解読」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

命令解釈

move 5,GR0

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令解読」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

命令解釈

move 5,GR0

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

move 5,GR0

実行

データ読出し

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

move 5,GR0

実行

データ読出し

演算実行

NZflg

:{

00

GR0:

10

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:0で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

move 5,GR0

実行

データ読出し

NZflg

:{

00

GR0:

10 演算実行

結果格納

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:1で「命令読出し」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0:

10

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:1で「命令読出し」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0:

10

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:1で「命令解読」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

命令解釈

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0:

10 sub 6,GR0

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:1で「命令解読」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

命令解釈

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0:

10 sub 6,GR0

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:1で「命令実行」

番地 情報

move 5,GR0

sub 6,GR0

jple 4

10 20

次の命令

PC:

(±

実行

データ読出し

NZflg

:{

-,-

GR0:

NZflg

:{

00

GR0:

10 sub 6,GR0

制御装置(∋

PC

)、 演算装置(∋

GR

,N・Z

-flags

) および 記憶装置の関係

PC:1で「命令実行」

番地 情報

move 5,GR0

In document PowerPoint プレゼンテーション (Page 53-85)

Related documents