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