プログラミングⅠ(Programming I)

コンピュータアーキテクチャ
参考資料
コンピュータアーキテクチャ
1. この授業で勉強すること
1.1. 今までに勉強したこと
組み合わせ論理回路 … 加算器、比較器など
電子の
半導体
素子
振る舞い
論理素子
(入力のみによって結果が決まる)
(NAND
など)
(トランジ
スタなど)
順序論理回路 … FF, レジスタ、カウンタ,
パルス発生器など
(入力と状態によって結果が決まる)
電子デバイスで勉強
ディジタル回路で勉強
1.2. この授業で勉強すること
論理回路
コンピュータ
• コンピュータの動作原理(機械語)
• アセンブラ(アセンブリ言語)
• I/O(入出力)装置の制御
• 各自,自由なテーマで周辺機器を用いたプログラム作成
1.3. コンピュータアーキテクチャとは
コンピュータの構造や構成
ハードウェアとソフトウェア、コンピュータの設計思想や開発技術
コンピュータアーキテクチャにおけるトレードオフ
価格と高速性、価格とサイズ、拡張性とサイズ、汎用性と高速性
2. コンピュータの基本構成
データの流れ
入力装置
記憶装置
命令
出力装置
演算装置
制御信号の流れ
制御装置
1
コンピュータアーキテクチャ
3. ストアドプログラム方式
「あらかじめ情報処理の方式や順序を数値データに変換し、記憶装置に記憶させ、この命令デ
ータに従って時系列的に処理装置を稼動させる方式」
【例】3+4 → [20 番地]
記憶装置(メモリ)
アドレス
(番地)
0
1
2
3
4
5
99
3
4
20
2
7(3+4)
命令表(0~255)
コード
(機械語)
20
内容
(次の番地の内容)+(次の次の番地の内
99 容)の結果を次の次の次に書いてある番地
に格納
2 STOP
8bit(0~255)
4. マイコンの構成
4.1. CPU 8085A
C
P
U
演算
制御
記憶
(レジスタ)
アドレスバス(16 本) A0~A7, A8~A15
メモリ
データバス(8 本)
I/O装置
D0~D7
コントロールバス
• 8bit…データバスが 8 本
28、0~255 の数を表現可能
• アドレスバス…16 本、216=64K、64K 個の番地を指定可能
• 構成…
演算 ALU(算術論理装置)
制御 タイミング制御部、割り込み制御部、シリアル I/O 制御部
メモリの一部 レジスタ群
2
コンピュータアーキテクチャ
4.2. レジスタ群
CPU
データバス(8bit)
8bit
命令レジスタ
命令デコーダ
マシンサイクル
エンコーダ
アドレス
A レジスタ
F レジスタ
0
99
B
C
1
3
D
E
2
4
H
L
3
20
4
2
SP(スタックポインタ)
各種制御信号生成
(制御装置)
PC(プログラムカウンタ)
アドレスバス
(16bit)
16bit
5
メモリ
各部への制御信号
(1) 汎用レジスタ
CPU 8085A には A レジスタ、B レジスタ、C レジスタ、D レジスタ、E レジスタ、H レジス
タ、L レジスタの7つの汎用レジスタ(多目的に利用できるレジスタ)が内蔵されていま
す。これらの各レジスタはそれぞれ 8bit(1 バイト)の記憶容量があります。すなわち、
各レジスタは 8 個の F.F.(フリップフロップ)を並べたものです。
A レジスタは、アキュムレータとも呼ばれます。また B レジスタと C レジスタは、2つま
とめて 16bit のレジスタとして使用することもできます。B レジスタと C レジスタを2つ
まとめて 16bit のレジスタとして使用する場合、BC ペアレジスタと呼びます。同様に D レ
ジスタと E レジスタをまとめて 16bit の DE ペアレジスタとして使用できます。H レジスタ
と L レジスタもまとめて 16bit の HL ペアレジスタとして使用できます。
(2) F レジスタ
F レジスタは、8bit のレジスタです。演算結果が正、零、負、桁上がりなどに対応して、
各 bit の値が自動的に変化します。例えば、演算結果が零であれば、あるビットが1にな
ります。このビットを見れば、演算結果が零であるかどうかを1または0(旗をあげる/
あげない)で知ることができます。このため F レジスタはフラグ(旗を意味する)レジス
タと呼ばれます。
(3) 命令レジスタ
命令レジスタも 8bit のレジスタで、メモリ上に記憶されている命令データ(機械語コー
ド)を一時的に記憶するためのレジスタです。命令レジスタに記憶された機械語コードは
命令デコーダなどで各部への制御信号に変換されます(上図参照)
。
3
コンピュータアーキテクチャ
(4) PC(プログラムカウンタ)
プログラムカウンタ(PC)は、次に実行する命令が書かれているメモリの番地(アドレス)
を格納するためのレジスタです。
PC は起動時に0にリセットされるため、前ページの図のように、まず0がアドレスバス
を通じてメモリに番地として与えられます。つぎに0番地のデータ(99)がデータバスを通
じて命令レジスタに転送されます。この命令データは、命令デコーダ及び制御装置で各部
への制御信号(タイミングパルス)が生成され命令が実行されます。ここで PC の値は、次
の命令が書かれている番地になるまで(例では4つ)増えます。このような操作をプログ
ラムの終了命令(STOP 命令)があるまで繰り返します。
PC=0
起動
PC の内容がアドレスバスに出力
(PC)番地のメモリの内容がデータバスに出力
命令デコーダ、制御装置
(PC)番地のメモリが指定
命令レジスタ
各種タイミングパルス発生(命令実行)
(PC)←(PC)+α
(5) SP(スタックポインタ)
スタックポインタ(SP)は、割り込み処理やサブルーチンを終了したときに、実行すべき
番地が書かれている番地を格納するためのレジスタで、スタックの一番上の番地を記憶し
ています。
【例1】
1回のサブルーチンコール(SP の初期値が 500 の場合)
メイン
ルーチン
0 番地
サブ
ルーチン
100 番地
(a)
20 番
21 番
(b) リターン時
PC←[SP+1],[SP]
SP←SP+2
(b)
メモリ
(a) サブルーチンコール時
[SP-1],[SP-2]←21
SP←SP-2
PC←100
150 番地
498 番地
499
500 番地
メインルーチンでの
スタックの状態(空)
SP の値
(500)
21
500
サブルーチンでの
スタックの状態
4
SP の値
(498)
アドレスを
格納するに
は 2 バイト
必要
コンピュータアーキテクチャ
【例2】2重のサブルーチンコール(SP の初期値が 500 の場合)
メイン
ルーチン
0 番地
20 番
21 番
(a)
(d)
メモリ
500 番地
メインルーチンでの
スタックの状態(空)
498 番地
499
21
500
サブルーチン 1 での
スタックの状態
496 番地
497
498
499
130
21
500
サブ
ルーチン 1
100 番地
(b)
サブ
ルーチン 2
200 番地
129 番地
130 番地
150 番地
(c)
250 番地
SP の値
(500)
(a) サブルーチン 1 コール時
[SP-1],[SP-2]←21
SP←SP-2
PC←100
SP の値
(498)
(b) サブルーチン 2 コール時
[SP-1],[SP-2]←130
SP←SP-2
PC←200
アドレスを
格納するに
は 2 バイト
必要
SP の値
(496)
(c) サブルーチン 1 にリターン時
PC←[SP+1],[SP]
SP←SP+2
(d) メインルーチンにリターン時
PC←[SP+1],[SP]
SP←SP+2
サブルーチン 2 での
スタックの状態
5
コンピュータアーキテクチャ
4.3. 演算部
演 算 結 果
ALU
加算器
A レジスタ
8bit
AND
OR
T レジスタ
NOT
B
C
D
E
H
L
マルチ
プレクサ
フラグ
生成回路
EX-OR
制御信号
F レジスタ
CPU 8085A の場合、T レジスタ(一時レジスタ)に B,C,D,E,H,L などのレジスタの内容が転送
され、演算は A レジスタと T レジスタとの間で行われます。A レジスタと T レジスタの内容は
ALU(Arithmetic and Logical Unit, 演算論理ユニット)に入力され、ALU 内で演算が実行され
ます。ALU には加算器、AND 回路、OR 回路、NOT 回路、EX-OR 回路がそれぞれ 8bit 分内蔵され
ています。どの演算を実行するかは、命令データから生成された制御信号を ALU 内のマルチプ
レクサに与えることによって選択されます。
演算結果は A レジスタに格納されます。例えば A レジスタの初期値が0、B レジスタの初期
値が2の場合、A+B の加算命令を実行する度に A レジスタの内容は 2,4,6,…と結果が累算され
ていくため、A レジスタはアキュムレータ(accumulator,累算器)とも呼ばれています。また
減算なども実行できるように、A レジスタには補数機能、左右シフト機能などが備えられてい
ます。
一方、演算結果はフラグを生成する論理回路にも入力され、Fレジスタに演算結果に対応し
たフラグがセットされます。
4.4. 条件分岐
(1) フラグ
F レジスタ
S
Z
AC
P
CY
MSB
最上位
Z=1
CY=1
S=1
P=1
AC=1
…
…
…
…
…
LSB
最下位
演算結果が0
桁上げあり
MSB が1(2の補数では負)
1 が偶数個
4bit 目から 5bit 目に桁上げあり
6
Z=0
CY=0
S=0
P=0
…
…
…
…
演算結果が0でない
桁上げなし
MSB が0(2の補数では正)
1 が奇数個
コンピュータアーキテクチャ
(2) 条件判定
【例 1】if(A==B) goto L1; (もし A=B なら L1 番地にジャンプしたいとき)
(a) A-B を計算→フラグが変化(A=B なら演算結果が0になるため、Z=1 になる)
(b) Z=1 なら goto L1
PC←L1
【例2】if(条件) goto L1; (もし条件を満たせば L1 番地にジャンプしたいとき)
(a) A-B を計算→フラグが以下のように変化
符号なし
(0~255)
符号あり
(-128~
127)
条件
A = B
A ≧B
A < B
A ≧B
A < B
Z
1
CY
S
0
1
0
1
(b) 以上のフラグを用いて条件分岐を行う。たとえば、if(A<B)goto L1;の場合で A,B の
値を符号なし(unsigned)のときには、CY=1 なら L1 番地にジャンプする命令を実行す
ればよい。
【4bit 符号なしの場合のフラグの変化】
A = B の場合
A > B の場合 1 A > B の場合 2
A
9 1001
9 1001
9 1001
- B
- 9 + 0111
- 7 + 1001 - 1 + 1111
0 10000
2 10010
8 11000
CY=0
CY=0
CY=0
S=0
S=0
S=1
Z=1
Z=0
Z=0
A < B の場合
7 0111
- 9 + 0111
-2 1110
CY=1
S=1
Z=0
【4bit 符号あり(2の補数表現)の場合のフラグの変化】
A = B の場合
A > B の場合 1 A > B の場合 2
A < B の場合
A
6 0110
6 0110
6 0110
2 0010
- B
- 6 + 1010
- 2 + 1110 - (-1) + 0001
- 6 + 1010
0 10000
4 10100
7 0111
-4 1100
CY=0
CY=0
CY=1
CY=1
S=0
S=0
S=0
S=1
Z=1
Z=0
Z=0
Z=0
7
コンピュータアーキテクチャ
【4bit コード表(参考)
】
2 進数 10 進数(符号なし)10 進数(符号あり)
0000
0
0
0001
1
1
0010
2
2
0011
3
3
0100
4
4
0101
5
5
0110
6
6
0111
7
7
1000
8
-8
1001
9
-7
1010
10
-6
1011
11
-5
1100
12
-4
1101
13
-3
1110
14
-2
1111
15
-1
8
コンピュータアーキテクチャ
5. アセンブリ言語(Z80)
5.1. 命令形式
(1) 1バイト命令
例: A レジスタの内容を B レジスタにコピー
機械語コード ニーモニック
メモ
47H
LD B,A
B ←A
(2) 2バイト命令
例: C レジスタに 12H を代入
機械語コード ニーモニック
メモ
OEH 12H
LD C,12H
C ← 12H
(3) 3バイト命令
例: A レジスタの内容を 1234H 番地にコピー
機械語コード
ニーモニック
32H 34H 12H
LD (1234H),A
B1 B2 B3
A
F レジスタ
B
C
D
E
H
L
A
F レジスタ
B
C
D
E
H
L
メモ
(1234H) ← A
32H
オペレーションコード(オペコード)B1
34H 12H
オペランド B2 B3
(8085A や Z80 の場合、アドレスは下位アドレス上位アドレスの順に指定する)
CPU
データバス(8bit)
8bit
A
F レジスタ
0
B
C
1
D
E
H
L
SP(スタックポインタ)
PC(プログラムカウンタ)
アドレス
1234H
アドレスバス
(16bit)
メモリ
16bit
5.2. アセンブリ言語
アセンブリ言語 … 主として機械語と1対1に対応するニーモニックの集まり
アセンブラ … アセンブリ言語を機械語に変換するプログラム(コンパイラ)
9
12H
コンピュータアーキテクチャ
5.3. 命令の種類 (CPU Z80 の場合)
(1) データ転送命令1
r A
B
C
D
E
LD A, r
7F 78 79 7A 7B
LD B, r
47 40 41 42 43
LD C, r
4F 48 49 4A 4B
LD D, r
57 50 51 52 53
LD E, r
5F 58 59 5A 5B
LD H, r
67 60 61 62 63
LD L, r
6F 68 69 6A 6B
LD (HL), r
77 70 71 72 73
LD r, B2
3E 06 0E 16 1E
例1
ニーモニック
LD B,C
例2
例3
コメント
; B←C
H
7C
44
4C
54
5C
64
6C
74
26
L
7D
45
4D
55
5D
65
6D
75
2E
(HL)
7E
46
4E
56
5E
66
6E
36
メモ
AÅ r
BÅr
CÅr
DÅr
EÅr
HÅr
LÅr
HL Å r
r Å 1バイトの数値 B2
マシンコード
41H
; C←D
LD H,A
;
例4
;
68H
例5
LD B,12
; B ← 12
06H 0CH
例6
LD B,0CH
; B ← 0CH
06H 0CH
例7
LD D,32H
;
例8
LD H,12H
LD L,34H
LD (HL),A
;
;
;
;
H ← 12H
26H 12H
L ← 34H
2EH 34H
(HL) ← A
77H
結局、(1234H) ← A と同等
CPU
データバス(8bit)
8bit
A
F レジスタ
0
B
C
1
D
E
H (12H)
L (34H)
SP(スタックポインタ)
PC(プログラムカウンタ)
ニーモニック
アドレス
1234H
アドレスバス
(16bit)
コメント
メモリ
マシンコード
10
コンピュータアーキテクチャ
例9
LD H,12H
LD L,34H
LD C,(HL)
;
;
;
;
H ← 12H
26H 12H
L ← 34H
2EH 34H
C ← (HL)
4EH
即ち、C ← (1234H)、1234H 番地の内容を C レジスタにコピー
例 10
8100H 番地の内容を C レジスタにコピー
;
;
;
例 11
B レジスタの内容を 8200H 番地にコピー
;
;
;
(2) 演算命令
r A
ADD A, r
87
ADC A, r
8F
SUB r
97
SBC A, r
9F
B
80
88
90
98
C
81
89
91
99
L
85
8D
95
9D
(HL)
86
8E
96
9E
AND r
XOR r
OR r
CP r
INC r
DEC r
A0
A8
B0
B8
04
05
A1 A2 A3 A4 A5
A9 AA AB AC AD
B1 B2 B3 B4 B5
B9 BA BB BC BD
0C 14 1C 24 2C
0D 15 1D 25 2D
A6
AE
B6
BE
34
35
例1
A7
AF
B7
BF
3C
3D
ニーモニック
ADD A,B
D
82
8A
92
9A
E
83
8B
93
9B
H
84
8C
94
9C
コメント
; A ← A+ B
メモ
AÅA+ r
A Å A + r + CY
AÅA– r
A Å A – r - CY
A Å A AND r
A Å A Ex-OR r
A Å A OR r
A – r フラグのみ変化
rÅr+1
rÅr – 1
マシンコード
80H
演 算 結 果
ALU
加算器
A レジスタ
8bit
AND
OR
T レジスタ
NOT
B
C
D
E
H
L
ニーモニック
マルチプ
レクサ
フラグ生
成回路
EX-OR
制御信号
コメント
F レジスタ
マシンコード
11
コンピュータアーキテクチャ
例2
ADC A,C
F レジスタ
; A ← A + C + CY(キャリーフラグ)
S
Z
AC
P
MSB
35
+ 17
52
3+1+1(CY)=5
例3
SUB D
例4
SBC A,E
35
- 17
18
3-1-1(CY)=1
89H
CY
LSB
3 FF
+ 2 02
6 01
3+2+1(CY)=6
; A←A-D
H
; A ← A - E - CY
3 01
- 2 02
0 FF
3-2-1(CY)=0
H
例5
AND H
; A ← A AND H
H
例6
OR L
; A ← A OR L
H
例7
XOR B
; A←A ⊕ B
排他的論理和(EX-OR)
各ビットごとの論理演算
1100
1100
AND 1010
OR 1010
1000
1110
例8
H
1100
⊕ 1010
0110
比較命令(結果を保存しない.フラグのみ変化)
CP D
; A-D
if(
){ }
ここに使う
H
例9
INC E
; E ← E+1
H
例 10
DEC H
; H←H-1
H
12
コンピュータアーキテクチャ
例 11
ADD A, 23H
; A ← A + 23H
C6 23
例 12
SBC A, 0F0H
; A ← A - F0H - CY
例 13
CP 12
; A - 12(10 進)
Z80
ADD A, B2
ADC A, B2
SUB B2
SBC A, B2
コード
C6
CE
D6
DE
AND B2
XOR B2
OR B2
CP B2
E6
EE
F6
FE
メモ
A Å A + B2
A Å A + B2 + CY
A Å A - B2
A Å A - B2 - CY
A Å A AND B2
A Å A Ex-OR B2
A Å A OR B2
A - B2
フラグのみ変化
(3) ペアレジスタを用いた命令
例1
LD HL, 1234
; HL ← 1234(10 進)
例2
LD BC, 8000H
; BC ← 8000H
例3
ADD HL, BC
例4
例5
例6
r1r2 BC DE HL SP
メモ
LD r1r2, B3B2 01 11 21 31 r1r2 Å B3B2
ADD HL, r1r2
INC r1r2
09
03
19
13
29
23
39 HL Å HL + r1r2
33 r1r2 Å r1r2 + 1
DEC r1r2
0B
1B
2B
3B r1r2 Å r1r2 - 1
; HL ← HL + BC
; HL ← HL + DE
INC BC
; BC ← BC + 1
; HL ← HL - 1
例7
(1234H 番地) ← A
(方法1) LD BC, 1234H ; BC ← 1234H
LD (BC), A
; (BC) ← A
(方法2) LD DE, 1234H ; DE ← 1234H
LD (BC), A
; (DE) ← A
(方法3) LD HL, 1234H ; HL ← 1234H
LD (HL), A
; (HL) ← A
(方法4) LD (1234H), A ; (1234H) ← A
13
Z80
LD (BC), A
LD A, (BC)
LD (DE), A
LD A, (DE)
LD (B3B2), A
LD A, (B3B2)
コード
02
0A
12
1A
32
3A
メモ
(BC) Å A
A Å (BC)
(DE) Å A
A Å (DE)
(B3B2)Å A
A Å (B3B2)
コンピュータアーキテクチャ
例8
A ← (1234H 番地)
(方法1)
(方法2)
(方法3)
(方法4)
例9
例 10
LD (1234H), HL
; (1234H) ← L
; (1235H) ← H
LD HL, (1234H)
; L ← (1234H)
; H ← (1235H)
Z80
LD (B3B2), HL
LD HL, (B3B2)
EX (SP), HL
EX DE, HL
JP (HL)
LD SP,HL
例 11
EX (SP), HL
; (SP) ←→ L 値の交換(入れ替え)
; (SP+1) ←→ H
例 12
JP (HL)
コード
メモ
22
(B3B2)Å L
(B3B2+1)Å H
2A
L Å (B3B2)
H Å (B3B2+1)
E3
(SP)
L
(SP+1) H
EB
DE
HL
E9
PC Å HL
F9
SP Å HL
; PC ← HL HL 番地にジャンプ
(4) ジャンプ命令
例1
例2
JP 1234H
C3 34 12
; 1234H 番地にジャンプ
JP
JP
JP
JP
JP
JP
JP
JP
JP
Z80
B3B2
Z, B3B2
NZ, B3B2
C, B3B2
NC, B3B2
PE, B3B2
PO, B3B2
M, B3B2
P, B3B2
コード
C3
CA
C2
DA
D2
EA
E2
FA
F2
条件付きジャンプ(分岐命令)
JP 条件, 1234H ; 条件を満たせば 1234H 番地に
ジャンプ
条件:Z
Z フラグ=1
直前の演算結果が0なら
NZ
Z フラグ=0
直前の演算結果が0でない
C
CY フラグ=1
例えば直前の演算結果が負
(符号なし引き算の場合)
NC
CY フラグ=0
例えば直前の演算結果が正または0
(符号なし引き算の場合)
M
S フラグ=1
例えば直前の演算結果が負(2の補数引き算の場合)
P
S フラグ=0
例えば直前の演算結果が正または0
(2の補数引き算の場合)
PE
パリティフラグ=1
直前の演算結果の1の数が偶数個
PO
パリティフラグ=0
直前の演算結果の1の数が奇数個
14
コンピュータアーキテクチャ
(5) コール命令、リターン命令
コール命令
Z80
コード
CALL B3B2
CD
CALL Z, B3B2
CC
CALL NZ, B3B2
C4
CALL C, B3B2
DC
CALL NC, B3B2
D4
CALL PE, B3B2
EC
CALL PO, B3B2
E4
CALL M, B3B2
FC
CALL P, B3B2
F4
例1
メイン
ルーチン
0 番地
サブ
ルーチン
100H 番地
(a)
20 番地
21 番地
(b)
150H 番地
メモリ
(a) サブルーチンコール時
CALL 100H
CD 00 01
RET
RET
RET
RET
RET
RET
RET
RET
RET
(b) リターン時
RET
C9
例2
条件付きコール命令
CALL 条件, 1234H
; 条件を満たせば 1234H 番地に
サブルーチンコール
条件:Z
NZ
C
NC
M
P
PE
PO
例2
リターン命令
Z80
コード
C9
Z
C8
NZ
C0
C
D8
NC
D0
PE
E8
PO
E0
M
F8
P
F0
フラグレジスタ
S
MSB
Z フラグ=1
Z フラグ=0
CY フラグ=1
Z
0
AC 0
P
1
CY
LSB
直前の演算結果が0なら
直前の演算結果が0でない
例えば直前の演算結果が負
(符号なし引き算の場合)
CY フラグ=0
例えば直前の演算結果が正または0
(符号なし引き算の場合)
S フラグ=1
例えば直前の演算結果が負(2の補数引き算の場合)
S フラグ=0
例えば直前の演算結果が正または0
(2の補数引き算の場合)
パリティフラグ=1
直前の演算結果の1の数が偶数個
パリティフラグ=0
直前の演算結果の1の数が奇数個
条件付きリターン命令
RET 条件 ; 条件を満たせばリターン
15
コンピュータアーキテクチャ
5.4. プログラム作成例
1+2+…+20を求めて結果を SUM 番地(9000H 番地)に格納する。
(1) 高級言語(C言語)の場合
#include <stdio.h>
void
main(void)
{
int
A, B;
A = 0;
for(B = 20; B > 0; B - -){
A = A + B;
}
}
(2) まず、全体の処理概要を段階的に箇条書きにしてみる
初期化
1. A を0に初期化
2. B に20を代入
1+2+…+20を求める 3. A に A+B を代入
4. B を1つ減らす
5. B が0になるまで 3, 4 を繰り返す
6. SUM 番地に A をコピー
結果を格納
(3) フローチャートを作成
start
A←0
B←20
L1
A←A+B
B←B-1
Y
B≠0
(SUM)←A
STOP
16
コンピュータアーキテクチャ
(4) コメントを作成
アドレス マシン語
ニーモニック
; コメント
;A ← 0
; B ← 20
;A ← A+ B
; B ← B-1
; if(B≠0) goto L1
; if(Z フラグ=0) goto L1
; (SUM) ← A
; stop
L1:
SUM:
; SUM 番地(9000H 番地)に0を入
; れておく
(5) コメントに従ってニーモニックを書く
アドレス マシン語
ニーモニック
ORG 8000H
LD A, 0
LD B, 20
L1:
ADD A, B
DEC B
JP NZ, L1
; コメント
; 8000H 番地からプログラムを記述
;A ← 0
; B ← 20
;A ← A+ B
; B ← B-1
; if(B≠0) goto L1
; if(Z フラグ=0) goto L1
LD (SUM), A ; (SUM) ← A
HALT
; stop
SUM:
ORG 9000H
DB 0
END
; SUM 番地(9000H 番地)に0を入
; れておく
(6) ニーモニックをマシンコードを変換(不明なアドレスは空白にしておく)
アドレス マシン語
ニーモニック
; コメント
ORG 8000H ; 8000H 番地からプログラムを記述
LD A, 0
;A ← 0
3E 00
06 14
LD B, 20
; B ← 20
80
L1:
ADD A, B
;A ← A+ B
05
DEC B
; B ← B-1
JP NZ, L1
; if(B≠0) goto L1
C2
; if(Z フラグ=0) goto L1
32 00 90
LD (SUM), A ; (SUM) ← A
76
HALT
; stop
00
SUM:
ORG 9000H
DB 0
END
17
; SUM 番地(9000H 番地)に0を入
; れておく
コンピュータアーキテクチャ
(7) アドレスを記入する
アドレス マシン語
8000H
8002H
8004H
8005H
8006H
3E 00
06 14
80
05
C2
8009H
800CH
32 00 90
76
9000H
00
L1:
SUM:
; コメント
; 8000H 番地からプログラムを記述
;A ← 0
; B ← 20
;A ← A+ B
; B ← B-1
; if(B≠0) goto L1
; if(Z フラグ=0) goto L1
LD (SUM), A ; (SUM) ← A
HALT
; stop
ニーモニック
ORG 8000H
LD A, 0
LD B, 20
ADD A, B
DEC B
JP NZ, L1
ORG 9000H
DB 0
END
; SUM 番地(9000H 番地)に0を入
; れておく
(8) マシン語の空白のアドレスを埋めて、完成
アドレス マシン語
ニーモニック
ORG 8000H
LD A, 0
8000H
3E 00
8002H
06 14
LD B, 20
8004H
80
L1:
ADD A, B
DEC B
8005H
05
8006H
C2 04 80
JP NZ, L1
8009H
800CH
32 00 90
76
9000H
00
; コメント
; 8000H 番地からプログラムを記述
;A ← 0
; B ← 20
;A ← A+ B
; B ← B-1
; if(B≠0) goto L1
; if(Z フラグ=0) goto L1
LD (SUM), A ; (SUM) ← A
HALT
; stop
SUM:
ORG 9000H
DB 0
END
; SUM 番地(9000H 番地)に0を入
; れておく
(9) 説明書に従って、マシンコードをメモリに格納
(10) 実行して、9000H の内容が1から20までの和になっているか確認
18
コンピュータアーキテクチャ
(11) 1から3までの和を求めるプログラムに変更してトレース実行してみる
プログラムで使用しているレジスタ、フラグ、メモリ内容を順次記録する。
アドレス マシンコード
ニーモニック
初期状態
8000
8002
8004
8005
8006
8004
8005
8006
8004
8005
8006
8009
800C
3E
06
80
05
C2
80
05
C2
80
05
C2
32
76
00
03
04 80
04 80
04 80
00 90
LD A, 0 ; A ← 0
LD B, 3 ; B ← 3
L1: ADD A, B ; A ← A + B
DEC B ; B ← B-1
JP NZ, L1 ; if(B≠0) goto L1
L1: ADD A, B ; A ← A + B
DEC B ; B ← B-1
JP NZ, L1 ; if(B≠0) goto L1
L1: ADD A, B ; A ← A + B
DEC B ; B ← B-1
JP NZ, L1 ; if(B≠0) goto L1
LD (SUM), A ; (SUM) ← A
HALT
; stop
19
A
B
Z
9000H
番地
00
00
00
03
03
03
05
05
05
06
06
06
06
06
00
00
03
03
02
02
02
01
01
01
00
00
00
00
0
0
0
0
0
0
0
0
0
0
1
1
1
1
00
00
00
00
00
00
00
00
00
00
00
00
06
06
PC
8000
8002
8004
8005
8006
8004
8005
8006
8004
8005
8006
8009
800C
コンピュータアーキテクチャ
5.5. 条件分岐(if 文)
(1) C言語の場合
Yes
条件式
処理1
if (条件式) {
No
処理1
処理2
}
else {
処理2
}
(2) 条件とフラグ
A レジスタの内容とrレジスタの内容を比較する場合
A - r を計算 CP r
→フラグが以下のように変化
符号なし
(0~255)
符号あり
(-128~127)
条件
A = B
A != B
A ≧B
A < B
A ≧B
A < B
Z
1
0
CY
S
ニーモニック
JP Z, PROC1
JP NZ, PROC1
JP NC, PROC1
JP C, PROC1
JP P, PROC1
JP M, PROC1
0
1
0
1
(3) アセンブラによる if 文の実現(方法1)
if (A = = B) {
CP B
; A-B
JP Z, PROC1 ; if(A != B) {(Z フラグが1ならPROC1 にジャンプ)
処理1
;
処理2
処理2
}
else {
JP ENDIF
;}
PROC1:
; else {
処理2
;
処理1
処理1
}
ENDIF:
;}
(4) アセンブラによる if 文の実現(方法 2)
if (A = = B) {
CP B
; A-B
JP NZ, PROC2 ; if(A = = B) {(Z フラグが0 ならPROC2 にジャンプ)
処理1
;
処理1
処理1
}
else {
JP ENDIF
;}
PROC2:
; else {
処理2
;
処理2
処理2
}
ENDIF:
;}
20
コンピュータアーキテクチャ
(5) 練習問題
D1 番地(8100H)の内容がD2番地(8101H)の内容より小さければ D3 番地(8
102H)番地に1を、小さくなければ0を代入するプログラムを作成し、トレース実行によ
って各レジスタ等の値を調べ、動作を確認せよ。なお、D1,D2 番地には符号ありの整数が入っ
ているものとする。
5.6. 指定回数ループ
(1) 100回ループ
D←100
L1
処理
D←D-1
Y
D≠0
N
(2) 練習問題
XX(8100H 番地)から始まる100 個のデータをYY(8200H 番地)以降にコピーするプログラムを
作成せよ。
start
HL←XX(コピー元)
BC←YY(コピー先)
D←100
アドレス
XX(8100H)
8101H
¦
8163H
L1
A ← (HL)
(BC) ← A
YY(8200H)
HL←HL+1
BC←BC+1
8201H
¦
8263H
D←D-1
Y
コピー
メモリ
D≠0
N
STOP
21
コンピュータアーキテクチャ
5.7. for 文(繰り返し処理 2)P.53
(1) C 言語の場合
for (初期設定; 条件; 増分) {
初期設定
処理
}
条件
No
Yes
処理
増分
(2) アセンブラによる for 文の実現
初期設定
F:
条件を満たしてなければENDF にジャンプ
(演算、フラグ変化、条件付きジャンプ)
処理
増分
JP F
ENDF:
(3) 練習問題
1+3+…+19 を計算し、結果を 8100H に格納するプログラムを作成せよ。
22
コンピュータアーキテクチャ
5.8. while 文
(1) 書式
while (条件式) {
条件式
No
処理
}
Yes
処理
(2) アセンブラによる while 文の実現
W:
条件を満たしてなければENDW にジャンプ
(演算、フラグ変化、条件付きジャンプ)
処理
JP W
ENDW
5.9. 練習問題
DATA(8200H)番地以降のデータの正または0の数を POS(8100H)番地に、負の数を
NEG(8101H)番地に格納する。ただし、80H はデータの終了を意味するものとする。
23
コンピュータアーキテクチャ
(ヒント)
DATA(8200H)番地以降のデータの正または0の数を POS(8100H)番地に、負の数を
NEG(8101H)番地に格納する。ただし、80H はデータの終了を意味するものとする。
start
アドレス
BC←0
B…正の数、C…負の数
HL←DATA
POS(8100H)
3
NEG(8101H)
2
¦
DATA(8200H)
W
A ← (HL)
A - 80H
Y
Z=1
N
(POS)←B
(NEG)←C
正負の集計
HL←HL+1
STOP
正負の集計
A← A AND A
N
A< 0
Y
C ++
B ++
return
24
03H
正
0FEH
負
0FFH
負
23H
正
34H
正
80H
データの終了
¦
メモリ
コンピュータアーキテクチャ
5.10. bit 演算
(1) bit の取り出し
下から3bit 目と4bit 目を取り出す。
x ⋅1 = x
1100 1010 (元データ)
AND 0000 1100
0000 1000
x⋅0 = 0
(2) bit のセット
下から2bit 目、3bit 目、4bit 目を1にセットする。
x +1 = 1
1100 1010 (元データ)
x+0= x
OR 0000 1110
1100 1110
(3) bit のリセット
上位4bit を0にリセットする。
AND
x⋅0 = 0
1100 1010 (元データ)
0000 1111
0000 1010
x ⋅1 = x
(4) bit の反転
下位4bit を反転する。
EX-OR
x⊕0 = x
1100 1010 (元データ)
0000 1111
1100 0101
x ⊕1 = x
b
0
1
0
1
a
0
0
1
1
a⊕b
0
1
1
0
(例題)8100H 番地の下位 4bit と 8101H 番地の下位 4bit が一致すれば 8102 番地に1を、
一致しなければ0を格納するプログラムを作成せよ。
25
コンピュータアーキテクチャ
5.11. 回転シフト命令
(1) RLCA
A レジスタ
CY
1
0
1
1
0
0
0
0
0
1
0
0
0
0
0
RLCA
CY
1
0
0
1
1
0
0
(2) RRCA
A レジスタ
CY
1
0
1
1
RRCA
CY
0
0
0
1
0
1
1
0
(3) RLA
CY
A レジスタ
(4) RRA
CY
A レジスタ
(5) シフト演算を用いた掛け算
8100H 番地(AP 番地)の内容と 8101H 番地(AQ 番地)の内容を掛け算し、その結果を
8102H, 8103H 番地(AR,AR+1 番地)に格納するプログラムを作成せよ。
26
コンピュータアーキテクチャ
【ヒント】(AP 番地)×(AQ 番地) → (AR 番地)(AR+1 番地)
8 bit
8 bit
16 bit
0111 (7)
× 1011 (11)
0111
0111
0
0111
1001101
DE ← (AP 番地)
A ← (AQ 番地)
HL ← 0,
HL ← HL + DE
DE 左 1bit シフト, HL ← HL + DE
DE 左 1bit シフト
DE 左 1bit シフト, HL ← HL + DE
(AR 番地)(AR+1 番地) ← HL
start
(1)
A の LSB を CY に入れる
D←0
E ← (AP 番地)
A ← (AQ 番地)
HL ← 0
CY→A→
(2)
Y
LOOP
HL ← HL + DE
SKIP
CY ← 0
A=0 ?
Y
CY=1 ?
N
N
(3)
DE 左1bit シフト
(4)
(AR 番地)(AR+1 番地)
← HL
stop
CY
(1)
(2)
(3)
(4)
(2)
(3)
(4)
(2)
(3)
(4)
(2)
(3)
(4)
1
1
1
1
0
0
1
1
A
1011
101
101
101
10
10
10
1
1
1
0
0
0
DE
0111
0111
0111
01110
01110
01110
011100
011100
011100
0111000
0111000
0111000
01110000
HL
0
0
0111
0111
0111
10101
10101
10101
10101
10101
10101
1001101
1001101
27
CY ← A の LSB
HL ← HL + DE
DE 左 1bit シフト
CY ← A の LSB
HL ← HL + DE
DE 左 1bit シフト
CY ← A の LSB
DE 左 1bit シフト
CY ← A の LSB
HL ← HL + DE
DE 左 1bit シフト
DE 左1bit シフト
HL ←→ DE
HL ← HL+HL
HL ←→ DE
return
コンピュータアーキテクチャ
5.12. サブルーチン
・プログラムがわかりやすくなる。
・同一処理を繰り返し使うとき、メモリー効率が良くなる。
【例1】(HL)←B+C
; メインルーチン
ORG 8000H
8000H
LD B,1
8002H
LD C,2
8004H
LD HL, 8100H
8007H
CALL ADD_BC
800AH
HALT
; B←1
; C←2
; HL←8100H
; サブルーチン (HL)←B+C
ADD_BC:
800BH
LD A,B
; A←B
ADD A,C
; A←A+C
LD (HL),A
; (HL)←A
RET
メイン
サブ
ルーチン
ルーチン
8000H 番地
800BH 番地
(a)
8007H 番地
800AH 番地
(b)
(b) リターン時
RET
PC←(SP+1),(SP)
SP←SP+2
メモリ
(1) 初期状態
(3) RET 後
8350H 番
メインルーチンでの
スタックの状態(空)
(a) サブルーチンコール時
CALL 800BH
PC←PC+3
(SP-1),(SP-2)←PC
SP←SP-2
PC←800BH
(2) CALL 後
SP の値
8350H
834EH 番
0AH
834FH
80H
8350H
サブルーチンでの
スタックの状態
28
SP の値
834EH
アドレスを
格納するに
は 2 バイト
必要
コンピュータアーキテクチャ
【例2】かけ算サブルーチン HL←E×A
MLT:
PUSH AF ; AF をスタックに退避
PUSH DE ; DE をスタックに退避
かけ算
; この部分で AF, DE の内容が変化してもサブルーチン終了後の
; AF, DE の内容は元の値に戻る
POP DE ; スタックに保存されている内容を DE に戻す
POP AF ; スタックに保存されている内容を AF に戻す
RET
(1) 初期状態
(7) RET 後
(2) CALL 後
(6) POP AF 後
0DH
834EH 番
834FH
8350H 番
スタックの状態(空)
SP の値
8350H
(3) PUSH AF 後
(5) POP DE 後
80H
メインルーチンへ戻
8350H
る際のアドレス
(4) PUSH DE 後
834AH 番
(E)
834BH
(D)
834CH
(F)
834DH
(A)
834CH 番
(F)
834DH
(A)
834EH
0DH
834EH
0DH
834FH
80H
834FH
80H
8350H
SP の値
834EH
SP の値
834CH
8350H
29
SP の値
834AH
コンピュータアーキテクチャ
6. メモリとの接続
6.1. CPU 8085Aの制御入出力信号
【制御入力信号】
RESET IN (36 番ピン)
…0を入力すると、CPU をリセットして、0番地から命令
を実行
(上にバーが付いているときは、負論理なので0を入力する
と RESET される。
)
【制御出力信号】
IO / M (34 番ピン) …入出力装置(I/O)とメモリの区別をする
1が出力されたときは、IO に対する読み書き
0が出力されたときは、メモリーに対する読み書き
RD(32 番ピン)
…0が出力されたとき、CPU が IO あるいはメモリからデータ
を読み込みたいので、データを出力してほしいことを意味
する
WR(31 番ピン)
…0が出力されたとき、CPU が IO あるいはメモリにデータを
出力したので、データを読み込んでほしいことを意味する
6.2. CPU とメモリの接続
(1) CPU8085A と 64k 番地×8bit メモリとの接続
メモリ
CPU
64k×8bit
8085A
上位アドレス
A8-A15
ALE
8
A8-A15
下位アドレス
8
A0-A7
データバス
8
D0-D7
ラッチ
AD0-AD7
WE
RD
CS
WR
IO / M
メモリ
WE … 0:書き込み、1:読み込み
CS … 0 を入力したとき、指定された番地のメモリとデータバスを電気的に接続
メモリ WE ← CPU WR
メモリ CS ← CPU M・(RD + WR)
メモリに対する操作でかつ、read または write のとき、Chip Select(CS)すればよ
い。
30
コンピュータアーキテクチャ
(2) 2-4 デコーダ(複数のメモリを使用する際に使用するアドレスデコーダなどに使用)
以下の真理値表のように動作するデコーダ回路を示せ。
2-4
入力信号
出力信号
E I1 I0
O3 O2 O1 O0
0
0
0
1
1
1
0
0
0
1
1
1
0
1
0
1
0
1
0
1
1
0
1
1
0
1
1
1
1
0
0
1
1
1
1
1
0
1
1
1
1
1
1
1
0
1
1
1
1
デコーダ
I0
O0
I1
O1
O2
E
O3
(3) CPU8085A と 1k 番地×8bit×4個のメモリとの接続
メモリ
CPU
A9
2-4
デコーダ
8085A
A15
A14
A13
A12
1k×8bit
A0-A7
I0
O0
D0-D7
I1
O1
WE
E
A11
A8
CS
O2
O3
A10
メモリ
A9
A8
1k×8bit
A0-A7
A8-A9
D0-D7
WE
ALE
CS
ラッチ
メモリ
AD0-AD7
A9
A8
RD
1k×8bit
A0-A7
D0-D7
WR
WE
CS
IO / M
メモリ
A9
A8
1k×8bit
A0-A7
D0-D7
WE
アドレス
A11 A10
0~1023
0
0
メモリ0
1024~2047
0
1
メモリ1
2048~3071
1
0
メモリ2
3072~4095
1
1
メモリ3
使用メモリ
31
CS
コンピュータアーキテクチャ
(4) 同様に CPU8085A と 1k 番地×4bit×4個のメモリとの結線を行え。
CPU
8085A
A15
A14
A13
メモリ0
A8-A9
A12
1k×
A0-A7
A11
4bit
D4-D7
WE
A10
CS
A8-A9
A0-A7
メモリ2
1k×
4bit
D4-D7
WE
CS
A8-A9
ALE
ラッチ
AD4-AD7
AD0-AD3
メモリ1
RD
A8-A9
A0-A7
WR
D0-D3
WE
メモリ3
1k×
A8-A9
1k×
4bit
A0-A7
4bit
D0-D3
CS
WE
CS
IO / M
アドレス
A10
上位4bit データ (D7-D4)
下位4bit データ (D0-D3)
0~1023
0
メモリ0
メモリ1
1024~2047
1
メモリ2
メモリ3
32
コンピュータアーキテクチャ
6.3. マシンサイクル([2] p.39~p.40)
1つの命令 … 数個のマシンサイクル
マシンサイクル … 数個のステート(クロックパルス1周期分)
(1) マシンサイクルの種類(一部)
OPECODE FETCH(OF)
命令データの読み込み
MEMORY READ(MR)
(メモリ)→ (A レジスタ)
MEMORY WRITE(MW)
(A レジスタ)→(メモリ)
I/O READ(IOR)
(入出力装置)→ (A レジスタ)
I/O WRITE(IOW)
(A レジスタ)→(入出力装置)
(2) 1234H 番地のメモリの内容(56H)を CPU 内の A レジスタに転送する場合
この命令は、OF マシンサイクルと MR マシンサイクルからなる。また、MR マシンサイクル
は以下の3つのステート(クロック3周期)からなる。以下の図は MR マシンサイクルを表して
いる。
【MR マシンサイクル】
最初のステート(T1)
(1) IO / M が0になり、メモリに対する操作であることが指定さ
れる。A8-A15 には上位アドレス(12H)が出力される。また ALE
が1になり、AD0-AD7 には下位アドレス(34H)が出力され、ラ
ッチに記憶される。
(2) 上位アドレスとラッチに記憶された下位アドレスがメモリに
与えられる。
2番目のステート(T2) (3) RD が0になる。
(4) CS に0が与えられる。
(5) 1234H 番地のメモリとデータバスが電気的に接続され、デー
タバスにメモリの内容(56H)が出力される。
3番目のステート(T3) (6) データバスの値(56H)が CPU 内の A レジスタに取り込まれる。
33
コンピュータアーキテクチャ
MR マシンサイクル
T1
T2
T3
クロック
時刻
IO / M
(1)
A8-A15
(1)上位アドレス出力 (12H)
(1)
ALE
AD0-AD7
(1)下位
アドレス
(5)データ
(56H)
(34H)
(6)A レジスタへ
(3)
RD
メモリ
CPU
64k×8bit
8085A
A8-A15 (1) 12H
ALE
(1)
A8-A15
8
ラッチ
8
データバス
AD0-AD7
RD
8
下位アドレス
(1)
(6) A レジ
上位アドレス
(3) 0
(2) 34H
(5) 56H
A0-A7
56H
D0-D7
WE
RD+WR
1234H 番地
CS
1
スタへ
WR
IO / M
(4) 0
(1) 0
34
コンピュータアーキテクチャ
6.4. メモリ([2] p.60~p.73)
RWM(リードライトメモリ)
等速呼び出しメモリ
PROM
ROM(リードオンリーメモリ)
IC メモリ
非等速呼び出しメモリ
(1) SRAM
消去可
EPROM(紫外線)
EEPROM(電気的)
消去不可
マスク ROM
+VCC
Q
D
SRAM(スタテックRAM)
DRAM(ダイナミックRAM)
D
Q
D
S
D
S
NMOS-SRAM のメモリセル
エンハンスメント型 NMOS FET
D
G
G=1 のとき ON
G=0 のとき OFF
S
G
D
Vd
Vg
S
D
出力
Vd
入力
出力
0
1
1
0
入力 Vg
Q
Q
D
S=0 のとき
2状態(Q=1, Q=0 または Q=0,Q=1)の
いずれかを保持
Write 時
S=1 にして D=1, D=0 → Q=1
D=0, D=1 → Q=0
S: 1 のとき SW ON
0のとき SW OFF
Read 時
S=1 にして D > D → 1 と判定
D < D → 0 と判定
35
コンピュータアーキテクチャ
(2) SRAM の構成例(8192 ワード×8bit 構成)
I/O0~I/O7
CS・WE
A1
アドレスデコーダ
A0
CS・WE
A12
13-8192 アドレスデコーダ
D
A5
D
D
S
0
D
D
S
D
S
A6
行デコーダ( 8-256
)
A12
D
1
D
255
D
D
S
D
D
S
D
D
S
D
S
D
D
S
D
S
CS・WE
+
-
IO
0
1
31
列デコーダ(5-32 デコーダ)
CS・WE
A0 A1
36
A4
コンピュータアーキテクチャ
7. 周辺機器制御
(1) CPU8085A と 64k 番地×8bit メモリとの接続
メモリ
64k×8bit
CPU
8085A
8
上位アドレス
A8-A15
ALE
A8-A15
下位アドレス
8
A0-A7
データバス
8
D0-D7
ラッチ
AD0-AD7
WE
RD
CS
WR
IO / M
メモリ
WE … 0:書き込み、1:読み込み
CS … 0 を入力したとき、指定された番地のメモリとデータバスを電気的に接続
メモリ WE ← CPU WR
メモリ CS ← CPU M・(RD + WR)
(2) CPU8085A と周辺機器(I/O)との接続
インターフェースIC
アドレスデコーダ
0
1
CPU
8085A
8255A (1)
Μ
A8-A15
ALE
AD0-AD7
RD
ラッチ
A0-7
6
A2-7
2
60
61
62
63
A0-1
D0-7
RD
WR
ポートA
SW
ポートB
LED
ポートC
CWR
リレー
8 データバス
インターフェースIC
RD・IO
8255A (2)
CS
WR
IO / M
CS
I/O
A0-1
WR・IO
D0-7
RD
WR
37
ポートA
I/O
DA1
ポートB
ポートC
CWR
DA2
コンピュータアーキテクチャ
(3) アドレスデコーダ回路
CPU
8255A
A0
A0
A1
A1
74LS139
A2
Y0
8255A(1)のCS
A3
Y1
8255A(2)のCS
Y2
Y3
CS
A4
A5
A6
A7
A4
1
A5
1
A6
1
1
8255A
(1)
8255A
(2)
A4 A5 A6 A7
A7
ポート A
ポート B
ポート C
CWR
ポート A
ポート B
ポート C
CWR
A7
1
1
1
1
1
1
1
1
A6
1
1
1
1
1
1
1
1
A5
1
1
1
1
1
1
1
1
A4
1
1
1
1
1
1
1
1
A3
0
0
0
0
0
0
0
0
A2
0
0
0
0
1
1
1
1
A1
0
0
1
1
0
0
1
1
A0
0
1
0
1
0
1
0
1
IO アドレス
0F0H
0F1H
0F2H
0F3H
0F4H
0F5H
0F6H
0F7H
SW など
LED
リレーなど
コントロールワードレジスタ
DA
DA
コントロールワードレジスタ
(4) インターフェース IC 8255A
インターフェースIC
8255A
8255A(1)
8255A(2)
ポートA
SW(入力)
DA(出力)
ポートB
LED(出力)
(出力)
ポートC
リレー(出力)
DA(出力)
A0
データバス
8
A1
CWR
CWR(コントロールワードレジスタ)… ここに保存されているデータによって、各ポートと
データバス間のデータの流れの方向を決める。
従って、8255A を使用するには、各ポートに入力装置が接続されているのか、出力装置が接
続されているのかを CWR に値をセットして指定しなければならない。
38
コンピュータアーキテクチャ
CWR(コントロールワードレジスタ)
MSB
1
モード
設定の
とき1
0
0
モード指定
モード0
ポートA
入力:1
出力:0
1
0
LSB
0
0
0
ポートB
入力:1
出力:0
ポートC
(上位)
入力:1
出力:0
ポートC
(下位)
入力:1
出力:0
モード
指定
従って、
8255A(1)の CWR には 90H、
8255A(2)の CWR には
をセットする必要がある。
【例1】以下のように LED を光らせる。
ORG 8000H
LD A, 90H
OUT (0F3H), A
LD A, 80H
OUT (0F7H), A
; A←90H
; 8255A(1)の CWR に 90H をセット
; A←80H
; 8255A(2)の CWR に 80H をセット
LD A, 00011001B
OUT (0F1H), A ; (LED)←A
HALT
; A に 2 進数で 00011001 を代入
【例2】例 1 で光らせた LED を左にシフトさせながら表示し続ける。
時刻1
時間待ち
時刻 2
wait
時刻 3
時刻 4
時刻 5
時刻 6
39
コンピュータアーキテクチャ
【例3】押した SW に対応する LED を点灯させる。
ORG 8000H
CALL INIT
; 初期化
LOOP: IN A,(SW)
; A <-- (SW)
XOR 0FFH
; A の全 bit を反転
AND 0FH
; A の下位 4bit 取り出し
OUT (LED),A ; (LED) <-- A
JP LOOP
; LOOP へ戻る
INIT:
LD A,90H
OUT (CWR1),A
LD A,80H
OUT (CWR2),A
RET
SW:
LED:
CWR1:
CWR2:
END
EQU
EQU
EQU
EQU
0F0H
0F1H
0F3H
0F7H
【例4】4つの SW を 4bit の2進数入力とみなし、その数だけ LED に表示する値を増加させ
る。すなわち、sw0 が押されたとき LED に表示する値を1増やし、sw1 押されたときは LED
に表示する値を 2 増やす。ただし、LED に表示する初期値を0とする。また、スイッチ入力
されたとき、8255A(1)A ポートの下位 4bit の内、対応する bit が0になる(スイッチ入力され
ていないときは、1になる)
。さらにスイッチのチャタリングに注意すること。
ORG 8000H
CALL INIT
; 初期化
LD C,0
; C <-- 0
LOOP: IN A,(SW)
; A <-- (SW)
XOR 0FFH
; A の全 bit を反転
AND 0FH
; A の下位 4bit 取り出し
JP Z,LOOP
; スイッチ入力がなければ LOOP へ
ADD A,C
; A <-- A + C
LD C,A
; C <-- A
OUT (LED),A ; (LED) <-- A
CALL SWOFF ; SW が離されたことを確認
JP LOOP
; LOOP へ戻る
SWOFF:
; SW が離されたことを確認
CALL DELAY ; 時間稼ぎ
IN A,(SW)
; A <-- (SW)
XOR 0FFH
; A の全 bit を反転
AND 0FH
; A の下位 4bit 取り出し
JP NZ,SWOFF; スイッチが押されていたら SWOFF へ
RET
40
コンピュータアーキテクチャ
INIT:
LD A,90H
OUT (CWR1),A
LD A,80H
OUT (CWR2),A
RET
DELAY: PUSH AF
PUSH DE
LD DE,0681H
DELAY1:
DEC DE
LD A,D
OR E
JP NZ,DELAY1
POP DE
POP AF
RET
SW:
LED:
CWR1:
CWR2:
END
EQU
EQU
EQU
EQU
0F0H
0F1H
0F3H
0F7H
8255A の初期化
INIT
start
8255A の初期化
INIT
(C)←0
LED 出力の初期値
LOOP
(A) ← (SW)
(A)の全 bit を反転
下位 4bit 取り出し
(A)=0?
N
Y
(A)←(A)+(C)
(C)←(A)
(LED)←(A)
SW が離されたことを
確認 SWOFF
(CWR1)←90H
(CWR2)←80H
return
SW が離されたことを
確認 SWOFF
時間稼ぎ DELAY
(A) ← (SW)
(A)の全 bit を反転
下位 4bit 取り出し
N
(A)=0?
Y
return
41
コンピュータアーキテクチャ
【例5】スピーカ制御
;-------------------------------------------------------------------------------------------------; スピーカ制御
; 連続的に低い音から高い音に変化して繰り返す音
; スピーカ接続 --- 8255A(1) C ポートの MSB
;
ここに 0,1 を交互に出力すれば良い。
;
低い音=周波数が低い -- 0,1 の反転時間が長い
;
高い音=周波数が高い -- 0,1 の反転時間が短い
; 8255A(1) C ポートの MSB の bit 設定 -- CWR を使用する。
;-------------------------------------------------------------------------------------------------ORG 8000H
CALL INIT
; 初期化
L0:
LD B,9FH
CALL SOUND
JP L0
; B <-- 9FH
; 低い音から高い音に変化して繰り返す音を出す
; 8255A(1),(2)の初期化
INIT:
LD A,90H
OUT (CWR1),A
LD A,80H
OUT (CWR2),A
RET
;低い音から高い音に変化して繰り返す音を出す
SOUND: CALL SPK_ON ; スピーカに1を出力
CALL SPK_OFF ; スピーカに 0 を出力
DEC B
; B の値を 1 減らす
RET Z
; B が0になったら RETURN
JP SOUND
; スピーカに 1 を出力
SPK_ON:LD A,0FH
OUT (CWR1),A
CALL DELAY
RET
; 8255A(1)の CWR に 0FH を出力し、
; C ポートの MSB をセット
; B に対応する時間待ち
; スピーカに 0 を出力
SPK_OFF: LD A,0EH
OUT (CWR1),A
CALL DELAY
RET
; 8255A(1)の CWR に 0EH を出力し、
; C ポートの MSB をリセット
; B に対応する時間待ち
; B に対応する時間待ち
DELAY: LD A,B
DD:
DEC A
JP NZ,DD
RET
CWR1:
CWR2:
END
EQU
EQU
0F3H
0F7H
42
コンピュータアーキテクチャ
周期 1ms =
8. AD 変換,DA 変換
8.1. スペクトルとは
1
1kHz
1
f (t )
図(a)は、1kHz の方形波である。
この方形波は、(b)~(e)の波形の和で
近似できる。
0.5
0
1.5
時刻t →
(a) 方形波
直流(0Hz), 1kHz と 3kHz の sin 波
を足し算した場合
1
0.5
1
0
(b)
0.5
+
1
2
(直流 0Hz)
1
0
0.5
0
-0.5
-0.5
-1
1.5
2
(c) 1kHz の sin 波
直流(0Hz), 1kHz,3kHz,5kHz の sin 波
を足し算した場合
π
sin( 2πf 0 t )
0.5
1
0
-0.5
0.5
+
0
21
sin( 2π 5 f 0 t )
π
5
21
sin( 2π 3 f 0 t )
(d) 3kHz のsin 波
π 3
(e) 5kHz の sin 波
0.5
0
-0.5
-0.5
(e) 5kHz の sin 波
足し算した直流(0Hz), 1kHz,
3kHz,5kHz の成分の大きさを
グラフにすると…
0.7
0.6
0.5
大きさ 0.4
0.3
0.2
0.1
0
0
1
3
5
周波数 [kHz]
0.7
0.6
0.5
大きさ 0.4
0.3
0.2
0.1
0
21
sin( 2π 5 f 0t )
π5
スペクトル:
元の波形(方形波)がどのような
周波数成分からなるか表したもの
0
1
3
5
7
9 11 13 15 17 19 21 23 25 27 29
周波数 [kHz]
43
コンピュータアーキテクチャ
8.2. サンプリング定理(標本化定理)
信号の帯域が F [Hz]以下であるとき( F [Hz]より大きい周波数成分を持たないとき)、
1
[sec]周期以下( 2 F [Hz]以上)でサンプリング(標本化)すれば、完全に元の信号を復元
2F
できる。
高い周波数成分を
含んでいる。
アナログ信号(連続信号)
t
低域通過フィ
ルタ(LPF)
高い周波数成分が
カットされている。
t
AD
コンバータ
ディジタル信号
1 [sec]以下
2F
レベル(大きさ)
も離散化
(量子化)
8bit 量子化
→256 段階に離散化
時間的に離散化(サンプリング,標本化)
DA
コンバータ
t
50,75,115,125,135,…
低域通過フィ
ルタ(LPF)
t
階段波形
(高い周波数成分
が残っている)
元の波形が復元さ
れている。
アナログ信号
t
8.3. DA 変換(ディジタル信号→アナログ信号)
【例】4 bit でレベル(大きさ)を表現した(4 bit 量子化された)ディジタル信号の場合
10 進数
D3
0
0
1
0
2
0
|
|
15 1
ディジタル値
D2 D1 D0
0 0 0
0 0 1
0 1 0
|
|
|
1 1 1
ディジタル値 離(散的 )
ディジタル値とアナログ電圧の対応例
15
アナログ
電圧 [V]
0.0
0.1
0.2
|
1.5
14
3
2
1
量子化誤差
±0.05[V]
0
0.0 0.1 0.2 0.3 … 1.4 1.5
アナログ電圧 [V] (連続的)
44
コンピュータアーキテクチャ
【R-2R はしご型 DA コンバータ回路例】
R
アナログ
R
R
アナログ出力
出力Vout
2R
2R
D3 E
2R
D2 E
D1 E
2R
Vout=
2R
←レベル
時刻→
オシロスコープへの出力波形
オシロスコープ
(150,250)
インターフェースIC
IO アドレス
0F4H
ポートA
ポートB
ポートC
CWR
IO アドレス
0F6H
5 [v]
0 [v]
【三角形の表示】
8255A (2)
(2 3 D3 + 2 2 D 2 + 2 D1 + D0 )
E=1.6[V]とすれば左上の表の
ような対応になる。
D0 E
【のこぎり波の表示】
オシロスコープに右図に示すのこぎり波が
表示される Z80 アセンブリプログラムを作成
してみよう。
ただし、
IO アドレス 0F4H は 8255A(2) A
ポートに対応し、8bitDA コンバータが接続さ
れている。また 8bitDA コンバータ出力は、オ
シロスコープにあらかじめ接続してあるもの
とする。なお、この 8bitDA コンバータでは、
ディジタル値 0H が 0 [V], ディジタル値 0FFH
が 5 [V] のアナログ電圧に対応するものとする。
E
24
I/O
DA1
アナログ信号
(X ch)
DA2
アナログ信号
(Y ch)
Y ch
(50,50)
(250,50)
X ch
オシロスコープに上図に示す三角形が表示されるZ80アセンブリプログラムを作成してみよう。
(ヒント)
250
X 150
50
t
250
Y 150
50
t
8.4. AD 変換(アナログ信号→ディジタル信号)
(1) AD コンバータの種類
低速用…カウンタランプ型,2重積分型
中速用…逐次比較型
高速用…並列比較型
45
コンピュータアーキテクチャ
(2) AD コンバータの構成
アナログ
マルチプレクサ
アナログ入力
音
00
温度
01
光
10
外部入力
11
C1
AD
変換
サンプル
ホールド
回路
(標本化)
(時間を
離散化)
ディジタル
出力
(量子化)
(レベルを
離散化)
1 [sec]
2F
以下
C0
チャネル選択信号
t
50,75,115,125,135,…
(3) サンプルホールド回路例
アナログ入力 Vi
+
-
8bit 量子化
→256 段階に離散化
アナログ
スイッチ
+
-
制御信号Sが1のとき
スイッチON
(抵抗R)
階段波形 Vo
C
制御信号S
【S=1 → スイッチ ON→急速充電】
R
入力
Vi
出力
Vo
C
t
⎛
−
⎜
V o = V i ⎜ 1 − e RC
⎜
⎝
⎞
⎟
⎟
⎟
⎠
Vi
出力
Vo
t
【S=0 → スイッチ OFF→ゆっくり放電】
出力
Vo
C
Vo = Vie
−
t
RiC
Ri
Vi
出力
Vo
(OP アンプの入力抵抗:大きい)
t
充電
放電
t
制御信号S
46
コンピュータアーキテクチャ
(4) 量子化(逐次比較型)
【りんごの重さを量るとき】
(a)
【アナログ入力電圧を測るとき】
72g
10 進数
D3
0
0
1
0
2
0
|
|
15 1
80g
りんご < 80g
取り除く
(b)
(a)
アナログ
電圧 [V]
0.0
0.1
0.2
|
1.5
アナログ入力電圧 < 基準電圧 0.8[V]
1000(D3 のみ1)
0.72[V]
40g
ディジタル値
D2 D1 D0
0 0 0
0 0 1
0 1 0
|
|
|
1 1 1
取り除く
(b)
アナログ入力電圧 > 基準電圧 0.4[V]
0100(D2 のみ1)
そのまま
(c)
アナログ入力電圧 > 基準電圧 0.6[V]
0110(D1 を1に)
そのまま
(d)
アナログ入力電圧 > 基準電圧 0.7[V]
0111(D0 を1に)
そのまま
りんご > 40g
そのまま
(c)
40g
20g
りんご > 60g
そのまま
(d)
40g 20g
アナログ入力電圧(0.72[V])
→ 0111の 4 bit ディジタル値に変換
10g
りんご > 70g
そのまま
47
コンピュータアーキテクチャ
【4bit 逐次比較型 AD 変換回路例】
アナログ入力電圧 Vi=0.72[V]のとき
(a) クロック→
リングカウンタ Q1 Q2 Q3 Q4 Q5
100 0 0
(Q1=1) → FF3 の Set 端子
→ DA コンバータ入力:1000
→ DA 出力(基準電圧Vd):0.8[V]
アナログ入力電圧Vi>基準電圧Vd なら
比較器出力Vc=0(おもりはそのまま)
アナログ入力電圧Vi<基準電圧Vd なら
比較器出力Vc=1(おもりを取り除く)
DA出力
Vd
入力
Vi
DA コンバータ
Q
Q
Q
Q
FF3
FF2
FF1
FF0
RS
RS
RS
RS
-+
比較器
Vc
シリアル
AD 出力
A3
A2
A1
A0
Q D
CLK
クロック
Q1
Q2
Q3
Q4
Q5
リングカウンタ
(b) クロック → 前段の結果(D3=0)がシリアル出力される
リングカウンタ Q1 Q2 Q3 Q4 Q5 (Q2=1)
010 0 0
→ Q2=1, Vc=1 が A3 に入力 → FF3 の Reset 端子に1入力 → FF3 出力:0
→ Q2=1が FF2 の Set 端子に入力 → FF2 出力:1
→ DA コンバータ入力:0100 → DA 出力(基準電圧Vd):0.4[V]
→アナログ入力電圧Vi>基準電圧Vd なので、比較器出力Vc=0(おもりはそのまま)
(c) クロック → 前段の結果(D2=1)がシリアル出力される
リングカウンタ Q1 Q2 Q3 Q4 Q5 (Q3=1)
001 0 0
→ Q3=1, Vc=0 が A3 に入力 → FF2 の Reset 端子に0入力 → FF2 出力:1のまま
→ Q3=1が FF1 の Set 端子に入力 → FF1 出力:1
→ DA コンバータ入力:0110 → DA 出力(基準電圧Vd):0.6[V]
→アナログ入力電圧Vi>基準電圧Vd なので、比較器出力Vc=0(おもりはそのまま)
(d) クロック → 前段の結果(D1=1)がシリアル出力される
リングカウンタ Q1 Q2 Q3 Q4 Q5 (Q4=1)
000 1 0
→ Q4=1, Vc=0 が A3 に入力 → FF1 の Reset 端子に0入力 → FF1 出力:1のまま
→ Q4=1が FF0 の Set 端子に入力 → FF0 出力:1
→ DA コンバータ入力:0111 → DA 出力(基準電圧Vd):0.7[V]
→アナログ入力電圧Vi>基準電圧Vd なので、比較器出力Vc=0(おもりはそのまま)
(e) クロック → 前段の結果(D0=1)がシリアル出力される
以上のように、入力電圧と基準電圧を逐次比較することで AD 変換を行える。
48
コンピュータアーキテクチャ
(5) IO ボードの AD 変換部
100 倍の増幅器
逐次比較型
AD 用 LSI
100k
アナログ入力
1k
8255A(1)
+
音(マイク)
A0
DATA
CLK
温度
A1
CS
A2
C1
C0
光
外部入力
A3
AD 出力
(1 bit ずつ
シリアルに
出力)
クロック入力
チップセレクト
音 温度 光 外部
0 0 1 1
0 1 0 1
A0~A3 のいずれ
をAD するか選択
ポートAのMSB(A7)
(IO アドレス 0F0H)
ポートC の3bit 目(C3)
(IO アドレス 0F2H)
ポートC の2bit 目(C2)
(IO アドレス 0F2H)
ポートC の1bit 目(C1)
ポートC の0bit 目(C0)
(IO アドレス 0F2H)
①
チップセレクト
CS
チャネル選択信号 C0,C1
ポートC の2bit 目(C2) (IO アドレス 0F2H)
③
② A0~A3 のいずれをAD するかを示す選択信号(ポートC, C1, C0)
④
⑤
⑦
ポートC の2bit 目(C2)
(IO アドレス 0F2H)
クロック入力 CLK
AD 出力 DATA
(IO アドレス 0F2H)
⑥ ⑧ ⑩
⑫
⑭
⑯
⑱
⑳
MSB 2SB 3SB 4SB 5SB 6SB 7SB LSB ポートAのMSB(A7)
(IO アドレス 0F0H)
9 個のクロックで 8bit ディジタル値が MSB から順次得られる
(6) AD 変換プログラム例
;****************************************
; AD 変換
; 音(0)、温度(1)、光(2)、外部入力(4)
; のいずれかを AD 変換し、結果を LED に
; 表示する。
;****************************************
; メインルーチン
ORG 8000H
; 8000H 番地から
LD A,90H
; 1 つめの 8255A を
OUT (CWR1),A
; A:入力、B,C:出力に初期化
LD A,80H
; 2 つめの 8255A を
OUT (CWR2),A
; A,B,C:出力に初期化
LD A,4
① OUT (PORTC1),A
LOOP:
LD C,SELECT
CALL ADC
OUT (PORTB1),A
JP LOOP
; __
; CS <-- High
; 入力を選択 音(0)、温度(1)、光(2)、外部入力(4)
; AD 変換 (結果は A レジスタに格納)
; AD 変換結果を LED に出力
49
コンピュータアーキテクチャ
; AD 変換サブルーチン
; 入力: C レジスタ 音(0)、温度(1)、光(2)、外部入力(3)
; 出力: A レジスタ AD 変換結果
ORG
8100H
; 8100H 番地から
ADC:
PUSH BC
; BC を退避(サブルーチン終了後、元に戻すため)
PUSH DE
; DE を退避
LD A,C
AND 3
LD C,A
; C の下位 2bit のみ
;
を取り出す
;
IN A,(PORTC1)
AND 0F0H
; PORTC1 の
; 上位 4bit を取り出し
OR C
;
;
;
;
;
;
;
A レジスタ
C1 C0
C レジスタ 0 0 0 0 0 0 C1 C0
リレー
スピーカ
XOR 4
② OUT (PORTC1),A
XOR 4
③ OUT (PORTC1),A
LD C,9
LD DE,0706H
ADC1:
LD A,D
④⑤⑦… OUT (CWR1),A
LD A,E
OUT (CWR1),A
⑥⑧… IN A,(PORTA1)
RLA
LD A,B
RLA
LD B,A
A レジスタ
下位 2bit(C0,C1)に選択されたAD変換元(0~4)をセット
__
A レジスタ
0 0 C1 C0
CS --> High (反転)
0 1 C1 C0
__
CS --> Low (反転)
0 0 C1 C0
; 9 回ループ
; D<--7 E<-- 6
A レジスタ
;
; Clock --> High
CWR
;
; Clock --> Low
;
;
;
;
;
0 0 0 0
A の MSB:A7 <-- AD 結果
CY <-- A7
A <-- B
A0 <-- CY
B <-- A
DEC C
JP NZ,ADC1
; C -; 9 回ループ
LD A,5
OUT (CWR1),A
; __
; CS --> High
LD A,B
POP DE
POP BC
RET
; A <-- B AD 結果
; DE を元に戻す
; BC を元に戻す
EQU
EQU
EQU
EQU
EQU
EQU
;
;
;
;
;
;
C1 C0
3bit 目を 1 にする
0 xxx 0 1 1 1
3bit 目を0にする
CWR
0 xxx 0 1 1 1
A レジスタ AD x x x SW SW SW SW
CY
AD
x x x SW SW SW SW
CY
AD
B7 B6 B5 B4 B3 B2 B1 B0
CY
B7
B6 B5 B4 B3 B2 B1 B0 AD
B レジスタへ
PORTA1:
PORTB1:
PORTC1:
CWR1:
CWR2:
SELECT:
END
0F0H
0F1H
0F2H
0F3H
0F7H
2
B レジスタの値
④
B7
B6
B5
B4
B3
B2
B1
⑥
B6
B5
B4
B3
B2
B1
B0 MSB
⑧
B5
B4
B3
B2
B1
B0 MSB 2SB
MSB: AD 結果
⑳ MSB 2SB 3SB 4SB
LED
__
C0,C1: AD 入力選択 C2: CS C3: Clock
1 つめの 8255A のコントロールワードレジスタ
2 つめの 8255A のコントロールワードレジスタ
音(0)、温度(1)、光(2)、外部入力(3)
;プログラム記述終了
50
B0
5SB 6SB 7SB LSB
コンピュータアーキテクチャ
9. 入出力割込み
9.1. 入出力割込みとは
いつ起こるかわからない事象(イベント)
(例:自動ドア、スイッチが押される)
↓
CPU で常時監視
↓
アクション
効
率
が
悪
い
判定
No
Yes
ハードウェアで実現
(CPU には
割込み要求端子がある)
入出力割込み処理:
IN A, (0F0H)
アクション
CPU には別の仕事をさせておき、ハード的に事象が起こったことを検出し処理する。
【8085A RST7.5 割込みの場合】
メインルーチン
CPU のRST7.5 割込み
端子に1が入力
ハード的に CALL 3CH
という命令が挿入
割込みサブルーチン
9.2. 入出力割込みの種類
ノンマスカブル割込み … いつでも割込み可(割込みを禁止できない)
マスカブル割込み
… 割込みを禁止することができる。
リスタート割込み … 割込みが発生したら特定番地から再開
ベクトル割込み … 割込み発生後、選択用データ(ベクトル)を周辺機器から送り、
どのような処理をさせるかを指示
9.3. CPU 8085A の割込み
5 つの割込み要求端子
RST5.5 → CALL
RST6.5 → CALL
RST7.5 → CALL
TRAP → CALL
INTR
特定番地
2CH
34H
3CH
24H
リスタート割込み,マスカブル割込み
… リスタート割込み,ノンマスカブル割込み
… ベクトル割込み, マスカブル割込み
【INTR】INTR 端子に1(High) が入力→INTA (割込み許可端子) に0が出力
→外部からデータバスに命令(ベクトル)を入れる
選択用データ:RST 1, RST2, RST3, RST4, RST 5, RST 6, RST7(1バイト命令)
51
コンピュータアーキテクチャ
【RST7.5】
RST 7.5FF
CPU の
RST7.5
割込み端子
に1が入力
1ならハード的
に CALL 3CH
を実行
D Q
1
CLK
Reset
SIM 命令
例: LD A,1BH
DB 30H ; SIM 命令のマシンコード
マスク
FF
② SIM 命令
このビットが1のとき、RST7.5
マスク FF 等に値がセットされる
RST7.5 割込みを許可:0
RST7.5 割込みを禁止:1
使用せず
A レジスタ
S
割込み
イネー
ブル
R
DI 命令
FF
割込み全体を許可:1
割込み全体を禁止:0
③ EI 命令
RST 7.5FF
を Reset
RST 5.5FF
RST 6.5FF
RST 7.5FF
0:割込み可
1:割込み不可
アドレス
R
O
M
領
域
メモリ
3CH
C3
3DH
BD
3EH
04
C3 BD 04 :JP 04BDH
¦
04BDH
C3
04BEH
1E
04BFH
FF
¦
CPU の
RST7.5
割込み端子
に1が入力
0 0 0 1 1 0 1 1
8000H
C3 1E FF :JP FF1EH
ハード的に
CALL 3CH
を実行
メイン
ルーチン
¦
8200H
RET
割込み ④
ルーチン
¦
FF1EH
C3
FF1FH
00
FF20H
82
52
C3 00 82 :JP 8200H
割込みルーチンの先頭アドレス
①(ユーザーが設定)
コンピュータアーキテクチャ
9.4. RST7.5 割込みプログラム例
;*****************************************
;* 割り込みを使用した例
*
;* 通常は音をならしておき、割り込み
*
;* 発生時(割り込みボタンが押されたら) *
;* リレーを 2 回 ON/OFF させる。
*
;*****************************************
; メインルーチン
ORG 8000H
; 初期設定
LD A,90H
OUT (CWR1),A
LD A,80H
OUT (CWR2),A
LD A,4
OUT (PORTC1),A
LD
LD
LD
LD
A,0C3H;
(0FF1EH),A
HL,INT;
(0FF1FH),HL
; 8000H 番地から
; 1 つめの 8255A を
; A:入力、B,C:出力に初期化
; 2 つめの 8255A を
; A,B,C:出力に初期化
;
__
; AD CS <-- High
; (0FF1EH 番地) <-- 0C3H (JP 命令) ;
; JP INT
; (0FF1FH, 0FF20H 番地) <-- INT
;
① 割込みルーチンの
先頭アドレスを設定
②RST7.5
LD A,1BH ; 割り込みボタンに接続されている RST7.5 割り込み
割込みを
DB 30H
; 端子の割り込みが可能になるように割り込みマスクをセット(SIM 命令)
許可
③ EI
; 割り込み全体を許可
; 通常ルーチン(音を鳴らす)
SOUND: LD A,0FH
; スピーカが接続されているビット(Port C MSB)
CALL OUTPC7
; を High にする
LD A,0EH
; スピーカが接続されているビット(Port C MSB)
CALL OUTPC7
; を Low にする
JP SOUND
OUTPC7: OUT (CWR1),A
LD A,9FH
DELAY: DEC A
JP NZ,DELAY
RET
; スピーカが接続されているビットを 1/0 にする
; 時間稼ぎ
④ ; 割り込みルーチン
; リレーを 2 回 ON/OFF させる
INT:
PUSH AF
; AF を退避(サブルーチン終了後、元に戻すため)
PUSH HL
; HL を退避
LD A,09H
CALL INT5
LD A,08H
CALL INT5
LD A,09H
CALL INT5
; リレー1(Port C 4bit 目)
; を ON にする。
; リレー1(Port C 4bit 目)
; を OFF にする。
; リレー1(Port C 4bit 目)
; を ON にする。
53
コンピュータアーキテクチャ
LD A,08H
CALL INT5
; リレー1(Port C 4bit 目)
; を OFF にする。
LD A,10H
DB 30H
; 割り込みボタンに接続されている RST7.5 割り込み FF
; をリセットする(SIM 命令)
POP HL
POP AF
; HL を元に戻す
; AF を元に戻す
EI
; 割り込み解除
RET
INT5:
INT6:
OUT (CWR1),A
LD HL,0C000H
DEC HL
LD A,H
OR L
JP NZ,INT6
RET
PORTC1: EQU 0F2H
CWR1:
EQU 0F3H
CWR2:
EQU 0F7H
END
; リレー1 が接続されているビットを 1/0 にする。
;
; 時間稼ぎ(wait)
;
;
;
; C7: スピーカ C4: リレー
; 1 つめの 8255A のコントロールワードレジスタ
; 2 つめの 8255A のコントロールワードレジスタ
;プログラム記述終了
9.5. 練習問題
以下の問いに答えよ。空欄には適切な語句を埋めよ。
(1) 入出力割込み処理とは?
(2) 入出力割込みの種類
A 割込み … 割込みを禁止できない
B 割込み… 割込みを禁止することができる
C 割込み … 割込みが発生したら特定番地から処理を再開
D 割込み … 割込み発生後、選択用データ(ベクトル)を周辺機器から送り、どのよ
うな処理をさせるかを指示
54
コンピュータアーキテクチャ
10. コンピュータアーキテクチャ
10.1. アドレス部(オペランド部)([1] p.38)
(1) 機械語命令
命令部
操作の種類
アドレス部(オペランド部)
操作対象の値,レジスタ指定,アドレス
(2) 1オペランド命令(1アドレス命令)…アドレス部に1つのアドレスを指定
ADD A,B ; 80H
(マシンコード)
10
000
レジスタとの 000 は ADD
演算
A ← A + B
アキュムレータに対
して操作することを
前提としている。
000
このアドレスだけを
指定する。
B レジスタ:000
C レジスタ:001
D レジスタ:010
|
アキュムレータ
アキュムレータ型
計算機
演算回路
セレクタ
レジスタや
メモリ
(3) 2オペランド命令(2アドレス命令)…アドレス部に2つのアドレスを指定
命令部
第1アドレス部 第2アドレス部
ADD
【例】LD B, C
LD r, r’
01 000 001
C
B,
(マシンコード41H)
; B ← B+C
2つのオペランドを指定
レジスタ0
レジスタ1
レジスタ型計算機
|
レジスタn
演算回路
セレクタ
メモリ(レジスタを含む)
55
コンピュータアーキテクチャ
(4) 3オペランド命令(3アドレス命令)
…アドレス部(オペランド部)に3つのアドレス(オペランド)を指定
命令部
第1アドレス部 第2アドレス部 第3アドレス部
D
←
B
+
C
(5) 0アドレス計算機(スタックマシン)…アドレス指定なし
pop
pop
命令部
20
ADD
30
20 + 30
push
50
100
100
スタック
10.2. アドレス修飾 ([1] p.41)
有効アドレス(実効アドレス)…命令の操作対象のデータが格納されているメモリ上の番地
アドレス修飾…有効アドレスを指定するためのさまざまな規則
CPU
(1) 直接アドレス指定方式
命令語のアドレス部で、直接
有効アドレスを指定する方式
【例】LD A, (1234H)
レジスタ
アドレス
(命令語のアドレス部)→ 有効アドレス
レジスタ間接
アドレス
命令レジスタ
(2) 間接アドレス指定方式
命令語のアドレス部で指定されたレジスタ
またはメインメモリに有効アドレスが格納
されており、レジスタまたはメインメモリ
を介して間接的に有効アドレスを指定する
方式([3] p.49 図 2.7 参照)
【例】LD A, (HL)
・レジスタ等を経由することでアドレス
を指定するための bit 数を節約できる
・アドレスを順次変更しながら柔軟な処理
を行える
(XX 番地から 100 個のデータを YY 番地
にコピーする例 p.27 5.6 (2)参照)
(命令語のアドレス部)
→ (レジスタまたはメインメモリ)→有効アドレス
56
メモリ
データ
メモリ間接
アドレス
アドレス
データ
データ
直接
アドレス
コンピュータアーキテクチャ
(3) 基底(ベース)アドレス指定方式
命令語のアドレス部の値にベースレジスタ
の値を加算したものを有効アドレスとする
方式([3] p.49 図 2.8 参照)
CPU
PC
レジスタ
ベース
命令語の
+
アドレス部
5
+
ベース
レジスタ
有効
→
アドレス
・命令語のアドレス部の bit 数を短縮できる
・プログラムの再配置が容易になる
(4) PC 相対アドレス指定方式
命令語のアドレス部の値に PC の値を加算
したものを有効アドレスとする方式
命令語の
+
アドレス部
3
+
PC
→
+
b+a
プログラムの先
プログラム
→ 頭から5番目の
の先頭番地
アドレス
p
b
メモリ
b+a
データ
a
データ
p+a
データ
a
+
a
命令レジスタ
ベース相対
アドレス
絶対アドレス a
PC 相対アドレス
有効
アドレス
現在実行中の
現在実行中
→ 番地から 3 番
の番地
目のアドレス
・命令語のアドレス部の bit 数を短縮できる
・プログラムの再配置が容易になる
(5) 指標(インデックス)アドレス指定方式
命令語のアドレス部の値にインデックス
レジスタの値を加算したものを有効アド
レスとする方式
インデック
命令語の
有効
+ スレジスタ →
アドレス部
アドレス
配列 a の先
+
頭アドレス
2
→
CPU
レジスタ
ベース
インデックス
メモリ
b+a+i
57
i
+
a
命令レジスタ
+
b+a+i
a[2]の
アドレス
インデックスレジスタの
bit 数は小さくてもよい
b
データ
ベース相対アドレス
にインデックス修飾
を行った場合
p+a
コンピュータアーキテクチャ
(6) ビッグエンディアン(big endian )とリトルエンディアン(little endian)
2つ以上のアドレスにまたがってデータを格納する際に、
データの下位の桁を大きいアドレスに割り振る場合→ビッグエンディアン
データの下位の桁を小さいアドレスに割り振る場合→リトルエンディアン
【例】
・リトルエンディアン(windows PC など)
データ 1234H→ 600 番地:34H (下位)
601 番地:12H (上位)
・ビッグエンディアン(Mac, Sun ワークステーションなど)
データ 1234H→ 600 番地:12H (上位)
601 番地:34H (下位)
10.3. CPU の基本動作と命令パイプライン([1] p.58~p.60)
(1) 命令実行手順
命令サイクル
F:命令のフェッチ(命令の取り出し)
D:命令のデコード(命令の解読)
E:有効アドレスの計算と命令の実行
WB:演算結果をメインメモリに書き戻す
(2) 逐次制御方式
時刻(クロック) 1
命令1
F
命令2
2
D
平均命令実行時間(CPI)=
3
E
4
WB
5
6
7
8
F
D
E
WB
5
6
7
8
WB
E
D
F
WB
E
D
WB
E
WB
総クロック数 8クロック
=
=4
実行命令数
2命令
(3) 先行制御方式(命令パイプライン制御方式)
時刻(クロック) 1
命令1
F
命令2
命令3
命令4
命令5
2
D
F
平均命令実行時間(CPI)=
3
E
D
F
4
WB
E
D
F
総クロック数 8クロック
=
=1.6
実行命令数
5命令
(4) CPUの性能指標=動作周波数×IPC
IPC(Instruction Per Clock cycle)…1クロックあたりに実行可能な命令数=1/CPI
MIPS(Million Instruction Per Second)…1秒間に実行可能な命令数(10 6 単位)
FLOPS(Floating Point Operations Per Second)…1秒間に実行可能な浮動小数点演算命令数
ベンチマークテスト:SPECint2000,SPECfp2000 など
58
コンピュータアーキテクチャ
(5) スーパーパイプライン
命令実行の各ステージをさらに細かく分割することにより、パイプライン動作の効率
を向上させる高速化技術
時刻(クロック) 1 2
3
4
5
6
7
8
9
10
11 12 13
14
15 16
命令1
F1 F2
D1
D2
E1
E2
WB1 WB2
命令2
F1
F2
D1
D2
E1
E2
WB1 WB2
F1
F2
D1
D2
E1
E2
WB1 WB2
F1
F2
D1
D2
E1
E2
WB1
WB2
F1
F2
D1
D2
E1
E2
WB1 WB2
F1
F2
D1
D2
E1
E2 WB1 WB2
F1
F2
D1
D2
E1 E2 WB1 WB2
F1
F2
D1
D2 E1 E2
WB1 WB2
F1
F2
D1 D2 E1
E2
命令3
命令4
命令5
命令6
命令7
命令8
命令9
WB1 WB2
通常のパイプラインで5命令を実行する時間で、9命令を実行できる。
(6) スーパースケーラ
複数のパイプラインを設けることにより複数の命令を同時に実行し、処理速度の向上
を図る高速化技術
時刻(クロック) 1
命令1
F
命令2
F
命令3
命令4
命令5
命令6
命令7
命令8
命令9
命令 10
2
D
D
F
F
平均命令実行時間(CPI)=
3
E
E
D
D
F
F
4
WB
WB
E
E
D
D
F
F
5
6
7
8
WB
WB
E
E
D
D
F
F
WB
WB
E
E
D
D
WB
WB
E
E
WB
WB
総クロック数 8クロック
=
=0.8
10命令
実行命令数
(7) パイプラインの乱れ([3] p.97~105 参照)
各ステージの処理が1クロックで終了しない要因(パイプラインハザード)
機能回路の競合 … 構造ハザード
分岐命令による乱れ … 制御ハザード
命令間のオペランドの依存関係 … データハザード
ハザード:危険を引き起こす要因
59
コンピュータアーキテクチャ
構造ハザード
制御ハザード
命令1
演算器
命令2
レジスタ
命令1
命令2
命令1
分岐命令
分岐先 1
演算命令
ようとしたときに発生
命令2
結果
命令3
複数の命令が同時刻にCPU 内の
同じハードウェア資源を利用し
データハザード
データ
分岐先2
ある命令を実行するかどうかの
ある命令の操作対象(データ)が、
判断を、現在実行中の命令の結果
現在実行中の命令の結果に基づ
に基づいて行う場合に発生
く場合に発生
(8) パイプラインハザードを防止する技術
・レジスタリネーム
複数の命令を同時に実行する際に、同一のレジスタに対してデータの読み書きが
生じた場合、別のレジスタを仮想的に同一のレジスタと見なすことによって、レジ
スタの競合(構造ハザード)を回避すること。
【例】A→[メモリ1]
[メモリ2]→A
B→[メモリ1]
=A
[メモリ2]→A
同時に実行できない。
レジスタをリネームして、別のレジスタを割り当てる
ことでコードの依存関係を解消し、パイプラインによ
る同時実行を可能にする。
・アウトオブオーダ実行
なるべく並列処理が可能な順序で命令を実行していく技術。
参考:インオーダ…プログラムで記述された順序
・分岐予測
分岐命令実行後の結果を予測し、予測された命令を先行して実行。
10.4. CPU の高速化技術
(1) SIMD(Single Instruction Multiple Data)
…1個の命令→複数のデータをまとめて処理
【例】インテル MMX 命令、AMD 3DNow!
SISD(Single Instruction Single Data)…1個の命令→1個のデータを処理
MIMD(Multiple Instruction Multiple Date)…複数個の命令→複数個のデータを処理
(2) VLIW(Very Long Instruction Word) 超長形式機械命令
…1つの命令の中に複数の命令内容を格納し、これらをすべて同時に実行する形式
同時に実行するために、各命令間に依存関係がないように予めコンパイル時などに
最適化しておく必要がある。一方、予め最適化しておくため、アウトオブオーダ,分
岐予測などの複雑な機構が不要となり、CPU回路を簡素化できる。
60
コンピュータアーキテクチャ
10.5. キャッシュメモリ([1] p.60~p.66, [3] p.109~p.125)
(1) 仕組み
【キャッシュメモリなし】
高速
データ読み出し要求
CPU
データ転送
低速
メイン
メモリ
応答に時間がかかる→CPUが待ち状態(メモリ遅延)
【キャッシュメモリあり】
高速
CPU
データ読み出し要求
データ転送
高速(SRAM など)
キャッシュ
先読み
メモリ
低速(DRAM など)
メイン
メモリ
キャッシュメモリに必要なデータがあれば(ヒットすれば)
メモリ遅延が少なくてすむ
ヒット率=必要なデータがキャッシュメモリ内にある確率
【例】[3] p.109
キャッシュメモリのアクセス時間=10 ns
メインメモリのアクセス時間=200 ns
ヒット率=0.95
平均メモリアクセス時間=10 ns×
+200 ns×
・ キャッシュメモリなし 200 ns に比べて約 10 倍高速
・ ヒット率の向上が重要
=19.5 ns
【ヒット率向上のための方法】([1] p.62)
① 命令キャッシュとデータキャッシュを分離する
(命令とデータの格納場所が異なることが多いため)
② 複数のキャッシュを用いる
CPU-1次キャッシュ-2次キャッシュ-メインメモリ
(2) キャッシュライン(ブロック)とマッピング
キャッシュライン(ブロック)…キャッシュメモリの単位(128~256 bit 程度)
マッピング(対応づけ、連想方式)
メインメモリ
① 直接マップ方式(ダイレクトマッピング(direct mapping)方式)
対応づけが番地ごとにあらかじめ決定されている方式
② 完全連想方式(フルアソシエイティブ(fully associative mapping)方式)
メインメモリの任意のブロックをキャッシュの任意のブロックにマッピングでき
る方式
③ 群連想方式(set associative mapping) ①と②の中間にあたる方式
61
コンピュータアーキテクチャ
【例】([3] p.113~p.114)
1番地あたりの記憶容量 1 byte
キャッシュライン(ブロック)の大きさ 1 ブロック = 64 byte = 2 6 byte = 2 6 番地
キャッシュメモリ容量 64 k byte = 216 byte = 210 ブロック = 0 ~1023 ブロック
メインメモリ容量
4G byte = 2 32 byte = 2 26 ブロック
① 直接マップ方式(direct mapping)の例 ([3] p.114)
メインメモリのブロックとキャッシュメモリのブロックの
対応づけがあらかじめ決定されている方式
[キャッシュメモリ]
1 行×1024 列に配置
0
2048
1
1
2
1026
ブロック番号 3071
のデータを保持
1023
3071
…
キャッシュメモリの1つのブロックが
あらかじめ決められた216 ブロックの
メインメモリに対応
0 0
1 1024
2 2048
[メインメモリ]
群内ブロック番号
(行番号,Tag)
Μ
1023
2050
…
…
…
Μ
Ο
Μ
…
2 26 -1
1
2
1025
1026
2049
Μ
216 -1
0
1
1 ブロック
6
= 2 番地
2047
3071
2
1023
群番号(列番号,Index)
群番号(列番号,Index) = キャッシュメモリの列数 = 210
群内ブロック番号(行番号,Tag)=メインメモリ容量( 2 26
ブロック)/
群番号( 210 )= 216
【例】メインメモリのアドレス(ブロック番号 1026 のデータが要求された時)
群内ブロック番号(16bit) 群番号(10bit)
0000 0000 0000 0001
キャッシュメモリにどの群内ブロ
ック番号(行番号)に対応するメイ
ンメモリの内容が記憶されている
かをディレクトリ(連想メモリ)と
呼ばれるレジスタに保存しておく。
00 0000 0010 ブロック内アドレス(6bit)
1
2
比較:
一致していれば hit
[ディレクトリ(連想メモリ)]
0
2
1
0
2
1
…
1023
2
[キャッシュメモリ]
2048
1
1026
…
3071
《特徴》 ・マッピングが簡単
・ヒット率が低下する可能性が高い
62
群内ブロック番号
(行番号,16bit)
コンピュータアーキテクチャ
② 完全連想方式(fully associative mapping)の例 ([3] p.113)
メインメモリの任意のブロックをキャッシュの任意のブロックにマッピングできる方式
[キャッシュメモリ]
1024 行×1 列に配置
[ディレクトリ(連想メモリ)]
0
1
メインメモリとの対応を記憶しておく
レジスタ(ディレクトリ)が非常に大
きくなる。
(26bit×1024 行)
群内ブロック番号(26bit)
群内ブロック番号(26bit)
Μ
Μ
1023
群内ブロック番号(26bit)
[メインメモリ]
0
1
2
CPU から指定された群内ブロック番号(行番号)
に一致する行を検索(1024 行を検索する必要がある)
:一致すれば hit
(データがキャッシュ内に存在)
群内ブロック番号
(行番号) 2 26 個=
Μ
メインメモリ容量( 2 26 ブロック)
2 26 -1
/群番号(1)
群番号1個
メインメモリのアドレス
ブロック内アドレス(6bit)
群内ブロック番号(行番号,26bit)
③ 群連想方式(set associative mapping)の例
①と②の中間にあたる方式。キャッシュメモリをn行m列とした場合、
各行について完全連想方式、各列について直接マップ方式とする方式。
n行の場合、nウェイ群連想方式という。
[ディレクトリ(連想メモリ)]
[キャッシュメモリ]16 行×64 列に配置
(16 ウェイ群連想方式)
16( 24 )行
16 ウェイ
[キャッシュ
メモリ]
10
26 列 = 2 ブロック 4
2 ウェイ
64
1
2 25
Μ
キャッシュメモリの各ブロックに対応
記憶しているメインメモリブロックの行番号(20bit)を保持
1
127
65
…
…
2 26 -1
Μ
Ο
Μ
2
20
0
-1
Μ
Μ
Ο
0
0
1
64
群内
ブロック
Μ
番号
(行番号) 2 20 -1 2 25
220 個
0
メインメモリ容量 (2 26 ブロック
1
63
65
…
…
127
Μ
Ο
Μ
…
2 26 -1
1
2
-1
Μ
1
63(群番号,行番号)
0 列の連想メモリの中で
2 20 -1 に一致する行を検索(16 行を検索する必要)
:一致すれば hit
(データがキャッシュ内に存在)
63
群番号(列番号)
=キャッシュメモリの列数=26 個
2 20 -1
メインメモリのアドレス
(ブロック番号 2
1
20
…
…
0
列番号 (2 6 )
1
…
…
25
のデータが要求された時)
63
1111 1111 1111 1111 1111
群内ブロック番号
(行番号 20bit)
0
000000
(6bit)
群番号 ブロック内
(列番号 アドレス
6bit)
コンピュータアーキテクチャ
【練習】キャッシュメモリの容量が 128K バイト、主記憶の最大容量が 4G バイトのメモリ系において、ブロ
ックの大きさが 32 バイトの8ウェイ set associative mapping を採用したとき、メインメモリブロックの
列(群番号、Index)及び行(群内ブロック番号、Tag)の指定に何ビット必要か。またディレクトリ全体で
何ビット必要か。
(3) キャッシュメモリの書き込み方式 ([1] p.65)
・ライトスルー方式…CPUがキャッシュライン(ブロック)の内容を書き換えたら、メイ
ンメモリ上の内容もすぐに書き換える方式
《利点》メインメモリの内容とキャッシュラインとの整合を常にとるため安全
《欠点》書き込み時のメモリ遅延はほとんど改善されない
・ライトバック方式…CPUがキャッシュライン(ブロック)の内容を書き換えても、すぐ
にはメインメモリに対して書き換え要求を出さず、CPUの処理がひ
まな時を見計らって書き換える方式
《欠点》メインメモリの内容とキャッシュラインとの内容が異なることが多いため、
高度なキャッシュ管理システムが必要
《利点》書き込み時のメモリ遅延が発生しにくい
(4) 置き換えアルゴリズム ([3] p.119)
キャッシュメモリ中の空きブロック枠がなくなった場合に、どのブロック枠を置き換えるか
を決める方法
・乱数法…順番にブロック枠を選ぶ
n ウェイの場合、n回の書き換えの間、キャッシュに残るため、ウェイ数が大き
ければ悪い方法ではない。
(一番古いキャッシュを書き換えることになる。first-in first-out)
・usage bit 法…各ブロック枠に対応して 1bit の usage bit を設け、アクセスがあると 1 にす
る。書き換えが必要な場合は、usage bit が 0 のブロック枠を乱数法で選ぶ。
なお、すべての usage bit が1になったら、全ての usage bit を 0 にする。
10.6. CISC とRISC([1] p.66~p.68)
(1) CISC (Complex Instruction Set Computer, 複合命令セットコンピュータ)
1個の命令で複雑な機能を実現する命令セットを備えた CPU
(2) RISC (Reduced Instruction Set Computer, 縮小命令セットコンピュータ)
使用頻度の高い単純な命令に限定した CPU
(3) RISC で処理を行う CISC
命令は CISC でありながら、内部的には RISC で処理を行う
CISC 命令→内部で RISC 命令に変換→RISC コアで命令実行
CISC
RISC
RISC+CISC
利点 高度な機能を数少な 高速
高速
・1命令当たりの実行時間が大幅に短縮
い命令で実現可能
CISC 命令との互換性あ
・パイプライン効率も良好
り
・ハードウェアのみでデコード可能
欠点
高速化が難しい
限定された命令しか使用できない
・1命令当たりのクロッ CISC 命令との互換性がない
ク数が増加
・回路が複雑化
制 御 マイクロプログラム
方式
布線論理
(ワイヤドロジック)
64
マイクロプログラム
+ワイヤドロジック
コンピュータアーキテクチャ
10.7. 制御アーキテクチャ
(1) 制御回路の役割
PC→メモリ(命令データ) → IR(命令レジスタ)
→ 制御回路(命令のデコード:命令解読) → 制御信号により各部の配線を切り替え
各部の配線切り替え方法1(制御ゲートを使用)
バス1 バス2 制御信号4
バス3
レジスタ1
制御ゲート
制御信号8
(スリーステートバッファ)
制御信号1
制御信号5
制御信号が1のとき
スイッチON
レジスタ2
制御信号9
例えば、制御信号1,5,11,10 が
制御信号2
「1」であれば、レジスタ1の値と
制御信号6
レジスタ2の値で演算が行われ、そ
レジスタ3
の結果がレジスタ3に格納される。
制御信号10
制御信号3
演算器
制御信号11
メモリ
制御信号7
制御信号12
各部の配線切り替え方法2(マルチプレクサを使用)
バス3
バス1 バス2
マルチ
プレクサ1
レジスタ1
制御信号4
例えば、
制御信号1が 00,
制御信号1
(2bit)
制御信号2が 01,
レジスタ2
制御信号5
マルチ
プレクサ2
レジスタ3
制御信号7が0,
制御信号 6 が1,
その他が0であれば、レジ
制御信号6
スタ1の値とレジスタ2の
値で演算が行われ、その結
果がレジスタ3に格納され
制御信号2 (2bit)
る。
演算器
マルチ
プレク
サ3
メモリ
制御信号3
制御信号7 (1bit)
65
コンピュータアーキテクチャ
一般的な構成例
制御信号4
バス1 バス2
バス3
R0
マルチ
プレクサ1
R1
¦
Rn
制御信号1
マルチ
プレクサ2
制御信号5
制御信号6
制御信号
命令
デコーダ
PC
制御信号2
アドレス
計算回路
演算器
制御信号7
IR
マルチ
プレク
サ3
制御
信号10
MDR
制御信号3
制御信号8
MAR
制御信号9
メモリ系
(2) 状態遷移図
命令サイクル例 F:命令のフェッチ(命令の取り出し)
D:命令のデコード(命令の解読)
E:有効アドレスの計算と命令の実行
WB:演算結果をメインメモリに書き戻す
制御信号の系列
F ①制御信号2が11、制御信号8が00、制御信号9が1、制御信号 10 が1
PC→マルチプレクサ2→バス2→アドレス計算回路→マルチプレクサ3→MAR→メモリ→IR
D ②IR→命令デコーダ→制御信号(命令に従い制御信号の時系列が生成)
E ③実行
命令によって変化
CPU の内部状態によって変化
メモリ系の状態によって変化
F
D
E
WB
状態遷移図
66
コンピュータアーキテクチャ
(3) 制御方式
・布線論理(ワイヤドロジック)制御方式
制御用論理回路を直接ハードウェアによる順序回路で実現する方式
【利点】高速
【欠点】制御回路の設計や修正が困難
RISC で用いられることが多い
・マイクロプログラム制御方式
制御用論理回路をマイクロプログラム(firmware; ファームウェア)という一種のプ
ログラム(ソフトウェア)によって制御する方式
【利点】制御回路の設計や修正が容易
ハードウェアとソフトウェアの役割分担の調整が容易
【欠点】布線論理制御方式より低速
CISC で用いられることが多い
(4) 布線論理(ワイヤドロジック)制御方式
ステートマシン(state machine)
IR
D
組み合わせ
順序論理回路
F
D
D
D
E
制御信号
制御信号
D
WB
制御信号
各部の制御信号の時系列
この制御メモリには,超高速
(5) マイクロプログラム制御方式
メモリを使用する必要あり。
【水平型】
マイクロプログラム
・マイクロプログラムの容量が
次命令アドレス
マイクロ命令
大きくなる。
10行
11
0011000001110
アドレス
デコーダ
マイクロ命令
アドレス
20行
20
0
マイクロプログラムカウンタ
条件信号
IR
1110001110000
1111111111111
マイクロ命令レジスタ
各部の制御信号
制御ゲート数分(20~100bit)
67
コンピュータアーキテクチャ
【垂直型】
・マイクロプログラムの容量が小さい。
・水平型より低速。
アドレス
デコーダ
短い
次命令アドレス マイクロ命令
マイクロ命令
アドレス
マイクロプログラムカウンタ
条件信号
マイクロ命
令レジスタ
IR
デコーダ
各部の制御信号
(6) 仮想マシン
マイクロプログラム制御コンピュータの制御メモリが書き換え可能であれば、
マイクロプログラムを書き換えることによって、命令セット等を変更することができる。
→書き換えたマイクロプログラムによって様々なマシンをエミュレーション(模擬)する
ことができる。このようなコンピュータを仮想マシンという。
(7) 制御回路
同期式: 無駄時間あり
回路が簡単で、設計保守が容易
非同期式:高速
ハザードが問題となるため、回路が複雑になり、設計保守が困難
(8) 制御回路の設計手順
① 制御回路への入出力信号を考え、ブロック図を作成
② 制御状態(state)を決定
③ 状態遷移図作成
④ 真理値表作成し、論理回路の最適化(この部分は、自動化プログラムを使用することが
多い)
68
コンピュータアーキテクチャ
10.8. マルチプロセッサ技術
マルチプロセッサシステム…CPUの数を増やし処理能力向上を図ったシステム
(1) 密結合型マルチプロセッサシステム
すべてのCPUで同一のメモリを共有
マルチプロセッサに対応した単一のOSで複数のCPUを並列動作
どのCPUも対等な対称型マルチプロセッサ(SMP: Symmetric Multi Processor)が多い
【対応OS】Windows2000, Windows XP, Linux など
(2) 疎結合型マルチプロセッサシステム
CPU毎にメインメモリ、OSを持つ
超並列プロセッサ(MPP: Massively Parallel Processor)とも呼ばれる
多数のノード(CPUとメインメモリ、入出力装置)が高速な専用ネットワークによ
り相互接続
【クラスタリング】複数のコンピュータを束ね、全体として超高速な1台のコンピュ
ータとして動作させる技術
負荷分散:ロードバランシング(処理をすべてのノードに分散)
高信頼性、高可用性:フォールトトレラント(あるノードが障害時に他のノード
がカバー)
【ピアツーピアコンピューテング】ネットワークで接続されたコンピュータ同士で直
接やり取りしあうことにより、コンピュータのリソース(CPU,HDDなど)
を共有しあう技術
例:WinMX など
10.9. 拡張バス
(1) 入出力制御方式
・直接制御方式…メインメモリと入出力装置との間でデータ転送を行う際に、CPUが
直接制御することにより、CPUを経由してデータ転送を行う方式
入出力処理を行っている間、CPUは別の処理を行えず、CPUの
処理効率が低下する。
・DMA方式 …DMA コントローラと呼ばれるデータ転送専用の制御装置を用いるこ
とにより、CPUを介さずにメインメモリと入出力装置との間でデ
ータ転送を行う方式
入出力処理を行っている間、CPUは別の処理を行えるが、メイン
メモリにはアクセスできない。
メインメモリ
×
CPU
入出力
入出力の指令
入出力動作の
完了通知
69
DMAコント
ローラ
入出力装置
コンピュータアーキテクチャ
(2) 拡張バス規格
ISA (Industry Standard Architechture) … バス幅 16bit, 最大転送速度 8MB/s
PCI (Peripheral Component Interconnect) … バス幅 32bit または 64bit
最大転送速度 133MB/s(32bit,33MHz 動作), 533 MB/s(64bit,66MHz 動作),
AGP (Accelerated Graphics Port) … グラフィックス向け専用バス規格
(3) IRQ(Interupt Request : 割り込み要求)
PC/AT 機では、8 個のIRQを処理できる PIC(Programmable Interupt
Controller : Intel 8259A)を2個使用し、15 個(16 個のうち、ひとつは PIC 同士の接
続に使用)の入出力要求を受け付けられる。
IRQ15 個 … 不足
PCI バスでは、レベルトリガ方式(レベルセンス方式 : INTA# ~ INTD# の4つの
割り込み信号がある)を採用し、1個のIRQを4台のIO装置で共有できる。
コントロール パネル中のシステムを起動し、ハードウェアタグからデバイスマネー
ジャーを選択すると各種デバイスの状態を知ることができます。この中から、表示メ
ニューの「リソース(種類別)
」を選択し、IRQ を見ると、現在の IRQ の割り当てを
確認することができます。
70
コンピュータアーキテクチャ
(4) I/O ポート
CPU と IO 装置間でデータをやり取りするための特殊なメモリ空間(64kB)
各装置が独立してアクセスできるように、IO 装置間で I/O ポートを重複しないように
割り当てる。
IO ポート
アドレス
0000
|
000F
I/O 空間
入出力装置
DMAコント
ローラ
¦
0060
CPU
¦
キーボード
0064
¦
(5) PnP(プラグアンドプレイ)
IRQ や IO ポートアドレスの割り当てを PnP と呼ばれる機能によって自動化
71
コンピュータアーキテクチャ
10.10. 補助記憶装置
(1) シリアル転送とパラレル転送
シリアル転送 … 1本のデータ信号線、1bit ずつ順番に転送
【例】RS-232C, USB, IEEE1394, シリアル ATA
パラレル転送 … 複数本のデータ信号線, 複数 bit 同時に転送
【例】セントロニクスインターフェース(プリンタなど)
ATA インターフェース(パラレル ATA), SCSI
(2) ATA インターフェース
IDE インターフェース … ハードディスクのみ,528MB, 2台まで
(Intergrated Drive Electronics または Integrated Device Electronics)
E-IDE インターフェース … 528MB を超える HDD などを4台まで接続可能
(Enhaced IDE)
ANSI によって ATA 規格として標準化され、ATA イン
ターフェースと呼ばれるようになった。
内臓機器向けのインターフェースとして用いられるこ
とが多い。
UltraATA … クロックの立ち上がりと立ち下りでデータ転送
(Ultra ATA/133 133MB/s)
パラレル
ATA コント
ローラ
マスター
機器
スレーブ
機器
セカンダリチャネル
機器
マスター
機器
スレーブ
機器のジャンパーなどで設定
(3) SCSI(Small Computer System Interface)
サーバ向けの高性能なストレージ用インターフェースとして使用されることが多い。
8 台または 16 台の機器を接続できる。
機器のスイッチ等で SCSI ID (0~7 または 0~15)を指定することにより、機器を区
別するため、装置ごとに異なる SCSI ID を指定する必要がある。
SCSI 方式
SCSI-1
Fast SCSI
Fast Wide SCSI
Ultra SCSI
Wide Ultra SCSI
Ultra2 SCSI
Ultra160 SCSI
Ultra320 SCSI
最大データ転送速度[MB/s]
5
10
20
20
40
80
160
320
72
データ幅[bit]
8
8
16
8
16
16
16
16
最大接続台数
8
8
16
8
16
16
16
16
コンピュータアーキテクチャ
SCSI
ホストバス
アダプタ
機器
機器
機器
機器
ターミネータ
(4) USB(Universal Serial Bus)
外付け機器向け
USB ハブを最大5段、最大 127 台の IO 機器を接続可能
ケーブル長は最大 5m
USB 1.1 … フルスピード(FS) 12Mbps
ロースピード(LS) 1.5Mbps
USB 2.0 … ハイスピード(HS) 480Mbps
(60MB/s)
ルートハブ
機器
USB ハブ
機器
機器
USB ハブ
機器
10.11. ストレージ技術
(1) RAID0(ストライピング)
複数の HDD に並列書込み(分散書込み)し、アクセス速度向上
コンピュータか
ら見える構造
分散書き込み
A1
A2
A3
B1
B2
B3
A1
A2
A3
B1
B2
B3
C1
C2
C3
HDD1
HDD2
HDD3
C1
C2
C3
73
コンピュータアーキテクチャ
(2) RAID1(ミラーリング)
2台の HDD に同じデータを書込み、信頼性向上
コンピュータか
ら見える構造
複製
A
B
C
A
A
B
B
C
C
HDD1
HDD2
(3) RAID5
ブロック単位で複数の HDD に分散書込み(アクセス速度向上)
+パリティをブロックごとに分散書込み(信頼性向上)
+パリティを書く HDD をローテーション(アクセスのバランス化)
コンピュータか
ら見える構造
A1
ブロック単位で分散書き込み,分散書き込み
A2
B1
B2
C1
C2
A1
A2
AP
BP
B1
B2
C2
CP
C1
HDD1
HDD2
HDD3
74
コンピュータアーキテクチャ
10.12.
練習問題
1.以下の問いに答えよ。空欄には適切な語句を埋めよ。
(1) 機械語命令は、 A 部と B 部から構成され、 A 部で操作の種類を指定し、 B 部で操作
対象の値,レジスタ指定,アドレスなどを指定する。 B 部に1つのオペランド(アドレス)を指
定する命令を C 命令、2つのオペランド(アドレス)を指定する命令を D 命令、3つのオペ
ランド(アドレス)を指定する命令を E 命令という。
C 命令を基本とする計算機は F 型計算機と呼ばれ、 D 命令や E 命令を基本とす
る計算機は G 型計算機と呼ばれる。また、 B 部を持たない計算機は H と呼ばれる。
(2) 有効アドレス(実効アドレス)とは?
(3) アドレス修飾方式とは有効アドレスを指定するためのさまざまな規則である。以下のアドレス修
飾方式を説明せよ。
A.直接アドレス指定方式
B.間接アドレス指定方式
C.基底(ベース)アドレス指定方式
D.PC 相対アドレス指定方式
E.指標(インデックス)アドレス指定方式
(4) プログラムは命令の実行手順が記述されたものである。命令の実行はプログラムカウンタが指し
示すメインメモリ上の番地に従って、命令の取り出し段階と命令実行段階を繰り返す。この過程
を A サイクルという。
命令の実行には、1 個の命令の全ステージを終了してから次の命令に移る B 制御方式、複
数の命令実行をステージごとにずらして並列処理する C 制御方式がある。
また、 C 制御方式を発展させ、命令実行の各ステージをさらに細かく分割しパイプライン動
作の効率を向上させたものは、 D と呼ばれる。
さらに複数のパイプラインを設けることにより複数の命令を同時に実行する技術は E と呼
ばれる。
(5) パイプラインハザードの要因を3つ挙げよ。
(6) キャッシュメモリとメインメモリのマッピングの単位を A という。マッピングには、対応づけが番
地ごとにあらかじめ決定されている B 方式、メインメモリの任意のブロックをキャッシュの任意
のブロックにマッピングできる C 方式、 B 方式と C 方式の中間にあたる D 方式があ
る。
(7) キャッシュメモリの書き込み方式には E 方式と F 方式がある。 E 方式はCPUがキャッシ
ュラインの内容を書き換えたら、メインメモリ上の内容もすぐに書き換える方式であり、メインメモ
リの内容とキャッシュラインとの整合を常にとるため安全であるが、書き込み時のメモリ遅延はほ
とんど改善されない。
一方、 F 方式はCPUがキャッシュラインの内容を書き換えても、すぐにはメインメモリに対
して書き換え要求を出さず、CPUの処理がひまな時を見計らって書き換える方式であり、メイン
メモリの内容とキャッシュラインとの内容が異なることが多いため、高度なキャッシュ管理システ
ムが必要となるが、書き込み時のメモリ遅延が発生しにくい。
75
コンピュータアーキテクチャ
(8) キャッシュメモリ中の空きブロック枠がなくなった場合に、どのブロック枠を置き換えるかを決め
る置き換えアルゴリズム には、 G 法と usage bit 法などがある。 G 法では、順番にブロック
枠を選ぶ。一方、usage bit 法は、
H
とい
う方法である。
(9) 1個の命令で複雑な機能を実現する命令セットを備えた CPU は I と呼ばれ、使用頻度の高い
単純な命令に限定した CPU は J と呼ばれる。 I には K 制御方式が使用されることが多
く、 J には L 制御方式が使用されることが多い。 L 制御方式は、制御用論理回路を
M
で実現する方式で、高速に制御できるが、
N
という欠点がある。一
方、 K 制御方式は、制御用論理回路を
O
によって制御する方式で、制御
回路の設計や修正が容易、ハードウェアとソフトウェアの役割分担の調整が容易であるが、
P
という欠点がある。
(10) PC では入出力装置が必要なときだけ CPU に直接割り込めるような仕組みとして、 Q と呼ば
れる信号を用いている。また、CPU と装置の間でデータをやり取りしたりステータス情報を読み
出すために、インテルアーキテクチャの PC では I/O 空間という特別なメモリ空間(64kB)を設け
ている。この I/O 間の任意の領域にアクセスするために用いられるのが R である。現在では
Q や R の設定は S と呼ばれる機能によって自動化されている。
(11) 拡張バスの規格には、 T 、 U 、 V などがある。
T のデータ転送速度は8MB/sec で現在では U にとって代わられています。また、 V は
グラフィックス向けの専用バス規格として利用されている。
(12) 一本のデータ信号線で 1 bit ずつ順番にデータ転送することを W 転送、複数本のデータ信
号線で複数 bit 同時に転送することを X 転送という。
2.キャッシュメモリのアクセス時間が 10 ns、メインメモリのアクセス時間が 200 ns、ヒッ
ト率が 0.9 のとき、平均メモリアクセス時間を求めよ。
3.キャッシュメモリの容量が 256K バイト、主記憶の最大容量が 4G バイトのメモリ系にお
いて、
ブロックの大きさが 64 バイトの 8 ウェイ set associative mapping を採用したとき、
メインメモリブロックの列(群番号、Index)及び行(群内ブロック番号、Tag)の指定に何
ビット必要か。またディレクトリ全体で何ビット必要か。
4.以下の語句は何を意味するか説明せよ。
(1) USB
(2) ATA インターフェース
(3) SCSI インターフェース
(4) RAID 0
(5) RAID 1
(6) RAID 5
76
コンピュータアーキテクチャ
参考文献
[1]
[2]
[3]
[4]
伊勢雅英「よくわかる最新 PC アーキテクチャの基本と仕組み」
(秀和システム)
原田益水「マイクロコンピュータのすべて」
(電波新聞社)
橋本昭洋「計算機アーキテクチャ」
(昭晃堂)
松島 守「Z− 80アセンブラ・シミュレータ SEASON/Win」
http://www.ishikawa-nct.ac.jp/lab/E/www/matsu.html
77
コンピュータアーキテクチャ
付録 命令コード表
r
LD
LD
LD
LD
LD
LD
LD
LD
LD
A, r
B, r
C, r
D, r
E, r
H, r
L, r
(HL), r
r, B2
r
ADD
ADC
SUB
SBC
AND
XOR
OR
CP
INC
DEC
A, r
A, r
r
A, r
r
r
r
r
r
r
ADD
ADC
SUB
SBC
AND
XOR
OR
CP
Z80
A, B2
A, B2
B2
A, B2
B2
B2
B2
B2
A
7F
47
4F
57
5F
67
6F
77
3E
A
87
8F
97
9F
A7
AF
B7
BF
3C
3D
B
78
40
48
50
58
60
68
70
06
B
80
88
90
98
A0
A8
B0
B8
04
05
C
79
41
49
51
59
61
69
71
0E
C
81
89
91
99
A1
A9
B1
B9
0C
0D
D
7A
42
4A
52
5A
62
6A
72
16
(1) データ転送命令1
E
H
L (HL)
7B 7C 7D
7E
43 44 45
46
4B 4C 4D
4E
53 54 55
56
5B 5C 5D
5E
63 64 65
66
6B 6C 6D
6E
73 74 75
1E 26 2E
36
D
82
8A
92
9A
A2
AA
B2
BA
14
15
(2) 演算命令
H
L (HL)
84 85
86
8C 8D
8E
94 95
96
9C 9D
9E
A4 A5
A6
AC AD
AE
B4 B5
B6
BC BD
BE
24 2C
34
25 2D
35
E
83
8B
93
9B
A3
AB
B3
BB
1C
1D
(3) 数値演算命令
コード
メモ
C6
A Å A + B2
CE
A Å A + B2 + CY
D6
A Å A - B2
A Å A - B2 - CY
DE
E6
A Å A AND B2
A Å A Ex-OR B2
EE
F6
A Å A OR B2
FE
A - B2
フラグのみ変化
LD
LD
LD
LD
LD
LD
LD
(4) 2バイトデータの命令
r1r2 BC DE HL SP
メモ
LD r1r2,B3B2 01 11 21 31 r1r2ÅB3B2
ADD HL,r1r2
INC r1r2
09 19 29 39 HLÅHL+r1r2
03 13 23 33 r1r2År1r2+1
DEC r1r2
0B 1B 2B 3B r1r2År1r2-1
LD
EX
EX
JP
LD
78
メモ
A Å
B Å
C Å
D Å
E Å
H Å
L Å
(HL)
r Å
r
r
r
r
r
r
r
Å r
1バイトの数値 B2
メモ
A
A
A
A
A
A
A
A
r
r
Å A
Å A
Å A
Å A
Å A
Å A
Å A
–r
Å r
Å r
+r
+ r + CY
–r
– r - CY
AND r
Ex-OR r
OR r
フラグのみ変化
+1
– 1
(5)データ転送命令2
Z80
コード
メモ
(BC), A
02
(BC) Å A
A, (BC)
0A
A Å (BC)
(DE), A
12
(DE) Å A
A, (DE)
1A
A Å (DE)
(B3B2), A
32
(B3B2)Å A
A, (B3B2)
3A
A Å (B3B2)
(6)データ転送命令3
Z80
コード
メモ
(B3B2), HL
22
(B3B2)Å L
(B3B2+1)Å H
HL, (B3B2)
2A
L Å (B3B2)
H Å (B3B2+1)
(SP), HL
E3
(SP)
L
(SP+1)
H
DE, HL
EB
DE
HL
(HL)
E9
PC Å HL
SP,HL
F9
SP Å HL
コンピュータアーキテクチャ
JP
JP
JP
JP
JP
JP
JP
JP
JP
(7) ジャンプ命令
Z80
コード
B3B2
C3
Z, B3B2
CA
NZ, B3B2
C2
C, B3B2
DA
NC, B3B2
D2
PE, B3B2
EA
PO, B3B2
E2
M, B3B2
FA
P, B3B2
F2
Z80
RLCA
RRCA
RLA
RRA
(12) 入出力・割り込み命令
Z80
コード
メモ
OUT (B2), A
D3
(IO B2) Å A
IN A, (B2)
DB
A Å (IO B2)
DI
F3
割り込み禁止
EI
FB
割り込み許可
RIM
20
AÅマスクの状態
SIM
30
マスクの状態ÅA
(8) コール命令
Z80
コード
CALL B3B2
CD
CALL Z, B3B2
CC
CALL NZ, B3B2
C4
CALL C, B3B2
DC
CALL NC, B3B2
D4
CALL PE, B3B2
EC
CALL PO, B3B2
E4
CALL M, B3B2
FC
CALL P, B3B2
F4
Z80
DAA
CPL
SCF
CCF
NOP
HALT
(9) リターン命令
Z80
コード
RET
C9
RET Z
C8
RET NZ
C0
RET C
D8
RET NC
D0
RET PE
E8
RET PO
E0
RET M
F8
RET P
F0
S
Z
MSB
フラグレジスタ
0
AC 0
P
1
C1
D1
E1
(13) その他の命令
コード
メモ
27
BCD コード Å A
2F
A Å A の反転
37
CYÅ1
3F
CYÅCY の反転
00
No Operation
76
STOP
(14) アセンブラの擬似命令
擬似命令
メモ
ORG
プログラム・データの先頭番地
を示す。
END
プログラムの最後につける。
EQU
ラベルに数値を割り当てる。
DB
1バイト単位のデータを定義す
る。
DW
2バイト単位のデータを定義す
る。
DS
メモリ領域をバイト単位で確保
する。
CY
LSB
(10) プッシュ・ポップ命令
r1r2 BC DE HL AF
PUSH r1r2,
C5 D5 E5 F5
POP r1r2
(11) 回転命令
コード
メモ
07
CY Å A7
A0 Å A7
0F
CY Å A0
A7 Å A0
17
CY Å A7
A0 Å CY
1F
CYÅ A0
A7 Å CY
F1
79
71