Transcript Document

計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94)
改訂:佐竹
純二
(作成:岡本 吉央)
1
コンピュータ:機械から見ると
論理回路
コンピュータ
2
コンピュータ:人間から見ると
ユーザ
入力
どのような仕組みで動
いているのか?
出力
コンピュータ
3
コンピュータ・ハードウェア
入
力
装
置
出
力
装
置
記憶装置
処
理
装
置
4
コンピュータ・ソフトウェア
入
力
装
置
出
力
装
置
記憶装置
ア
プ
リ
ケ
ー
シ
ョ
ン
プ
ロ
グ
ラ
ム
シ
ス
テ
ム
プ
ロ
グ
ラ
ム
処
理
装
置
5
疑問

処理装置 (CPU) はプログラム(≒ソフトウェア)を
どのように解釈しているのか?
高級言語による
プログラム
機械語による
プログラム
6
(今のところの) 回答

コンパイラ,アセンブラと呼ばれる
プログラムを変換するプログラムを使う
コ
ン
パ
イ
ラ
高級言語による
プログラム
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
7
ことばの整理:機械語
CPUが直接理解し実行できる言語のこと
 プログラムは0と1の列から構成される
 CPUごとに異なる

コ
ン
パ
イ
ラ
高級言語による
プログラム
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
8
ことばの整理:高級言語
人間が使いやすいプログラミング言語
 C,C++,Java,Perlなど
 CPUごとに異ならない

コ
ン
パ
イ
ラ
高級言語による
プログラム
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
9
ことばの整理:アセンブリ言語
機械語を人間にわかりやすくした言語
 命令が機械語と (ほぼ) 1 対 1 に対応
 CPUごとに異なる

コ
ン
パ
イ
ラ
高級言語による
プログラム
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
10
ことばの整理:コンパイル

高級言語によるプログラムを
アセンブリ言語によるプログラムに
(または機械語によるプログラムに)
翻訳すること
コ
ン
パ
イ
ラ
高級言語による
プログラム
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
11
ことばの整理:アセンブル

アセンブリ言語によるプログラムを
機械語によるプログラムに
翻訳すること
コ
ン
パ
イ
ラ
高級言語による
プログラム
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
12
この実験の流れ
1. アセンブリ言語によるプログラミング
2. 作成したプログラムのアセンブル(手作業)
3. 実行(動作の理解)
ア
セ
ン
ブ
ラ
アセンブリ言語に
よるプログラム
機械語による
プログラム
13
この実験で用いるハードウェア
KUE-CHIP2
 教育用の8ビットマイクロプロセッサ
≒ CPU

8ビット=1バイト
0
0
0
1
0
0
1
1
13h ←16進数であることを示す
他にも13H,0x13など
14
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
KUE-CHIP2の各部:PC
プログラムカウンタ (program counter)
 次に実行する命令のメモリ上での
アドレスを保持.8ビット

19
KUE-CHIP2の各部:内部メモリ
512バイト.バイト単位の番地指定
 プログラム領域:0~255番地
 データ領域:256番地~511番地

511 1FF
~
256 100
255 0FF
~
0
データ
領域
プログラム
領域
000 01100010
20
KUE-CHIP2でのプログラミング

独自のアセンブリ言語で行う

プログラムはメモリのプログラム領域に
置かれる (プログラム内蔵方式)

0番地に置かれた命令から順番に実行される
21
KUE-CHIP2のアセンブリ言語
命令の種類:p.80 表1を参照
 命令仕様: p.91~94 付録A を参照


機械語フォーマット:1バイトか2バイト
p.79 図4を参照
22
プログラム例 (p.84,リスト2)
アドレス
データ
命令
00:
0110
001-
0000
02:
0001
0---
OUT
03:
0100
0111
RLL
04:
0011
0000
0000
0001 LD
0010 BA
オペランド
ACC, 01h
ACC
02h
「01」という値をACCに格納する
常に02番地へ戻る
ACCの内容を論理左回転し,ACCに入れる
ACCの内容を出力バッファ(OBUF)に出力する
機械語による
アセンブリ言語による
001
プログラム0 0 0 0 0 プログラム
アセンブラ
00000010
23
アセンブルの方法 (1/4)
p.93,A.2 命令セットを参照
 「LD ACC,01h」のアセンブル

0 1 1 0 0 0 1 - 0 0 0 0 0 0 0 1
A
Rsm A
0 =1 0:ACC
0 0
B
A
LD
A
0 =1 1:IX
1 0
A
ST
0
1
1
1
A
SBC 1
0
0
0
A
B = 000:ACC
1 sB =m 001:IX
× Rotate sm
BB = 01-:即値
○ LoaD
BB = 100:直接
◎ STore(P)
BB = 101:直接
○ SuB with
(D) Carry
B = 110:修飾 (P)
B = 111:修飾 (D)
24
アセンブルの方法 (2/4)
p.93,A.2 命令セットを参照
 「OUT」のアセンブル

0 0 0 1 0 - - 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
25
アセンブルの方法 (3/4)
p.93,A.2 命令セットを参照
 「RLL ACC」のアセンブル

0 1 0 0 0 1 1 1
A
Rsm A
0 =
1 0:ACC
0 0 00
RA
LD A
0 =
1 1:IX
1 0 01
LA
s m
ARight
1 sArithmetically
m × Rotate sm
ALeft Arithmetically
B
○ LoaD
ST
0 RL
1 1 1 10 ARight BLogically
◎ STore
SBC 1 LL
0 0 1 01 ALeft Logically
B
○ SuB with Carry
26
アセンブルの方法 (4/4)
p.93,A.2 命令セットを参照
 「BA 02h」のアセンブル

0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0
c c
- - × Reset CF
00 0- Always
- × Set CF
01 0- on- oVerFlow
RCF 0A 0 01 00
SCF 0VF 0 11 00
Bcc 0NZ 0 01 01 0 1c onc Not ◎
Branch cc
Zero
Ssm 0Z 1 10 00 0A 10 ons Zero
m × Shift sm
27
プログラム例 (p.84,リスト2)
アドレス
データ
命令
00:
0110
001-
0000
02:
0001
0---
OUT
03:
0100
0111
RLL
04:
0011
0000
0000
0001 LD
0010 BA
オペランド
ACC, 01h
ACC
02h
「-」は0か1で置き換える (どちらでもよい)
28
プログラム例 (p.84,リスト3)
アドレス
データ
命令
00:
0110
01:
0010 0000
02:
0001
0000
OUT
03:
0100
0111
RLL
04:
0011
05:
0000 0000
0001 LD
0010 BA
オペランド
ACC, 01h
ACC
02h
アセンブル完了
29
プログラムの実行

第2.5節に沿って行う (p.82~86)

注意:
実行前にRESETを押すこと

全員確認できたら次の説明へ
(次回はグループではなく一人1台ずつ行う)
30
今日の実験内容

プログラムがどう実行されているか理解
課題1
 課題2 ADD命令
 課題2 ADC命令
 課題3A
 課題3B
 課題4
 課題5


次回:課題6 (応用プログラミング)
31
各命令の動作 (p.79,2.4節)
1.
2.
3.
Fetch:命令をメモリから取ってくる
Decode:取ってきた命令を解読する
Execute:命令を実行する
32
実際に見てみる:リスト1
アドレス
データ
(p.81)
ラベル
命令
オペランド
D1:
EQU
80h
00:
64
80
LD
ACC,[D1]
02:
A2
01
SUB
ACC,1
04:
0F
HLT
END
80:
01
80番地の内容を01とする
「D1」を見たら「80h」だと思う
メモリD1番地の内容を
ACCの内容から1を引く
プログラムの実行を停止する
プログラムを停止する
アセンブル結果の16進表示
ACCに格納する
引いた結果はACCに蓄えられる
(変数宣言,初期化のようなもの)
33
各命令実行前後のCPUの内部状態
命令の実行
PC
ACC
フラグ
00000000 00000000 00000000
LD ADD,[D1]
00000010 00000001 00000000
SUB ACC,1
00000100 00000000 00000001
HLT
00000101 00000000 00000001

指導書 p.81 表2
34
今日の実験内容

課題の説明に従って,プログラムを実行
し,CPUの内部状態を表にまとめる
課題1
 課題2 ADD命令
 課題2 ADC命令
 課題3A (プログラムを作成)
 課題3B (プログラムを作成)
 課題4
 課題5

35
課題3A:2バイトどうしの加算
0番地
1番地
0 0 0 0 0 1 0 0
1 0 0 1 0 0 0 0
+ 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0
2番地
3番地
0 0 0 0 1 1 0 1
0 0 0 1 0 0 1 0
4番地
5番地
1バイト = 8ビット
36
課題3B:2バイトどうしの減算
0番地
1番地
0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
- 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0
2番地
3番地
1 1 1 1 1 0 1 1
1 0 0 0 1 1 1 0
4番地
5番地
1バイト = 8ビット
37
今日のまとめ
38
2の補数表現

8ビットで数を表現する場合
45

-45は?
0 0 1 0 1
1 0 1
-45の8ビットにおける2の補数表現
1
-45

(負の数の表現法)
1 0 1 0 0 1
1
実際足すと?
1 0 0 0 0 0 0 0 0
39
ADD命令とADC命令の違い
ADD命令:加算命令.CFを考慮しない
 ADC命令:加算命令.CFを考慮する

「CFを考慮する」とは…
 演算結果によって,CFを変更する
 CFが1であるとき,加算結果に1を足す

実際の動作は「CFを加算結果に足す」
40
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)
 次の計算のフラグ変化は?

0 0 0 1 0 0 0 0
+ 0 0 0 0 0 0 1 0
0 0 0 1 0 0 1 0
CF
VF
NF
ZF
0
0
0
0
41
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)
 次の計算のフラグ変化は?

1 1 0 1 0 0 0 0
+ 0 1 0 0 0 0 1 0
1
0 0 0 1 0 0 1 0
CF
VF
NF
ZF
1
0
0
0
42
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)
 次の計算のフラグ変化は?

1 1 0 1 0 0 0 0
+ 1 0 0 0 0 0 1 0
1
0 1 0 1 0 0 1 0
CF
VF
NF
ZF
1
1
0
0
43
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)
 次の計算のフラグ変化は?

0 1 0 1 0 0 0 0
+ 0 1 0 0 0 0 1 0
1 0 0 1 0 0 1 0
CF
VF
NF
ZF
0
1
1
0
44
次回の内容
課題6A:往復するフラッシャー
 課題6B:積の計算


予習:必ずプログラムを作ってくること
作ってこないと終わりません
 グループではなく一人ずつ行う

45
積の計算
0番地
0 1 0 1 0 0 1 0
× 1 0 0 0 1 0 1 0
1番地
0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0
2番地
3番地
1バイト = 8ビット
46
フローチャートの例

1バイトの乗算
A
×
B
C
初期化
0→C
終了判定
B=0?
Y
終了
HLT
N
繰り上がりも
考えること
CにAを足す
C+A→C
Bを1減らす
B-1→B
47
計算機基礎Ⅲ
48
今日の内容
課題6A:往復するフラッシャー
 課題6B:積の計算

終わった人から解散
 各人が1つずつ行う
(グループで1つではなく)
 各人は各課題ができたら確認を受けること

49
課題6Bの確認

次の計算が正しくできることを見せる
9 7
E 4
× 2 A
× 3 C
1 8 C 6
3 5 7 0
50
レポートについて
〆切:一週間以内 (次回の実験開始前) 厳守
 提出場所: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