計算機基礎Ⅱ , Ⅲ
(指導書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
高級言語による プログラム
機械語による プログラム アセンブリ言語に
よるプログラム コンパイラ アセンブラ
ことばの整理:コンパイル
高級言語によるプログラムを アセンブリ言語によるプログラムに
(または機械語によるプログラムに)
翻訳すること
高級言語による アセンブリ言語に 機械語による コンパイラ アセンブラ
ことばの整理:アセンブル
アセンブリ言語によるプログラムを 機械語によるプログラムに
翻訳すること
高級言語による アセンブリ言語に 機械語による コンパイラ アセンブラ
この実験の流れ
1. アセンブリ言語によるプログラミング 2.作成したプログラムのアセンブル
(
手作業)
3.実行(
動作の理解)
13
機械語による プログラム アセンブリ言語に
よるプログラム
アセンブラ
この実験で用いるハードウェア
KUE-CHIP2
教育用の
8
ビットマイクロプロセッサ≒CPU
14
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
フラグレジスタ(flag register)
演算・シフト結果により変化.4ビット
- - - - CF VF NF ZF
18
桁上がりフラグ 桁あふれフラグ
負フラグ ゼロフラグ
KUE-CHIP2 の各部: PC
プログラムカウンタ(program counter)
次に実行する命令のメモリ上での アドレスを保持.8ビット
19
KUE-CHIP2 の各部:内部メモリ
512バイト.バイト単位の番地指定
プログラム領域:0~255番地
データ領域:256番地~511番地
20
プログラム 領域 データ
領域
000 0FF 1FF 100
01100010 0
255 256 511
~~
KUE-CHIP2 でのプログラミング
独自のアセンブリ言語で行う
プログラムはメモリのプログラム領域に 置かれる(プログラム内蔵方式)
0番地に置かれた命令から順番に実行される
21
KUE-CHIP2 のアセンブリ言語
命令の種類:p.80 表1を参照
命令仕様:p.91~94 付録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)
アセンブルの方法 (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:
「-」は0か1で置き換える(どちらでもよい)
プログラム例
(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
今日の実験内容
プログラムがどう実行されているか理解
課題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番地
課題 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-45の8ビットにおける2の補数表現
-45
は?
実際足すと
?
39
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
を変更する
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
桁上げフラグと桁あふれフラグ
桁上げ
(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
×
初期化 0→C
終了 HLT 終了判定
B = 0 ? Y
Bを1減らす B - 1→B CにAを足す
C + A→C B = 0 ? HLT N 繰り上がりも
考えること
計算機基礎Ⅲ
今日の内容
課題
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