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

計算機基礎ⅡⅢ pp. 76 - TUT

N/A
N/A
Protected

Academic year: 2024

シェア "計算機基礎ⅡⅢ pp. 76 - TUT"

Copied!
9
0
0

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

全文

(1)

計算機基礎Ⅱ , Ⅲ

(指導書pp. 7694

1

改訂:佐竹 純二

(作成:岡本 吉央)

コンピュータ:機械から見ると

論理回路

2

コンピュータ

コンピュータ:人間から見ると

ユーザ

入力

どのような仕組みで

3

コンピュータ 出力

どのような仕組みで 動いているのか?

コンピュータ・ハードウェア

入力装

記憶装置

4

出力装置 理装

コンピュータ・ソフトウェア

入力装

記憶装置

アプリ

5

出力装置 理装

ーショングラム テムプグラ

疑問

処理装置

(CPU)

はプログラム(≒ソフトウェア)を どのように解釈しているのか

?

6

高級言語による プログラム

機械語による プログラム

(2)

( 今のところの ) 回答

コンパイラ,アセンブラと呼ばれる プログラムを変換するプログラムを使う

7

高級言語による プログラム

機械語による プログラム アセンブリ言語に

よるプログラム コンパイ アセン

ことばの整理:機械語

CPU

が直接理解し実行できる言語のこと

プログラムは

0

1

の列から構成される

CPU

ごとに異なる

8

高級言語による プログラム

機械語による プログラム アセンブリ言語に

よるプログラム コンパイ アセン

ことばの整理:高級言語

人間が使いやすいプログラミング言語

C

C++

Java

Perl

など

CPU

ごとに異ならない

9

高級言語による プログラム

機械語による プログラム アセンブリ言語に

よるプログラム コンパイ アセン

ことばの整理:アセンブリ言語

機械語を人間にわかりやすくした言語

命令が機械語と

(

ほぼ

) 1

1

に対応

CPU

ごとに異なる

10

高級言語による プログラム

機械語による プログラム アセンブリ言語に

よるプログラム コンパイ アセン

ことばの整理:コンパイル

高級言語によるプログラムを アセンブリ言語によるプログラムに

(または機械語によるプログラムに)

翻訳すること

高級言語による アセンブリ言語に 機械語による コンパイ アセン

ことばの整理:アセンブル

アセンブリ言語によるプログラムを 機械語によるプログラムに

翻訳すること

高級言語による アセンブリ言語に 機械語による コンパイ アセン

(3)

この実験の流れ

1. アセンブリ言語によるプログラミング 2.作成したプログラムのアセンブル

(

手作業

)

3.実行

(

動作の理解

)

13

機械語による プログラム アセンブリ言語に

よるプログラム

アセン

この実験で用いるハードウェア

KUE-CHIP2

教育用の

8

ビットマイクロプロセッサ

≒CPU

14

8

ビット=

1

バイト

0 0 0 1 0 0 1 1

13h

16進数であることを示す 他にも13H0x13など

KUE-CHIP2 の構造

(p.77,図1)

15

KUE-CHIP2 の各部: ALU

演算ユニット(Arithmetic and Logic Unit)

算術演算,論理演算,アドレスの計算を行う

16

KUE-CHIP2 の各部: ACC

アキュムレータ(accumulator)

演算に利用するレジスタ.8ビット

演算対象,演算結果を保持

17

KUE-CHIP2 の各部: FLAG

フラグレジスタ(flag register)

演算・シフト結果により変化.4ビット

CF VF NF ZF

18

桁上がりフラグ 桁あふれフラグ

負フラグ ゼロフラグ

(4)

KUE-CHIP2 の各部: PC

プログラムカウンタ(program counter)

次に実行する命令のメモリ上での アドレスを保持.8ビット

19

KUE-CHIP2 の各部:内部メモリ

512バイト.バイト単位の番地指定

プログラム領域:0255番地

データ領域:256番地~511番地

20

プログラム 領域 データ

領域

000 0FF 1FF 100

01100010 0

255 256 511

KUE-CHIP2 でのプログラミング

独自のアセンブリ言語で行う

プログラムはメモリのプログラム領域に 置かれる(プログラム内蔵方式)

0番地に置かれた命令から順番に実行される

21

KUE-CHIP2 のアセンブリ言語

命令の種類:p.80 1を参照

命令仕様:p.9194 付録A を参照

機械語フォーマット:1バイトか2バイト

22

機械語フォ マット:1バイトか2バイト p.79 4を参照

プログラム例

(p.84,リスト2)

ACC RLL 0111

0100 03:

OUT 0---

0001 02:

ACC, 01h LD

0001 0000 001- 0110 00:

オペランド 命令

データ アドレス

0 0 0 0 0 0 0 1

02h BA 0010 0000 0000 0011 04:

01」という値をACCに格納する

ACCの内容を出力バッファ(OBUF)に出力する ACCの内容を論理左回転し,ACCに入れる 常に02番地へ戻る

アセンブリ言語による プログラム

機械語による プログラム

アセンブルの方法 (1/4)

p.93

A.2

命令セットを参照

「LD ACC,01h」のアセンブル

1 0 0 0 0 0 0 0 - 1 0 0 0 1 1 0

Rsm 0 1 0 0 A 1 s m × Rotate sm LD 0 1 1 0 A B LoaD ST 0 1 1 1 A B STore

SBC 1 0 0 0 A B SuB with Carry

A B

A = 0:ACC A = 1:IX

B = 000:ACC B = 001:IX B = 01-:即値 B = 100:直接 (P) B = 101:直接 (D)

(5)

アセンブルの方法 (2/4)

p.93

A.2

命令セットを参照

「OUT」のアセンブル

- - - 0 1 0 0 0

25

0 1 0 1 - - - - × OUT 0 0 0 1 0 - - - × OUTput IN 0 0 0 1 1 - - - × INput RCF 0 0 1 0 0 - - - × Reset CF

アセンブルの方法 (3/4)

p.93

A.2

命令セットを参照

「RLL ACC」のアセンブル

1 1 1 0 0 0 1 0

26

Rsm 0 1 0 0 A 1 s m × Rotate sm LD 0 1 1 0 A B LoaD ST 0 1 1 1 A B STore

SBC 1 0 0 0 A B SuB with Carry

A s

A = 0:ACC A = 1:IX

m

RA 0 0 Right Arithmetically LA 0 1 Left Arithmetically RL 1 0 Right Logically LL 1 1 Left Logically

アセンブルの方法 (4/4)

p.93

A.2

命令セットを参照

「BA 02h」のアセンブル

0 0 0 0 1 1 0

0 0 0 0 0 0 0 1 0

27

RCF 0 0 1 0 0 - - - × Reset CF SCF 0 0 1 0 1 - - - × Set CF Bcc 0 0 1 1 c c Branch cc Ssm 0 1 0 0 A 0 s m × Shift sm

c c

A 0 0 0 0 Always VF 1 0 0 0 on oVerFlow NZ 0 0 0 1 on Not Zero Z 1 0 0 1 on Zero

プログラム例

(p.84,リスト2)

ACC RLL 0111

0100 03:

OUT 0---

0001 02:

ACC, 01h LD

0001 0000 001- 0110 00:

オペランド 命令

データ アドレス

28

02h BA 0010 0000 0000 0011 04:

-」は01で置き換える(どちらでもよい)

プログラム例

(p.84,リスト3)

ACC RLL 0111

0100 03:

OUT 0000

0001 02:

ACC, 01h LD

0001 0000 0010 0110 00:

オペランド 命令

データ アドレス

03:

02:

00: 01:

05:

29

02h BA 0010 0000 0000 0011 04:

アセンブル完了

04: 05:

プログラムの実行

第

2.5

節に沿って行う

(p.82

86)

注意:

実行前に

RESET

を押すこと 実行前に

RESET

を押すこと

全員確認できたら次の説明へ

(次回はグループではなく一人1台ずつ行う)

30

(6)

今日の実験内容

プログラムがどう実行されているか理解

課題1

課題2 ADD命令

課題課題2 ADC2 ADC命令命令

課題3A

課題3B

課題4

課題5

次回:課題

6 (

応用プログラミング

)

31

各命令の動作 (p.79 , 2.4 節 )

1.

Fetch

:命令をメモリから取ってくる

2.

Decode

:取ってきた命令を解読する

3.

Execute

:命令を実行する

32

実際に見てみる:リスト 1

(p.81)

アドレス データ ラベル 命令 オペランド

D1: EQU 80h

00: 64 80 LD ACC,[D1]

02: A2 01 SUB ACC,1

04: 0F HLT

D1」を見たら「80h」だと思う (変数宣言,初期化のようなもの) メモリD1番地の内容を

ACCに格納する

33

04: 0F HLT

END

80: 01

ACCの内容から1を引く 引いた結果はACCに蓄えられる プログラムを停止する

プログラムの実行を停止する 80番地の内容を01とするアセンブル結果の16進表示

各命令実行前後の CPU の内部状態

命令の実行 PC ACC フラグ 00000000 00000000 00000000 LD ADD,[D1]

00000010 00000001 00000000

指導書p.81 2

34

00000010 00000001 00000000 SUB ACC,1

00000100 00000000 00000001 HLT

00000101 00000000 00000001

今日の実験内容

課題の説明に従って,プログラムを実行 し,

CPU

の内部状態を表にまとめる

課題1

課題2 ADD命令

課題2 ADD命令

課題2 ADC命令

課題3A (プログラムを作成)

課題3B (プログラムを作成)

課題4

課題 3A :2バイトどうしの加算

1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0

1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0

1番地 0番地

0 0 0 1 0 0 1 0 0 0 0 0 1 1 0 1

2番地 3番地

4番地 5番地

(7)

課題 3B :2バイトどうしの減算

0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0

1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0

1番地 0番地

37

1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1

1バイト =8ビット

2番地 3番地

4番地 5番地

今日のまとめ

38

2 の補数表現

(負の数の表現法)

8

ビットで数を表現する場合 0 0 1 0 1 1 0 1 45

-458ビットにおける2の補数表現

-45

?

実際足すと

?

39

1 1 0 1 0 0 1 1 -45

1 0 0 0 0 0 0 0 0 458ビットにおける2の補数表現

ADD 命令と ADC 命令の違い

ADD

命令:加算命令.

CF

を考慮しない

ADC

命令:加算命令.

CF

を考慮する

「CFを考慮する」とは

CFを考慮する」とは

演算結果によって,

CF

を変更する

CF

1

であるとき,加算結果に

1

を足す

実際の動作は「CFを加算結果に足す」

40

桁上げフラグと桁あふれフラグ

桁上げ

(Carry)

桁あふれ

(Overflow)

次の計算のフラグ変化は?

0 0 0 1 0 0 0 0

41

0 0 0 0 0 0 1 0

0 0 0 1 0 0 1 0

CFVF NFZF

00 00

桁上げフラグと桁あふれフラグ

桁上げ

(Carry)

桁あふれ

(Overflow)

次の計算のフラグ変化は?

1 1 0 1 0 0 0 0

42

0 1 0 0 0 0 1 0

0 0 0 1 0 0 1 0

CFVF NFZF

10 00 1

(8)

桁上げフラグと桁あふれフラグ

桁上げ

(Carry)

桁あふれ

(Overflow)

次の計算のフラグ変化は?

1 1 0 1 0 0 0 0

43

1 0 0 0 0 0 1 0

0 1 0 1 0 0 1 0

CFVF NFZF

11 00 1

桁上げフラグと桁あふれフラグ

桁上げ

(Carry)

桁あふれ

(Overflow)

次の計算のフラグ変化は?

0 1 0 1 0 0 0 0

44

0 1 0 0 0 0 1 0

1 0 0 1 0 0 1 0

CFVF NFZF

01 10

次回の内容

課題

6A

:往復するフラッシャー

課題

6B

:積の計算

予習:必ずプログラムを作ってくること

作ってこないと終わりません

グループではなく一人ずつ行う

45

積の計算

0 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0

×

0番地

46

0 0 1 1 0 1 0 0 0 1 0 0 0 1 0 0

1バイト =8ビット 1番地

2番地 3番地

フローチャートの例

1バイトの乗算

A B C

×

初期化 0C

終了 HLT 終了判定

B = 0 ? Y

Bを1減らす B - 1B CAを足す

C + AC B = 0 ? HLT N 繰り上がりも

考えること

計算機基礎Ⅲ

(9)

今日の内容

課題

6A

:往復するフラッシャー

課題

6B

:積の計算

終わった人から解散

各人が

1

つずつ行う

(

グループで

1

つではなく

)

各人は各課題ができたら確認を受けること

49

課題 6B の確認

次の計算が正しくできることを見せる

9 7 E 4

50

2 A

×

1 8 C 6

3 C

×

3 5 7 0

レポートについて

〆切:一週間以内

(

次回の実験開始前

)

厳守

提出場所:

C2-503 (

手渡し

)

または

C1-301

注意:

完全なレポ トを提出すること 完全なレポートを提出すること.

複数人で相談してレポートを作成した場合は,

その旨をレポート内で述べること.

参考にした文献等も明記すること.

51

結果の整理1について

各課題で用いたプログラムも掲載する

そのトレース結果を掲載する

トレース結果の各行に対して,

なぜそのような結果が得られるのかを なぜそのような結果が得られるのかを 述べる

それを踏まえて各命令の動作をまとめる

52

結果の整理1 の例

命令の実行 PC ACC フラグ 00000000 00000000 00000000 LD ADD,(D1)

00000010 00000001 00000000

LD命令は2バイト命令なのでPCの値は2だけ増 加する.

データ領域D1番地の内容が01hなので,LD命令 を実行した結果ACCの内容は01hとなる

LD命令でフラグレジスタの値は変化しない

53

00000010 00000001 00000000

参照

関連したドキュメント

Java は中間言語方式を取っている。 JDK では中間言語へのコンパイラが javac 、中間.. 言語のインタプ リタが

第 7 章 言語処理系 この章では COINS の計算機環境上での Java,C,C++,FORTRAN,MATLAB によるプログ

実際の CPU の動作を示す命令が機械語命令である。要するにこれは、CPU というハード

プログラミング言語は 1950

 プログラム言語処理系は,C, C++, Pascal, Basic, Fortran, などの 高級 言語で書かれ たプログラムテキストを,(1)CPU が実行可能な

第 7 章 言語処理系 この章では COINS の計算機環境上での Java,C,C++,FORTRAN,MATLAB

8 第 1 章 COMET II の概要とその位置付け 1.2 CASL II アセンブラ言語を学習する価値 さて、それでは、私たちが

  C言語は実行するためにコンパイラを必要とする言語   人間が理解可能なプログラム(ソースコード)を計算機 が理解可能なコードに変換する コンパイル プログラムの記述