計算機基礎 Ⅱ,Ⅲ (指導書 pp. 76 ~ 94 )
description
Transcript of 計算機基礎 Ⅱ,Ⅲ (指導書 pp. 76 ~ 94 )
計算機基礎Ⅱ ,Ⅲ (指導書 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
高級言語によるプログラム
機械語によるプログラム
アセンブリ言語によるプログラム
コンパイ
ラ
アセンブ
ラ
この実験の流れ
13
1. アセンブリ言語によるプログラミング2. 作成したプログラムのアセンブル ( 手作
業 )3. 実行 ( 動作の理解 )
機械語によるプログラム
アセンブリ言語によるプログラム
アセンブ
ラ
この実験で用いるハードウェア
14
KUE-CHIP2教育用の 8 ビットマイクロプロセッサ
≒ CPU
8 ビット= 1 バイト0 0 0 1 0 0 1 1
13h ←16 進数であることを示す 他にも 13H , 0x13 など
KUE-CHIP2 の構造 (p.77 ,図 1)
15
KUE-CHIP2 の各部: ALU
演算ユニット (Arithmetic and Logic Unit) 算術演算,論理演算,アドレスの計算を行う
16
KUE-CHIP2 の各部: ACC
アキュムレータ (accumulator) 演算に利用するレジスタ. 8 ビット 演算対象,演算結果を保持
17
KUE-CHIP2 の各部: FLAG
18
フラグレジスタ (flag register) 演算・シフト結果により変化. 4 ビット
- - - - CF VF NF ZF
桁上がりフラグ
桁あふれフラグ負フラグ
ゼロフラグ
KUE-CHIP2 の各部: PC
プログラムカウンタ (program counter) 次に実行する命令のメモリ上での
アドレスを保持. 8 ビット
19
KUE-CHIP2 の各部:内部メモリ
20
512 バイト.バイト単位の番地指定 プログラム領域: 0 ~ 255 番地 データ領域: 256 番地~ 511 番地
プログラム領域
データ領域
000
0FF
1FF
100
011000100
255256
511
~~
KUE-CHIP2 でのプログラミング
独自のアセンブリ言語で行う プログラムはメモリのプログラム領域に
置かれる ( プログラム内蔵方式 )
0 番地に置かれた命令から順番に実行される
21
KUE-CHIP2 のアセンブリ言語
22
命令の種類: p.80 表 1 を参照 命令仕様: p.91 ~ 94 付録 A を参照
機械語フォーマット: 1 バイトか 2 バイト p.79 図 4 を参照
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0アセンブラ
プログラム例 (p.84 ,リスト 2)
23
02hBA001000000000001104:
ACCRLL0111010003:
OUT0---000102:
ACC, 01hLD00010000001-011000:
オペランド命令データアドレス
「 01 」という値を ACC に格納するACC の内容を出力バッファ (OBUF) に出力するACC の内容を論理左回転し, ACC に入れる常に 02 番地へ戻るアセンブリ言語によるプログラム
機械語によるプログラム
アセンブルの方法 (1/4)
p.93 , A.2 命令セットを参照「 LD ACC,01h 」のアセンブル
24
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
10000000-1000110
A BA = 0:ACC
A = 1:IX
B = 000:ACC
B = 001:IX
B = 01-: 即値B = 100: 直接 (P)
B = 101: 直接 (D)
B = 110: 修飾 (P)
B = 111: 修飾 (D)
アセンブルの方法 (2/4)
p.93 , A.2 命令セットを参照「 OUT 」のアセンブル
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
---01000
アセンブルの方法 (3/4)
p.93 , A.2 命令セットを参照「 RLL ACC 」のアセンブル
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
11100010
A sA = 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 」のアセンブル
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
00001100
cc
01000000
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)
28
02hBA001000000000001104:
ACCRLL0111010003:
OUT0---000102:
ACC, 01hLD00010000001-011000:
オペランド命令データアドレス
「 - 」は 0 か 1 で置き換える ( どちらでもよい )
プログラム例 (p.84 ,リスト 3)
29
02hBA001000000000001104:
ACCRLL0111010003:
OUT0000000102:
ACC, 01hLD000100000010011000:
オペランド命令データアドレス
アセンブル完了
04:
03:
02:
00:01:
05:
プログラムの実行
第 2.5 節に沿って行う (p.82 ~ 86)
注意:実行前に RESET を押すこと
全員確認できたら次の説明へ( 次回はグループではなく 一人 1台ずつ行う )
30
今日の実験内容
プログラムがどう実行されているか理解課題 1課題 2 ADD 命令課題 2 ADC 命令課題 3A課題 3B課題 4課題 5
次回:課題 6 ( 応用プログラミング )31
各命令の動作 (p.79 , 2.4 節 )
1. Fetch :命令をメモリから 取ってくる2. Decode :取ってきた命令を解読する3. Execute :命令を実行する
32
「 D1 」を見たら「 80h 」だと思う( 変数宣言,初期化のようなもの )メモリD1 番地の内容をACC に格納する
実際に見てみる:リスト 1 (p.81)
33
アドレス データ ラベル 命令 オペランド
D1: EQU 80h
00: 64 80 LD ACC,[D1]
02: A2 01 SUB ACC,1
04: 0F HLT
END
80: 01
ACC の内容から 1 を引く引いた結果は ACC に蓄えられるプログラムを 停止するプログラムの実行を 停止する80 番地の内容を 01 とするアセンブル結果の 16 進表示
各命令実行前後の CPU の内部状態
指導書 p.81 表 2
34
命令の実行 PC ACC フラグ0000000
00000000
00000000
0
LD ADD,[D1]
00000010
00000001
00000000
SUB ACC,1
00000100
00000000
00000001
HLT
00000101
00000000
00000001
今日の実験内容
課題の説明に従って,プログラムを実行し, CPU の内部状態を表にまとめる課題 1課題 2 ADD 命令課題 2 ADC 命令課題 3A ( プログラムを作成 )課題 3B ( プログラムを作成 )課題 4課題 5
35
課題 3A :2バイトどうしの加算
36
1 0 0 1 0 0 0 00 0 0 0 0 1 0 0
1 0 0 0 0 0 1 00 0 0 0 1 0 0 0+
0 0 0 1 0 0 1 00 0 0 0 1 1 0 1
1 バイト = 8 ビット
1 番地0 番地
2 番地 3 番地
4 番地 5 番地
課題 3B :2バイトどうしの減算
37
0 0 0 1 0 0 0 00 0 0 0 0 1 0 0
1 0 0 0 0 0 1 00 0 0 0 1 0 0 0-
1 0 0 0 1 1 1 01 1 1 1 1 0 1 1
1 バイト = 8 ビット
1 番地0 番地
2 番地 3 番地
4 番地 5 番地
今日のまとめ
38
2 の補数表現 ( 負の数の表現法 )
8 ビットで数を表現する場合
-45 は ?
実際足すと ?
39
0 0 1 0 1 1 0 145
1 1 0 1 0 0 1 1-45
1 0 0 0 0 0 0 0 0
-45 の 8 ビットにおける 2 の補数表現
ADD 命令と ADC 命令の違い
ADD 命令:加算命令. CF を考慮しないADC 命令:加算命令. CF を考慮する
「 CF を考慮する」とは…演算結果によって, CF を変更するCF が 1 であるとき,加算結果に 1 を足す
実際の動作は「 CF を加算結果に足す」
40
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)次の計算のフラグ変化は ?
41
0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0+
0 0 0 1 0 0 1 0
CFVFNFZF
0000
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)次の計算のフラグ変化は ?
42
1 1 0 1 0 0 0 0
0 1 0 0 0 0 1 0+
0 0 0 1 0 0 1 0
CFVFNFZF
1000
1
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)次の計算のフラグ変化は ?
43
1 1 0 1 0 0 0 0
1 0 0 0 0 0 1 0+
0 1 0 1 0 0 1 0
CFVFNFZF
1100
1
桁上げフラグと桁あふれフラグ
桁上げ (Carry) 桁あふれ (Overflow)次の計算のフラグ変化は ?
44
0 1 0 1 0 0 0 0
0 1 0 0 0 0 1 0+
1 0 0 1 0 0 1 0
CFVFNFZF
0110
次回の内容
課題 6A :往復するフラッシ ャー課題 6B :積の計算
予習:必ずプログラムを作ってくること作ってこないと終わりませんグループではなく 一人ずつ行う
45
積の計算
46
0 1 0 1 0 0 1 0
1 0 0 0 1 0 1 0×
0 0 1 1 0 1 0 00 1 0 0 0 1 0 0
1 バイト = 8 ビット
1 番地
0 番地
2 番地 3 番地
フロー チャートの例
1 バイトの乗算
47
A
B
C
×
B を 1減らすB - 1 → B
C に A を足すC + A → C
初期化0 → C
終了HLT
終了判定B = 0 ?
Y
N繰り上がりも考えること
計算機基礎Ⅲ
48
今日の内容
課題 6A :往復するフラッシ ャー課題 6B :積の計算
終わった人から解散各人が 1つずつ行う
( グループで 1つではなく )各人は各課題ができたら確認を受けるこ
と
49
課題 6B の確認
次の計算が正しくできることを見せる
50
9 7
2 A×
1 8 C 6
E 4
3 C×
3 5 7 0
レポートについて
〆切:一週間以内 ( 次回の実験開始前 ) 厳守
提出場所: C2-503 ( 手渡し ) または C1-301
注意:完全なレポートを提出すること.複数人で相談してレポートを作成した場合は,その旨をレポート内で述べること.参考にした文献等も明記すること.
51
結果の整理1について
各課題で用いたプログラムも 掲載するそのトレース結果を 掲載するトレース結果の各行に対して,
なぜそのような結果が得られるのかを述べる
それを踏まえて各命令の動作をまとめる
52
結果の整理1 の例
LD 命令は 2 バイト命令なので PC の値は 2だけ増加する.
データ領域 D1 番地の内容が 01h なので, LD命令を実行した結果 ACC の内容は 01h となる
LD 命令でフラグレジスタの値は変化しない
53
命令の実行 PC ACC フラグ0000000
00000000
00000000
0
LD ADD,(D1)
00000010
00000001
00000000