• 検索結果がありません。

PowerPoint プレゼンテーション

N/A
N/A
Protected

Academic year: 2021

シェア "PowerPoint プレゼンテーション"

Copied!
143
0
0

読み込み中.... (全文を見る)

全文

(1)

情報リテラシ「コンピュータ入門」

(プログラム内蔵方式コンピュータ

の構造と動作を視覚的に理解す

るための教材の実例)

香川大学 創造工学部(工学部、工学研究科)

今井研究室

(2)

情報リテラシを理解する(その1)

• 一般にコンピュータを利用することで、情報リテラシの理解が深まる

と言われる。そこで、「文書管理」のような応用技術から情報リテラシ

入門を試みる手法も広く散見される。

• 一方、情報リテラシの基本を「コンピュータ自体の理解」と位置付け、

例えば、プログラミング言語を理解し、実際にプログラミング実習を

通じて「コンピュータ理解」を試みる手法も、従来から、有益とみなさ

れてきた。

• 問題はプログラミング、特に高水準言語(高級言語)プログラムを理

解することと、コンピュータ自体(ハードウェアや基本ソフトウェア)を

理解することとの両方が(ほぼ)同時に要求される局面もあり、学習

初期の時点で学習者には負担になる場合もある、と見做されていた。

(3)

情報リテラシを理解する(その2)

• 実際、大学の授業でも「プログラミング」「システムプログラミング=コンパ

イラ」「計算機システム&アーキテクチャ」などのそれぞれの学問が(少な

くとも40年ほど前には・・苦笑)個別の半期分の演習科目、講義科目として

用意され、履修生には科目相互の「距離感」を感じさせながらも、ともかく

も学習を頑張るよう強要?する局面も否定できない状況にあった。

• このような「距離感」がどこにあったかと言えば、担当教員の分担制にもよ

るが、

• 「プログラミング」は、高度な(当時の考えでは)

技術習得型

と見做され、

• 「システムプログラミング」「計算機アーキテクチャ」は

知識習得型

と見做されていた。

• 学習者側の努力が強く求められ、これらを自力で融合&統一的理解を行

う=距離を埋めるためには、学習時点で「情報のプロ≒幅広い技術+知

識を備えていること」が必要であるとも言われてきた。

(4)

情報リテラシを理解する(その3)

• ここでは敢えて深堀り(もしたいのですが)よりも、とにかく流れを示し、全

体イメージを明らかにすること・・その意味では「情報リテラシ」的な

高級

言語プログラミングから計算機アーキテクチャまで

を一連の流れ

として・・を試みたい。

• 幸い、研究室の学生によるCPUシミュレータと(最近開発中の)コンパイラ

がWebアプリとして使用できる環境が整った。

• これを基本ツールにコンパイラからコンピュータの動きを理解するという流

れで、「情報リテラシ」として、高級言語プログラミングからコンピュータの

内部構造・動作の視覚化までを説明したい・・ちょっと無謀な冒険!?か

もしれないけれど。

http://stwww.eng.kagawa-u.ac.jp/~s17t260/VisualCompiler/VisualCompiler.html http://stwww.eng.kagawa-u.ac.jp/~imai/H27Labo/Higashikakiuchi/ http://stwww.eng.kagawa-u.ac.jp/~imai/H30Labo/Hara/simulator3/index.html

(5)

情報リテラシを理解する(その4)

• 先行事例の1つとして、次の「著名な教科書」を紹介し、我々が目指す

高級言語プログラミングから計算機アーキテクチャまで

を一連

の流れとして「情報リテラシ」 の教材の1っの紹介を試みたい。

•C

OMPUTER

S

YSTEMS

• A Programmer’s Perspective

https://dadongwang.files.wordpress.com/2011/03/computer-system-a-programmers-perspective.pdf

(6)

A Tour of Computer Systems

• 1.2 Programs Are Translated by Other Programs into Different Forms

The hello program begins life as a high-level C program because it can be read and understood by human beings in that form. In order to run hello.c on the system, the individual C statements must be translated by other programs into a sequence of low-level machine-language instructions. These instructions are then packaged in a form called an

executable object program and stored as a binary disk file. Object programs are also referred to as executable object files.

(7)

A Tour of Computer Systems

• 1.3 It Pays to Understand How Compilation Systems Work

• 1.4 Processors Read and Interpret Instructions Stored in Memory

Hardware organization of a typical system. CPU: Central Processing Unit,

ALU: Arithmetic/Logic Unit, PC: Program counter,

(8)

A Tour of Computer Systems

Reading the hello command from the keyboard.

(9)

Loading the executable from disk into main memory.

A Tour of Computer Systems

(10)

A Tour of Computer Systems

• 1.4 Processors Read and Interpret Instructions Stored in Memory(4)

Writing the output string from memory to the display.

(11)

情報リテラシを理解する(その5)

• 先に示した一連の流れ

はまさに、情報系専門技術者教育への

高級言語プログラミングから計算機アーキテクチャまで

を一

貫したトーンで話題提供する手法で「コンピュータの具体的な機能と

動作」を例示しており、単なる知識だけの押し売りには留まらない

「情報リテラシ」 の教材の好例と考える。

• そこで、このような事例≒好例を可能な限り忠実&適切に模しつつ

改善することで、

高級言語で記述されたプログラム

・・1つのアルゴリ

ズムとも言えるし、手順とも考えることができる・・

をコンピュータがど

のように処理することができるか

、を示すことにすることで、新しい

「情報リテラシ」の教材を提案するスタートポイントとしたい。

(12)

情報リテラシを理解する(その6)

ここでは、次のようなプロセスで内容を可視化する。

① 簡単な「級数(数列の和)」を求めるプログラムを示し、

1. その構造の理解を目指す。 (①-1)

2. プログラムの基本3要素を紹介する。 (①-2)

② プログラムの基本3要素を処理(=プログラムの要素を実行)するための

「コンピュータの構造や動作」を把握してもらい、

1.

プログラム内蔵方式の理解を目指す。 (②-1)

2.

プログラム=命令系列+データ集合の原理を紹介する。(②-2)

③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、

解釈そして実行)できる形式に変換する過程を示し、

1.

(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)

2.

当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)

(13)

情報リテラシを理解する(その7)

(続き・・)

④ VisualCompilerを使用して高級言語記述プログラムをアセンブリ言語プロ

グラムへ変換するプロセスを示し、

1. その構造の理解を目指す。 (④-1)

2. プログラムの基本3要素を紹介する。 (④-2)

⑤ VisualCompilerが生成するアセンブリ言語プログラムをCPUシミュレータで

実行させる手順を理解してコンピュータの内部動作を理解してもらう。

1.

プログラム内蔵方式の理解を目指す。 (⑤-1)

2.

プログラム=命令系列+データ集合の原理を紹介する。(⑤-2)

⑥ また、CPUシミュレータのより高度な使用方法を学び、コンピュータの基本

原理を理解してもらう。

これはオプションとする

1.

(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(⑥-1)

2.

当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(⑥-2)

(14)

情報リテラシを理解する(その6)

ここでは、次のようなプロセスで内容を可視化する。

① 簡単な「級数(数列の和)」を求めるプログラムを示し、

1. その構造の理解を目指す。 (①-1)

2. プログラムの基本3要素を紹介する。 (①-2)

② プログラムの基本3要素を処理(=プログラムの要素を実行)するための

「コンピュータの構造や動作」を把握してもらい、

1.

プログラム内蔵方式の理解を目指す。 (②-1)

2.

プログラム=命令系列+データ集合の原理を紹介する。(②-2)

③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、

解釈そして実行)できる形式に変換する過程を示し、

1.

(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)

2.

当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)

(15)

級数(数列の和)を求める・・これをプログラムで表現

初期値の記述:A(0)=?,S(0)=?

第n項と第(n+1)項との関係の記述:

S(n)=A(0)+・・・+A(n)

S(n+1)=A(0)+・・・+A(n)+A(n+1)

S(n+1)=S(n)+A(n+1)

+

=

1

0

)

(

n

i

i

A

)

0

(

)

0

(

;

)

0

(

,

)

1

(

)

(

)

1

(

A

S

value

whereA

n

A

n

S

n

S

=

=

+

+

=

+

しかし,漸化式よりも,総和(summation)の記述の方がより簡潔!

(16)

「プログラム」とは何か

いきなりですが、

流れ図

で・・

L2 L1 START i = 0 S = 0 if ( i > n+1 ) then goto L2 S = S + A( i ) i = i + 1 goto L1

yes

no

• 左側の「流れ図(Flow Chart)」は、右側のプロ

グラムコードを可視化(上から下への流れで

計算の動きを「見える化」)している。

流れ図 (Flow Chart)

S=0; i=0; /* 初期値 */

while (i <= n+1){

S=S+A(i);

i=i+1;

}

(17)

プログラムの「基本構造」とは

• プログラムの「基本構造」 ( 「制御構造」、代表的な3つのパターン)とは、

多くのテキストで以下のように分類される。

• 逐次処理(Sequence)

:順次構造とか、順構造、順次、順次処理・・

• 繰返し(Loop/Iteration)

:反復構造とか、反復、繰返し処理、繰返構造

• 条件分岐(Conditional Branch)

:選択構造とか、選択、分岐・・

• 結局、大規模なプログラム開発であっても、その個別要素では、上の3つ

のパターンを適宜、組み合わせて、計算手順を構成することになる。

https://www.acroquest.co.jp/webworkshop/programing_course/note.html https://shop.cqpub.co.jp/hanbai/books/18/18781/18781_3syo.pdf https://en.wikipedia.org/wiki/Structured_programming https://xtech.nikkei.com/atcl/nxt/column/18/00208/031300002/ http://itdoc.hitachi.co.jp/manuals/3020/3020378270/LANG0027.HTM 様々な参考文献に 同種の説明あり

(18)

プログラムの「基本構造」とは

Graphical representation of the three basic patterns — sequence, selection, and repetition — using NS diagrams (blue) and flow charts (green)

Sequence

Selection =

Conditional branch

Repetition =

Loop / Iteration

逐次処理

条件分岐

繰返し

https://en.wikipedia.org/wiki/Structured_programming

(19)

プログラムの「基本構造」とは

https://en.wikipedia.org/wiki/Structured_programming Following the structured program theorem, all programs are seen as composed of control structures:

"Sequence";

ordered statements or subroutines executed in sequence.

"Selection";

one or a number of statements is executed depending on the state of the program. This is usually expressed with keywords such as if..then..else..endif.

"Iteration";

a statement or block is executed until the program reaches a certain state, or operations have been applied to every element of a collection. This is usually expressed with keywords such as while, repeat, for or do..until. Often it is recommended that each loop should only have one entry point (and in the original structural programming, also only one exit point, and a few languages enforce this).

"Recursion";

a statement is executed by repeatedly calling itself until termination conditions are met. While similar in practice to iterative loops, recursive loops may be more computationally efficient, and are implemented differently as a cascading stack.

(20)

漸化式を「より簡単に」書き換えてみる

+

=

1

0

n

i

i

n

n

A

whereS

n

A

n

S

n

S

=

=

+

=

+

)

(

;

0

)

0

(

,

)

(

)

(

)

1

(

問題を簡単にする

(21)

左フロー図(プログラム)を分類する・・

目的別の4つ文(命令パターン)に分類?

END L2 L1 START i = 0 S = 0 if ( i > n+1 ) then goto L2 S = S + i i = i + 1 goto L1 no yes S=0; i=0; /* 初期値*/ while (i <= n+1){ S=S+i; i=i+1; }

◼代入文

S=0, i=0

◼四則演算文

S=S+i, i=i+1

◼分岐文

goto L1

◼条件分岐文

if (i > n+1) then goto L2

どのような命令セットが必要か?

(22)

逐次処理(Sequence)について

• 順番に処理を実行する(上から下へ)

• プログラムが書かれている上から順に処理をし

ていくというプログラムの構造で、プログラムの最

も基本的な動きとなる。

• 右の記述では、

• S=0 i= 0

• S=S+i

i=i+1

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

「代入文」

「四則演算文」

などが

“逐次処理”

に分類

(23)

• 処理を繰り返し実行する

• 決まった回数や条件を満たすまで同じ処理を繰

り返すプログラム構造で、反復処理とも。

• 右の記述では、

• Goto L1

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

繰り返し(Loop/Iteration)について

「分岐文」

などが

“繰り返し”

に分類

(24)

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

• 条件分岐とは、特定の条件のときは

処理A

を、そ

れ以外のときは

処理B

を選択処理するプログラム

構造で、

条件式が導出した状態

に従い、次に実

行するサブプログラムを選択して分岐する。

• 右の記述では、

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

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

条件分岐(Conditional branch)について

処理A

処理B

「条件分岐文」

などが

“条件分岐”

に分類

(25)

情報リテラシを理解する(その6)

ここでは、次のようなプロセスで内容を可視化する。

① 簡単な「級数(数列の和)」を求めるプログラムを示し、

1. その構造の理解を目指す。 (①-1)

2. プログラムの基本3要素を紹介する。 (①-2)

② プログラムの基本3要素を処理(=プログラムの要素を実行)するための

「コンピュータの構造や動作」を把握してもらい、

1.

プログラム内蔵方式の理解を目指す。 (②-1)

2.

プログラム=命令系列+データ集合の原理を紹介する。(②-2)

③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、

解釈そして実行)できる形式に変換する過程を示し、

1.

(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)

2.

当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)

(26)

コンピュータの基本構造≒「

ノイマン型

」!?

1 章 コンピュータのモデル -電子情報通信学会知識ベース

http://www.ieice-hbkb.org/files/06/06gun_04hen_01.pdf

Hardware organization of a typical system. CPU: Central Processing Unit, ALU: Arithmetic/Logic Unit, PC: Program counter, USB: Universal Serial Bus.

(27)

制御装置

(Control Unit)

演算装置

(ALU+Register)

記憶装置

(Memory)

入力・出力装置

(I/O Unit)

CP

U

ノイマン型コンピュータの構造的特徴・・

5大要素

出力装置

入力装置

注目!

(28)

ノンマン型コンピュータの特徴:

プログラム=「命令系列」+「データ集合」

予め、記憶装置にプログラムがセットされていて、それを読出して、確かめながら、コン

ピュータは実行する。その速度が高速なので、様々な目的に利用できる。でも、いくつか疑

問が・・・

1)プログラムはどこに「セット」されているか?

2)どのように「プログラムを確かめるのか?」

3)プログラムを実行するとはどのようなことか?

4)何故,高速に実行できるのか?

5)コンピュータが実行できるプログラムとは(命令とは)どのようなものか?

6)プログラムはどのような順番で実行されるのか?

プログラム内蔵方式(stored programming)

(29)

ノイマン型コンピュータの構造 その動作について

1. 予めメモリにプログラムを格納

2. 制御装置がプログラムを1つづつ読出す・・

3. 制御装置で解釈(解読)・・

4. どのような命令かを判断し,演算装置などを動かす(制御)・・

5. プログラムが終了するまで,2~4を繰り返す

プログラム内蔵方式

Program

(30)

ノイマン型コンピュータの構造

~全体イメージ~

プログラムは命令系列

とデータ集合から構成

メモリに予め格納

ノイマン型

コンピュータ

命令(群)

データ(群)

制御

装置

演算

装置

記憶装置

(+

データ集合

命令系列

(31)

計算機で「プログラム」を処理するとは

a high-level C program

言語処理系:プリプロセッサ+コンパイラ+アセンブラ+リンカ

電卓とは異なり、コンピュータ

自身が自動的にプログラム

(の命令部分)を読み出し、解

釈して、実行(プログラムの

データ部分を演算処理)する

(32)

計算機が処理できるプログラムを構成する・・

• プログラムは「命令系列」と「データ集合」がら成り立つ・・ということ

のようだが、「命令系列」とは?「データ集合」とは?

• ざっくり言えば、「命令系列」とは、命令語の並び(実はこの並び方が

重要です)、一方、「データ集合」とは、系列を構成する「個々の命令

語」が操作対象とする「データ」の集まりを意味する。

• Give

me chocolate

.

• Be

ambitious

.

• Let

me alone

.

• Never pull off

what you can do

.

• 少し「ラフな説明」になりますが、上の4つの命令語をこの順番で実行

するように(明確に)指示することが「プログラム」であると考える。

命令語

= 命令(動詞)+目的語(補語)

命令の並び

=命令系列

(順番に意味

がある)

(33)

ノイマン型コンピュータとプログラムの関係

move a,GR0

add

b,GR0

move GR0,c

c=a+b;

コンパイル

(コンパイリング)

②・・・

①・・・

③・・・

機械語(アセンブリ言語)とプログラミング言語の関係

ハードウェアとソフトウェアとの深い?深い!!関係

コンパイラ+ローダなどのソフトウェア

との協調関係の理解が必要!

ローディング

人間の分かるプログラム

から

コンピュータの分か

るプログラム

へ(翻訳)

人間の分かる

プログラム

コンピュータの

分かるプログ

ラム

(34)

move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ メモリにプログラムが格納 命令系列 データ集合 プログラム

初期化データ

move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)

ノイマン型コンピュータの動作

No0(

初期

(35)

move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)

ノイマン型コンピュータの動作

No1

命令読出し

(36)

move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)

ノイマン型コンピュータの動作

No2

命令は「move a,GR0」だ!

(37)

move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)

ノイマン型コンピュータの動作

No3

命令は「move a,GR0」だ! 演算装置(のGR0)にa(=10)を設定

(38)

move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b: 20 c: (初期値なし)

ノイマン型コンピュータの動作

No4

命令読出し

(39)

命令系列 データ集合 プログラム move a,GR0 move GR0,c a:10 b: 20 c: (初期値なし)

ノイマン型コンピュータの動作

No5

命令は「add b,GR0」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ add b,GR0

(40)

命令系列 データ集合 プログラム move GR0,c a:10 b: 20 c: (初期値なし)

ノイマン型コンピュータの動作

No6

命令は「add b,GR0」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 演算装置(のGR0)にb(=20)を加算:結果は30 move a,GR0 add b,GR0

(41)

move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム add b,GR0 move GR0,c a:10 b: 20 c: (初期値なし)

ノイマン型コンピュータの動作

No7

命令読出し

move a,GR0

(42)

命令系列 データ集合 プログラム a:10 b: 20 c: (初期値なし)

ノイマン型コンピュータの動作

No8

命令は「move GR0, c」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ add b,GR0 move GR0,c move a,GR0

(43)

命令系列 データ集合 プログラム a:10 b: 20 c:

30

ノイマン型コンピュータの動作

No9

命令は「move GR0, c 」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ add b,GR0 move GR0,c move a,GR0 演算装置(のGR0)の値をcに設定

(44)

そもそも「

GR0

って何か?」

• ノイマン型コンピュータって「プログラム内蔵方式」と「5大要素」・・だとして、

ハードウェアとソフトウェアの関係もなんとなく分かるけど・・

• 一方、「c=a+b;」と 「 “move a,

GR0

” “add b,

GR0

” “move

GR0

, c” 」 との関

係で、急に「顔を出す」

GR0

って何か? (という質問があってびっくりしま

した・・そうだ、説明できていない!)

• (後で詳細な説明を行いますが)ここでは簡単に、GRとはGeneral Register:

CPU内などに複数個あって汎用の「データを蓄える・・具体的には、演算途

中のデータや演算結果データを一時的に保持する領域などとして使用さ

れる」高速記憶回路

http://wisdom.sakura.ne.jp/programming/asm/assembly3.html https://xtech.nikkei.com/it/article/COLUMN/20070404/267385/ https://ednjapan.com/edn/articles/1908/28/news026.html https://en.wikipedia.org/wiki/Processor_register

(45)

実行の順番は何で決まるか?

• どこかに順番を決める「番号付け」となる情報が存在することになる

• 「メモリは、情報を格納する箱の集合である」という概念を思い出して

ください

• どの箱にどのような情報が入っているかは各箱に番号付けを行うこ

とで、取り出しも容易になる。

メモリ

:「

番号付きの箱

」の集合

(46)

メモリ

:「

番号

(番地)

付きの箱

」の集合

情報

番地

情報

番地

move a,GR0

add

b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

(47)

• 番地の値の小さいものから大きいものへと順番にその「情報」を命

令として、読出し、解釈し、実行する!?

• 「現在、実行中の命令の格納された番地はいくらか」という状態を記

憶する「何か」が必要となる。

Program Counter

」という存在

メモリの番地+情報の関係

(48)

情報

番地

move a,GR0

add

b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

PC: 1

番地に対応する情報

(命令)が読み出される

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

(49)

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

情報

番地

move a,GR0

add

b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

PC: 2

番地に対応する情報

(命令)が読み出される

(50)

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

情報

番地

move a,GR0

add

b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

PC: 3

PCは名前の通り、

自動的にその値

をカウントアップ

番地に対応する情報

(命令)が読み出される

(51)

命令群とデータ群の境界を如何に区別するか?

• Program Counterによって命令の実行順番が識別できることになった

ので、命令として実行できる記憶領域(の番号)と、データを格納して

おく記憶領域(の番号)とを、プログラムを読み出し解釈して実行す

るまでに決めておけば良いことになる。

• 1つの解決策として、

次の番地からは命令ではありません

(あるいは

次はデータ群を格納している領域です

)と明記する「

特別な命令

を用意しておけば安心できる。(コンピュータは誤動作しない)

命令語の定義

:「

命令セットアーキテクチャ

」の

話題

(52)

• 命令として実行できる記憶領域(の番号)の最後・・データを格納し

ておく記憶領域(の番号)の前・・に、処理を終了させる「終了命令」

を配置することで、間違ってデータ部分を命令と思って実行する危

険性を回避できる。

halt

命令が必要!

• 実は、一般のプログラム中にはhalt命令を置くことは禁止されている。

何故か?一緒に考えてみましょう

halt 命令

」などのような命令=コンピュータ

の動作を規定、が必要となる

例えば、終了命令を考える

(53)

halt命令

」の挿入

情報

番地

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 (停止)

命令

系列

データ

集合

(54)

ここで

PCの値を変更

することができれば、

実行

の順番を変更

することができる

• PCは

カウンタ

であるが、

ある値に設定する命令を用意

すれば、

分岐を

可能

にする

• このような命令を分岐命令( = jump命令)と呼ぶ

jump メモリ番地

」 という命令の形式で

PC

メモリ番地

が設定される

ことが必要

• (仮に他の場合と同様PCがカウントアップしても)この

命令を実行後

PCの値が変更

され、

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

される

(55)

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

分岐命令

メモリの

1番地

に分岐する

換言すると、

この命令を

実行するとPCが1に設定

される

情報

番地

move a,GR0

add

b,GR0

a:10

b:20

c: (初期値なし)

jump 1

(56)

情報

番地

move a,GR0

add

b,GR0

a:10

b:20

c: (初期値なし)

PC: 1

番地に対応する情報

(命令)が読み出される

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

jump 1

(57)

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

情報

番地

move a,GR0

add

b,GR0

a:10

b:20

c: (初期値なし)

PC: 2

番地に対応する情報

(命令)が読み出される

jump 1

(58)

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

情報

番地

move a,GR0

add

b,GR0

a:10

b:20

c: (初期値なし)

PC: 3

PCは名前の通り、

自動的にその値

をカウントアップ

番地に対応する情報

(命令)が読み出される

jump 1

(59)

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

情報

番地

move a,GR0

add

b,GR0

a:10

b:20

c: (初期値なし)

jump 1

PC: 1

PCは名前の通り、

自動的にその値

をカウントアップ。

しかし、 jump

命令でPCの値

が変更される!

番地に対応する情

報(命令)の読出し

分岐命令は

PCの値

を強制的に設定

する

ことで,次に読み出

す命令の番地を変

更する

(60)

条件分岐命令とは何か?

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

• 繰り返し

などは

「無条件分岐」

となる

• 条件分岐

は,

ある条件が満足した時に分岐

する.そうでなければ分

岐しない(

次の命令を実行

PCがカウントアップするだけ

• 条件

とは ・・・

プログラム状態

で決定

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

(61)

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

• 条件分岐とは、特定の条件のときは

処理A

を、そ

れ以外のときは

処理B

を選択処理するプログラム

構造で、

条件式が導出した状態

に従い、次に実

行するサブプログラムを選択して分岐する。

• 右の記述では、

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

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

• 上で「

条件式

」とは” ( i > n + 1) ”を指し、値I, n+1

の大小比較によって、真偽が決定される(プログ

ラム状態の確定)

処理A

処理B

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

(62)

• 変数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)について

(63)

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)について

(64)

プログラム状態(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通り

(65)

比較条件

は6通り

条件分岐命令も6通り

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

a<b

jplt

um

On

ess

han

a<=b

jple

um

On

ess Than Or

qual To

a==b

jpeq

um

On

Eq

ual To

a!=b

jpne

um

On

ot

qual To

a>b

jpgt

um

On

reater

han

a>=b

jpge

um

On

reaterThan Or

qual To

照会する

aとbとの

比較条件

(66)

(事例紹介)

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

if (a<=b) then gotoL1

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

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

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

ということ

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

XX

番地)を使用する

但し、XXは

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

のいずれか

(67)

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

1)

変数aの値

をソロバン(演算装置の

GR0

に読出し

2)それから

変数bの値を減算して

3)その

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

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

と考えるべきなので・・

(事例紹介)

(68)

1)

変数aの値

をソロバン(演算装置の

GR0

に読出し

2)それから

変数bの値を減算して

3)その

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

L1番地へ分岐する

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

と考える

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

XX

番地)を使用する

但し、

XX

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

のいずれか

move a,GR0

sub

b,GR0

jp

xx

L1

次の命令

(事例紹介)

(69)

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

命令を使用する

「正」

「ゼロ」 「負」

(事例紹介)

(70)

move a,GR0

sub

b,GR0

jple L1

次の命令

a: 10

b: 20

L1:

分岐命令に

jple

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

情報

move 5,GR0

sub

6,GR0

jple

10

20

条件分岐命令

条件が満足すれば、

メモリの

4番地

に分

岐する

次の命令

番地

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

(71)

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

• ノイマン型コンピュータの動作の基本である「

マシンサイクル

」に基づ

いて動作を順番にトレースする

• 特に、

プログラムカンウンタ

PC

)と

条件コードレジスタ

Condition

Code Register

CCR

)の動きに着目する

• 今回は簡単に{

Nflag

Zflag

}でCCRを表現する

(72)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

初期化

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

初期化

初期化

(73)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

(74)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

(75)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令解読」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

命令解釈

move 5,GR0

(76)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令解読」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

命令解釈

move 5,GR0

(77)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

move 5,GR0

実行

データ読出し

(78)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 0

(±

NZflg:{-,-}

GR0:

move 5,GR0

実行

データ読出し

演算実行

NZflg:{00}

GR0: 10

(79)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:0で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

NZflg:{-,-}

GR0:

move 5,GR0

実行

データ読出し

NZflg:{00}

GR0: 10

演算実行

結果格納

(80)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

NZflg:{-,-}

GR0:

NZflg:{00}

GR0: 10

(81)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

NZflg:{-,-}

GR0:

NZflg:{00}

GR0: 10

(82)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令解読」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

命令解釈

NZflg:{-,-}

GR0:

NZflg:{00}

GR0: 10

sub

6,GR0

(83)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令解読」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

命令解釈

NZflg:{-,-}

GR0:

NZflg:{00}

GR0: 10

sub

6,GR0

(84)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

実行

データ読出し

NZflg:{-,-}

GR0:

NZflg:{00}

GR0: 10

sub

6,GR0

(85)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 1

(±

NZflg:{-,-}

GR0:

実行

データ読出し

演算実行

NZflg:{10}

GR0: -10

sub

6,GR0

(86)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:1で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

NZflg:{-,-}

GR0:

実行

データ読出し

NZflg:{10}

GR0: -10

演算実行

結果格納

sub

6,GR0

(87)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

(88)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

(89)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令解読」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

命令解釈

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

jple

(90)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令解読」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

命令解釈

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

jple

(91)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

jple

実行

データ読出し

(92)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

jple

実行

データ読出し

演算実行

(93)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 4

(±

実行

データ読出し

演算実行

結果格納

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

jple

条件分岐命令

により、PCの

値が設定され、

分岐が生じる

ことになる

通常、PCはカウントアップ

するが・・

(94)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:4で「命令読出し」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 4

(±

NZflg:{-,-}

GR0:

NZflg:{10}

GR0: -10

・・という手順で条件分岐

が生じる

(95)

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

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

例えば{NZ}={00}or{01}など場合,

jplt命令では・・・

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

例えば,jpge命令,jpeq命令などでは

条件が異なるので・・・

分岐は生じない

結果として,

次の命令を実行

する

(96)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 2

(±

NZflg:{-,-}

GR0:

NZflg:{

00

GR0: -10

jple

(97)

制御装置(∋ PC )、 演算装置(∋GR,N・Z-flags)

および 記憶装置の関係

PC:2で「命令実行」

情報

番地

move 5,GR0

sub

6,GR0

jple

10

20

次の命令

PC: 3

(±

NZflg:{-,-}

GR0:

NZflg:{

00

GR0: -10

jple

条件分岐命令の条件が

成立せず、PCの値が設

定されない・・分岐せず!

PCはカウントアップ・・

参照

関連したドキュメント

[Mag3] , Painlev´ e-type differential equations for the recurrence coefficients of semi- classical orthogonal polynomials, J. Zaslavsky , Asymptotic expansions of ratios of

The above result is to be comparedwith the well known fact that the category Cat( C ) of internal categories in a category with finite limits C , is equivalent to the category of

In this article we prove the following result: if two 2-dimensional 2-homogeneous rational vector fields commute, then either both vector fields can be explicitly integrated to

But in fact we can very quickly bound the axial elbows by the simple center-line method and so, in the vanilla algorithm, we will work only with upper bounds on the axial elbows..

While early experiments with algebraic multigrid solvers have shown promising results [2], herein we focus on a domain decomposition approach based on the finite element tearing

Using the special C- mount ring adapter, the lens can be directly attached to a CCD camera, enabling it to be used as a low cost image ob- servation lens and variable focus lens

Actually it can be seen that all the characterizations of A ≤ ∗ B listed in Theorem 2.1 have singular value analogies in the general case..

Connect the input (C IN ), output (C OUT ) and noise bypass capacitors (C noise ) as close as possible to the device pins.. The C noise capacitor is connected to high impedance BYP