H2:マイクロプロセッサ 岡本 吉央 1 日程 第1回 第2回 イントロダクション マイクロ動作の理解 基本プログラミング (2バイト乗算) 第3回 第4回 応用プログラミング (図形描画) 応用プログラミング (メロディー出力) 2 コンピュータの利用 ユーザ 入力 どのような仕組みで動 いているのか? 出力 コンピュータ 3 コンピュータ・ハードウェア 入 力 装 置 出 力 装 置 記憶装置 処 理 装 置 4 コンピュータ・ソフトウェア 入 力 装 置 出 力 装 置 記憶装置 ア プ リ ケ ー シ ョ ン プ ロ グ ラ ム シ ス テ ム プ ロ グ ラ ム 処 理 装 置 5 疑問 処理装置 (CPU) はプログラム(≒ソフトウェア)を どのように解釈しているのか? 高級言語による プログラム 機械語による プログラム 6 (今のところの) 回答 コンパイラ,アセンブラと呼ばれる プログラムを変換するプログラムを使う コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 7 ことばの整理:機械語 CPUが直接理解し実行できる言語のこと プログラムは0と1の列から構成される CPUごとに異なる コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 8 ことばの整理:高級言語 人間が使いやすいプログラミング言語 C,C++,Java,Perlなど CPUごとに異ならない コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 9 ことばの整理:アセンブリ言語 機械語を人間にわかりやすくした言語 命令が機械語と (ほぼ) 1 対 1 に対応 CPUごとに異なる コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 10 ことばの整理:コンパイル 高級言語によるプログラムを アセンブリ言語によるプログラムに (または機械語によるプログラムに) 翻訳すること コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 11 ことばの整理:アセンブル アセンブリ言語によるプログラムを 機械語によるプログラムに 翻訳すること コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 12 ことばの整理:逆アセンブル 機械語によるプログラムを アセンブリ言語によるプログラムに 翻訳すること コ ン パ イ ラ 高級言語による プログラム 逆 ア セ ン ブ ル アセンブリ言語に よるプログラム 機械語による プログラム 13 この実験の流れ 1. アセンブリ言語によるプログラミング 2. 作成したプログラムのアセンブル (手作業) 3. 実行 14 コンピュータ・ソフトウェア 入 力 装 置 出 力 装 置 記憶装置 ア プ リ ケ ー シ ョ ン プ ロ グ ラ ム シ ス テ ム プ ロ グ ラ ム 処 理 装 置 15 この実験で用いるハードウェア KUE-CHIP2 教育用の8ビットマイクロプロセッサ マイクロプロセッサ ≒ CPU 16 KUE-CHIP2の構造 (p. 14,図1) 17 KUE-CHIP2の各部:バス 入力バス:入力部分とCPU内部を結ぶ 出力バス:出力部分とCPU内部を結ぶ 18 KUE-CHIP2の各部:ALU Arithmetic and Logic Unitの略 演算論理装置 算術演算,論理演算,アドレスの計算を 行なう 19 KUE-CHIP2の各部:ACC アキュムレータ (accumulator) 演算に利用するレジスタ.8ビット 演算対象,演算結果を保持 20 KUE-CHIP2の各部:IX インデックスレジスタ (index register) 演算に利用するレジスタ.8ビット 演算対象,演算結果を保持 修飾アドレス指定のときのアドレス修飾 にも使用 21 KUE-CHIP2の各部:FLAG フラグレジスタ (flag register) 演算・シフト結果により変化.4ビット 0 0 0 0 CF VF NF ZF 桁上がりフラグ 桁あふれフラグ 負フラグ ゼロフラグ 22 KUE-CHIP2の各部:PC プログラムカウンタ (program counter) 次に実行する命令のメモリ上での アドレスを保持.8ビット 23 KUE-CHIP2の各部:MAR メモリアドレスレジスタ メモリ操作の対象とするアドレスを保持. 8ビット 24 KUE-CHIP2の各部:IR 命令レジスタ メモリから読み出した命令を保持. 8ビット 25 KUE-CHIP2の各部:内部メモリ 512バイト.バイト単位の番地指定 プログラム領域:0~255番地 プログラムまたはデータの格納 データ領域:256番地~511番地 データの格納 26 KUE-CHIP2でのプログラミング 独自のアセンブリ言語で行なう プログラムはメモリのプログラム領域に 置かれる (プログラム内臓方式) 0番地に置かれた命令から順番に 実行される 27 KUE-CHIP2のアセンブリ言語 命令:1バイトか2バイト 命令の種類:p16,表1を参照 言語仕様:附録Aを参照 28 プログラム例 (p23,リスト2) アドレス データ 命令 00: 0110 001- 0000 02: 0001 0--- OUT 03: 0100 0111 RLL 04: 0011 0000 0000 0001 LD 0010 BA オペランド ACC, 01h ACC 02h 「01」という値をACCに格納する 常に02番地へ戻る ACCの内容を論理左回転し,ACCに入れる ACCの内容を出力バッファ(OBUF)に出力する 機械語による アセンブリ言語による プログラム プログラム アセンブラ 29 アセンブルの方法 (1/4) p29,A.2 命令セットを参照 「LD ACC,01h」のアセンブル 0 1 1 0 0 0 1 - 0 0 0 0 0 0 0 1 A Rsm A 0 =1 0:ACC 0 0 B A LD A 0 =1 1:IX 1 0 A ST 0 1 1 1 A SBC 1 0 0 0 A B = 000:ACC 1 sB =m 000:IX × Rotate sm BB = 01-:即値 ○ LoaD BB = 100:直接 ◎ STore(P) BB = 101:直接 ○ SuB with (D) Carry B = 110:修飾 (P) B = 111:修飾 (D) 30 アセンブルの方法 (2/4) p29,A.2 命令セットを参照 「OUT」のアセンブル 0 0 0 1 0 - - 0 1 0 1 - - - - × OUT 0 0 0 1 0 - - - × OUTput IN 0 0 0 1 1 - - - × INput RCF 0 0 1 0 0 - - - × Reset CF 31 アセンブルの方法 (3/4) p29,A.2 命令セットを参照 「RLL ACC」のアセンブル 0 1 0 0 0 1 1 1 A Rsm A 0 = 1 0:ACC 0 0 00 RA LD A 0 = 1 1:IX 1 0 01 LA s m ARight 1 sArithmetically m × Rotate sm ALeft Arithmetically B ○ LoaD ST 0 RL 1 1 1 10 ARight BLogically ◎ STore SBC 1 LL 0 0 1 01 ALeft Logically B ○ SuB with Carry 32 アセンブルの方法 (4/4) p29,A.2 命令セットを参照 「BA 02h」のアセンブル 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 c c - - × Reset CF 00 0- Always - × Set CF 01 0- on- oVerFlow RCF 0A 0 01 00 SCF 0VF 0 11 00 Bcc 0NZ 0 01 01 0 1c onc Not ◎ Branch cc Zero Ssm 0Z 1 10 00 0A 10 ons Zero m × Shift sm 33 プログラム例 (p23,リスト2) アドレス データ 命令 00: 0110 001- 0000 02: 0001 0--- OUT 03: 0100 0111 RLL 04: 0011 0000 0000 0001 LD 0010 BA オペランド ACC, 01h ACC 02h 「-」は0か1で置き換える (どちらでもよい) 34 プログラム例 (p23,リスト3) アドレス データ 命令 00: 0110 0010 0000 02: 0001 0000 OUT 03: 0100 0111 RLL 04: 0011 0000 0000 0001 LD 0010 BA オペランド ACC, 01h ACC 02h アセンブル完了 35 プログラムの実行 第2.5節に沿って行なう (p.21~25) 注意: 実行前にはRESETを押すこと 全員行なったら次の説明... 36 今日の実験内容 命令がどのように実行されているか 理解する フラグの働きを理解する 37 命令はどのように実行されるか? クロックに沿って実行 クロック1周期分 → 1つの実行フェーズ KUE-CHIP2での命令の実行: 各命令は3から5フェーズで実行 P0,P1:各命令共通 P2以降:各命令相違 p17,表2を参照 38 各フェーズの動作:P0 メモリのプログラム領域から 次に実行する命令を取り出す準備 次に実行する命令の場所は PC (プログラムカウンタ) が示す 実際の動作: (PC)→MAR PC++ PCの内容をMARに転送 PCの内容を1増やす 39 各フェーズの動作:P1 命令を読み込む 実際の動作: (Mem)→IR: MARの内容を番地とするメモリの 内容が命令レジスタに転送される 40 各フェーズの動作:P2 命令レジスタに読み込んだ命令を 命令デコーダが解読し, 命令に応じた処理を行なう 2バイト命令であると分かった場合, 命令の2バイト目を読む準備をする p17,表2を参照 41 実際に見てみる:リスト1 アドレス データ (p 18) ラベル 命令 オペランド D1: EQU 80h D2: EQU 81h ANS: EQU 82h 00: 64 80 LD ACC,[D1] 02: B4 81 ADD ACC,[D2] 04: 74 82 ST ACC,[ANS] 06: 0F HLT END 80: 03 81: FD アセンブル結果の16進表示 プログラムの実行を停止する メモリ80番地の内容を03とし, メモリのプログラム領域D2番地の メモリのプログラム領域D1番地の メモリのプログラム領域ANS番地に 「D1」を見たら「80h」だと思う メモリ81番地の内容をFDとする 内容とACCの内容を加算する 内容をACCに格納する ACCの内容を格納する (変数宣言,初期化のようなもの) 42 実行のトレース LD ACC,[D1] A p17,表2を参照 B Bの部分 P0 ACC IX LD d [d] (d) P1 P2 P3 P4 (A)→B (PC)→MAR PC++ (Mem)→IR (PC)→MAR PC++ (Mem)→A (Mem)→MAR (Mem)→A 43 実行のトレース LD ACC,[D1] 00 00 00 00 00 00 000: 001: 002: ... 080: 081: 64 80 B4 03 FD 44 実行のトレース LD ACC,[D1] P0: (PC)→MAR, PC++ 00 00 00 00 00 01 00 000: 001: 002: ... 080: 081: 64 80 B4 03 FD 45 実行のトレース LD ACC,[D1] P1: (Mem)→IR 64 00 00 00 00 01 00 000: 001: 002: ... 080: 081: 64 80 B4 03 FD 46 実行のトレース LD ACC,[D1] P2: (PC)→MAR, PC++ 64 00 00 00 01 02 00 01 000: 001: 002: ... 080: 081: 64 80 B4 03 FD 47 実行のトレース LD ACC,[D1] P3: (Mem)→MAR 64 00 00 00 02 01 80 000: 001: 002: ... 080: 081: 64 80 B4 03 FD 48 実行のトレース LD ACC,[D1] P4: (Mem)→A 64 00 00 03 00 02 80 000: 001: 002: ... 080: 081: 64 80 B4 03 FD 49 今日の実験の内容 (1) フェーズごとの動作 (マイクロ動作) を 実際に追跡 (トレース) する リスト1を使用 50 今日の実験内容 (2) フラグレジスタの働きを理解する 桁上がりフラグ (Carry Flag, CF) 桁あふれフラグ (Overflow Flag, VF) 演算結果に桁あふれが生じると 1 負フラグ (Negative Flag, NF) 演算結果に桁上がりが生じると 1 演算結果が負になると 1 ゼロフラグ (Zero Flag, ZF) 演算結果がゼロになると 1 51 実験課題 3.1 その1 リスト1のプログラムをフェーズ単位で 実行 (シングルフェーズモードを利用) (1) 2 + 3 = ? 実行開始から実行終了まで, 観測可能なレジスタ,バスをトレース (記録用紙は配布) 52 実験課題 3.1 その2 リスト1のプログラムをフェーズ単位で 実行 (シングルフェーズモードを利用) (2)~(6) ADD開始前からADD終了後まで, フラグレジスタのみをトレース 負の数は「2の補数」によって表現 53 実験課題 3.1 その3 リスト1のプログラムの ADD命令をADC命令に変更 指導書にない課題 (2)~(6) ADC開始前からADC終了後まで, フラグレジスタのみをトレース 54 実験課題3.1 注意 「6」と「b」の読み間違いに注意 負の数には「2の補数表現」を用いる 「64」は何と読む? 55 実験課題 3.1 (1) 実行開始から実行終了まで, 観測可能なレジスタ,バスをトレース (2)~(6) ADD開始前からADD終了後まで, フラグレジスタのみをトレース ADD命令をADC命令に変更して, ADC開始前からADC終了後まで, フラグレジスタのみをトレース 56 2の補数表現 8ビットで数を表現する場合 45 -45は? 0 0 1 0 1 1 0 1 -45の8ビットにおける2の補数表現 1 -45 (負の数の表現法) 1 0 1 0 0 1 1 実際足すと? 1 0 0 0 0 0 0 0 0 57 第1回のまとめ 58 ADD命令とADC命令の違い ADD命令:加算命令.CFを考慮しない ADC命令:加算命令.CFを考慮する 「CFを考慮する」とは… 演算結果によって,CFを変更する CFが1であるとき,加算結果に1を足す 59 レポートでの必須検討事項 (p. 26参照) (1)について 各命令の各フェーズでの動作を 指導書 p. 16~20 に倣って 図とことばの両方を使ってまとめること (2)~(6)について 実験結果から,フラグレジスタの働き, および,ADD命令とADC命令の違いを まとめること 60 レポートの作成補助 (1)について p19, 20のような図のファイルを 以下の手段で入手可能 インターネット経由: http://www.algo.ics.tut.ac.jp/~okamotoy/ lect/H2/ 大学ページ→教員紹介→情報工学系→岡本吉央→ 研究室Web→Teaching→Micro-Processors メモリスティックで直に 61 次回 実験課題3.2 乗算プログラムの作成 符号無し2バイト精度の2数の積 格納する番地は指導書の指示通りで なくても可 演算結果は2バイトに収まると仮定 必須の予習:プログラムの作成と アセンブル 62 符号無し2バイトどうしの乗算 0 0 0 0 0 0 1 1 1 0 1 0 1 0 1 1 × 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1バイト = 8ビット 63 第2回 実験課題3.2 乗算プログラムの作成 符号無し2バイト精度の2数の積 格納する番地は指導書の指示通りで なくてもよい 演算結果は2バイトに収まると仮定する 必須の予習:プログラムの作成と アセンブル 64 補足:アドレシング・モード アドレシング:オペランドの表現 KUE-CHIP2のアドレシング・モード (p. 27~29参照) ACC,IX:ACC,IXの内容がデータ 即値:オペランドそのものがデータ 直接:オペランドがメモリのアドレス そのアドレス上の内容がデータ 修飾:「オペランド+IXの内容」が メモリのアドレス そのアドレス上の内容がデータ 65 第2回 実験課題3.2 乗算プログラムの作成 符号無し2バイト精度の2数の積 格納する番地は指導書の指示通りで なくても可 演算結果は2バイトに収まると仮定 必須の予習:プログラムの作成と アセンブル 66 進め方 最低,グループで1つは以下を行なう 作成したプログラムの入力 プログラムを確認するため ホワイトボードの(1)~(4)を計算 それらが正しく計算できたら (A)と(B)を計算.実行時間を計測 ホワイトボードに実行時間とプログラム のメモリ消費量(単位:バイト)を記入 67 終わり方 16:00になったら 「今日のまとめ」と「次回の説明」を 終わったグループはこれで終了 終わっていないグループは続行 68 第2回のまとめ 69 第2回の必須検討事項 (p. 26参照) 今日用いたプログラムのリストと フローチャートを載せてプログラムの 説明 他のグループのプログラムと比較 論点1:実行時間 論点2:プログラムのメモリ消費量 注意:他グループのプログラムは掲載不要だが, 簡単な説明は記述 70 第2回の必須検討事項 (続) プログラムの実行時間の算定 p. 17表2 から 各命令のフェーズ数特定 1フェーズ = 1クロック周期 クロック周波数 = 100 Hz ∴ プログラム実行時間を理論的に算出可能 (1) 実行時間を決めるパラメータを特定 (2) 実行時間を与える公式を導出 (3) 公式からA,Bの実行時間理論値を算出 (4) 理論値と観測値の比較 71 第3回の説明:内容 (p. 25) 3.3 オシロスコープへの文字の出力 必須の予習:プログラムの作成と アセンブル 3.4(1) メロディーの出力 予習:軽く目を通してくる (細かい説明は次回) 推奨:電卓持参 72 オシロスコープへの文字の出力 出力バッファにDAコンバータを付けて 出力信号をオシロスコープへ DAコンバータ: ディジタル信号をアナログ信号に 変換する回路 1101 DAコンバータ 13 73 取り付けるDAコンバータの機能 出力バッファの8ビットの中の 上位4ビットを x座標 下位4ビットを y座標 とする x座標の取れる範囲は 0h~Fh y座標の取れる範囲は 0h~Fh 74 オシロスコープへの出力 LD ACC, 6Bh OUT F B 0 0 6 F 75 オシロスコープへの出力 LD ACC, 6Bh OUT F B 点を1つずつ表示 続けて表示すれば 全てが同時に 表示されるように 見える 0 0 6 F 76 注意点 1. 1つの点は「・」として表示され 「■」として表示されないので注意 2. ずっと表示されるようにすること (プログラムの図形表示部分は 停止しないループ内に来る) 3. オシロスコープの残像に注意 77 表示する文字・図形について 「A」以外の文字でもよい 図形でもよい 注意:適度に複雑なものを選ぶこと 78 余力がある場合 文字・図形を動かしてみる(右から左に) 79 メロディーの出力(1) 予習:付録B.1 (p. 30) を軽く読む 推奨:電卓持参 80 第3回 3.3 オシロスコープへの文字の出力 必須の予習:プログラムの作成と アセンブル 3.4(1) メロディーの出力 予習:軽く目を通してくる (細かい説明は後ほど) 推奨:電卓持参 81 注意 使用するDAコンバータは とても壊れやすいので, 大事に扱うこと (むやみに触らない) 特に,取り付け部分周辺の 配線に注意 取り付けも取り外しも 教員・TAが行ないます 82 進め方 14:30終了を目処に グループで最低1つは実行 オシロスコープの チャンネル1 → 赤 チャンネル2 → 青 グラウンド → 黒 と接続 14:30頃に次の説明を 83 メロディーの出力 KUE-CHIP2から波を出力し スピーカから音を出す 今日:音を出す仕組みの基礎 次回:メロディー出力プログラムの実行 84 音とは?? 音は空気の振動 (波) 音の三要素 大きさ 高さ 音色 ←波の振幅の大きさ ←波の周波数の高さ ←波の形 85 音を出す原理 KUE-CHIP2→DAコンバータ→スピーカ スピーカ: 電気信号を音(空気振動)に変換する装置 86 作る波 方形波 (矩形波):長方形の波 波の周期 T (秒) On Ta (秒) Tb (秒) Off T = Ta + Tb 87 音を出すプログラム (リスト4 p. 31) アドレス ラベル 命令 オペランド クロック数 00: L0: LD ACC, 0xFF 4 02: OUT 03: LD 4 波のOn部 を作る 4 4 SUB ACC, a ACC, 0x01 07: BNZ L1 4 09: LD ACC, 0x00 4 05: 0B: L1: OUT 0C: 自分で 決める 0E: L2: 10: 12: LD 4 4 SUB ACC, b ACC, 0x01 BNZ BA L2 L0 4 4 4 波のOff部 を作る 88 作る波:長さ 方形波 (矩形波):長方形の波 波の周期 T (秒) On Ta (秒) Tb (秒) Off Ta = (12+8a)T0,Tb = (16+8b)T0 (ただし,T0 = クロック周期 89 実験内容 3.4(1) p. 26 (a) オシロスコープによるクロック周期 の確認 スイッチCLKを中立に ダイヤルCLKFRQの「0」~「8」の周波数 を測定 信号はコネクタJP3より出力 90 実験内容 3.4(1) p. 26 (b) リスト4のa,bを設定 出力する音の周波数:440Hz (ラ) 最適な クロック周期T0,a,bを定める (計算) 91 実験内容 3.4(1) p. 26 (c) 440Hzの音の出力 リスト4の入力 CLKFRQの設定 DAコンバータを通してスピーカから出力 出力音が440Hz (誤差±1%) であることを 確認 92 第3回のまとめ 93 第3回の必須検討事項 (p. 26参照) (3) オシロスコープによる文字の出力 プログラムのリストを載せて, プログラムの特徴を説明 注:「他のグループとの美しさの比較」 は不要 94 第3回の必須検討事項 (p. 26参照) (4) メロディーの出力 (a) 誤差±1%の確認 どのように最適なa, bを計算したか? 計算過程も記述すること どのように確認を行なったか? 実際に誤差を計算すること 他の方法も考えられるか 95 第3回の必須検討事項 (p. 26参照) (4) メロディーの出力 (b) 精度を上げるための対策 KUE-CHIP2だけで対処する場合 (ソフトウェア上,プログラム上の工夫) そうでなくてもよい場合 (ハードウェア上の工夫) 96 次回の説明 3.4(2) メロディーの出力 簡単なメロディーを出力させる 必須の予習:プログラムの作成と アセンブル 参考:付録B.2とリスト5 (p. 31~32) 注意:リスト5は内容を理解してから 参考にすること 97 諸注意 メロディーの出力は無限に繰り返すこと p. 32表4「音階の周波数」を参考に 1オクターブ違う音 → 周波数が2倍違う 「休符」はどのように? (音を出すのは簡単.出さないのは?) 同じ音が続くと1つの長い音に聞こえる →対策が必要 98 第4回 3.4(2) メロディーの出力 簡単なメロディーを出力させる 必須の予習:プログラムの作成と アセンブル 参考:付録B.2とリスト5 (p. 31~32) 注意:リスト5は内容を理解してから 参考にすること 99 進め方 グループで最低1つは実行 DAコンバータの取扱いに注意 できたグループから終了 100 まとめ 必須検討事項 (p. 26) (4)(c) 各自のデータ表現の特徴 プログラムのリストを載せて,説明 データ表現: CPUが理解できる表現 01の列としての表現 例えば,「楽譜」は人間に理解できるよう にメロディーを表現している 101 まとめ 必須検討事項 (p. 26) (4)(d) 作成したメロディー出力法は 他のCPUにも流用できるか? 他のCPUの例を1つ挙げて考察 挙げたCPUの実行命令フェーズを調べ, それを踏まえて考察 (4)(e) 省略 (必須ではない) 102 まとめ 必須検討事項 (p. 26) (5) 自分が最もよく使用しているCPU (または,有名なCPU) について そのアーキテクチャを調べてまとめる 以下は (この課題での) 重要項目 レジスタ,命令セット,メモリ空間の特徴 は何か? 乗算命令はどのように実行されているか? 103 全体のまとめ 104 人間と機械の橋渡し 橋渡し = インタフェース コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 105 さらに勉強するために •これらは直接関係 実験 3学期 するもの コンパイラの作成 •間接的な関係にも CPUの論理設計 気を配って 講義 計算機構成論I (3年1学期) システム・プログラム論 (3年3学期) 言語処理系論 (3年3学期) 計算機構成論II (4年1学期) 106 H2:マイクロプロセッサ 岡本 吉央 107
© Copyright 2024 ExpyDoc