Comments
Description
Transcript
プログラミングⅠ(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