Transcript Document
計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94) 改訂:佐竹 純二 (作成:岡本 吉央) 1 コンピュータ:機械から見ると 論理回路 コンピュータ 2 コンピュータ:人間から見ると ユーザ 入力 どのような仕組みで動 いているのか? 出力 コンピュータ 3 コンピュータ・ハードウェア 入 力 装 置 出 力 装 置 記憶装置 処 理 装 置 4 コンピュータ・ソフトウェア 入 力 装 置 出 力 装 置 記憶装置 ア プ リ ケ ー シ ョ ン プ ロ グ ラ ム シ ス テ ム プ ロ グ ラ ム 処 理 装 置 5 疑問 処理装置 (CPU) はプログラム(≒ソフトウェア)を どのように解釈しているのか? 高級言語による プログラム 機械語による プログラム 6 (今のところの) 回答 コンパイラ,アセンブラと呼ばれる プログラムを変換するプログラムを使う コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 7 ことばの整理:機械語 CPUが直接理解し実行できる言語のこと プログラムは0と1の列から構成される CPUごとに異なる コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 8 ことばの整理:高級言語 人間が使いやすいプログラミング言語 C,C++,Java,Perlなど CPUごとに異ならない コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 9 ことばの整理:アセンブリ言語 機械語を人間にわかりやすくした言語 命令が機械語と (ほぼ) 1 対 1 に対応 CPUごとに異なる コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 10 ことばの整理:コンパイル 高級言語によるプログラムを アセンブリ言語によるプログラムに (または機械語によるプログラムに) 翻訳すること コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 11 ことばの整理:アセンブル アセンブリ言語によるプログラムを 機械語によるプログラムに 翻訳すること コ ン パ イ ラ 高級言語による プログラム ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 12 この実験の流れ 1. アセンブリ言語によるプログラミング 2. 作成したプログラムのアセンブル(手作業) 3. 実行(動作の理解) ア セ ン ブ ラ アセンブリ言語に よるプログラム 機械語による プログラム 13 この実験で用いるハードウェア KUE-CHIP2 教育用の8ビットマイクロプロセッサ ≒ CPU 8ビット=1バイト 0 0 0 1 0 0 1 1 13h ←16進数であることを示す 他にも13H,0x13など 14 KUE-CHIP2の構造 (p.77,図1) 15 KUE-CHIP2の各部:ALU 演算ユニット(Arithmetic and Logic Unit) 算術演算,論理演算,アドレスの計算を行う 16 KUE-CHIP2の各部:ACC アキュムレータ (accumulator) 演算に利用するレジスタ.8ビット 演算対象,演算結果を保持 17 KUE-CHIP2の各部:FLAG フラグレジスタ (flag register) 演算・シフト結果により変化.4ビット - - - - CF VF NF ZF 桁上がりフラグ 桁あふれフラグ 負フラグ ゼロフラグ 18 KUE-CHIP2の各部:PC プログラムカウンタ (program counter) 次に実行する命令のメモリ上での アドレスを保持.8ビット 19 KUE-CHIP2の各部:内部メモリ 512バイト.バイト単位の番地指定 プログラム領域:0~255番地 データ領域:256番地~511番地 511 1FF ~ 256 100 255 0FF ~ 0 データ 領域 プログラム 領域 000 01100010 20 KUE-CHIP2でのプログラミング 独自のアセンブリ言語で行う プログラムはメモリのプログラム領域に 置かれる (プログラム内蔵方式) 0番地に置かれた命令から順番に実行される 21 KUE-CHIP2のアセンブリ言語 命令の種類:p.80 表1を参照 命令仕様: p.91~94 付録A を参照 機械語フォーマット:1バイトか2バイト p.79 図4を参照 22 プログラム例 (p.84,リスト2) アドレス データ 命令 00: 0110 001- 0000 02: 0001 0--- OUT 03: 0100 0111 RLL 04: 0011 0000 0000 0001 LD 0010 BA オペランド ACC, 01h ACC 02h 「01」という値をACCに格納する 常に02番地へ戻る ACCの内容を論理左回転し,ACCに入れる ACCの内容を出力バッファ(OBUF)に出力する 機械語による アセンブリ言語による 001 プログラム0 0 0 0 0 プログラム アセンブラ 00000010 23 アセンブルの方法 (1/4) p.93,A.2 命令セットを参照 「LD ACC,01h」のアセンブル 0 1 1 0 0 0 1 - 0 0 0 0 0 0 0 1 A Rsm A 0 =1 0:ACC 0 0 B A LD A 0 =1 1:IX 1 0 A ST 0 1 1 1 A SBC 1 0 0 0 A B = 000:ACC 1 sB =m 001:IX × Rotate sm BB = 01-:即値 ○ LoaD BB = 100:直接 ◎ STore(P) BB = 101:直接 ○ SuB with (D) Carry B = 110:修飾 (P) B = 111:修飾 (D) 24 アセンブルの方法 (2/4) p.93,A.2 命令セットを参照 「OUT」のアセンブル 0 0 0 1 0 - - 0 1 0 1 - - - - × OUT 0 0 0 1 0 - - - × OUTput IN 0 0 0 1 1 - - - × INput RCF 0 0 1 0 0 - - - × Reset CF 25 アセンブルの方法 (3/4) p.93,A.2 命令セットを参照 「RLL ACC」のアセンブル 0 1 0 0 0 1 1 1 A Rsm A 0 = 1 0:ACC 0 0 00 RA LD A 0 = 1 1:IX 1 0 01 LA s m ARight 1 sArithmetically m × Rotate sm ALeft Arithmetically B ○ LoaD ST 0 RL 1 1 1 10 ARight BLogically ◎ STore SBC 1 LL 0 0 1 01 ALeft Logically B ○ SuB with Carry 26 アセンブルの方法 (4/4) p.93,A.2 命令セットを参照 「BA 02h」のアセンブル 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 c c - - × Reset CF 00 0- Always - × Set CF 01 0- on- oVerFlow RCF 0A 0 01 00 SCF 0VF 0 11 00 Bcc 0NZ 0 01 01 0 1c onc Not ◎ Branch cc Zero Ssm 0Z 1 10 00 0A 10 ons Zero m × Shift sm 27 プログラム例 (p.84,リスト2) アドレス データ 命令 00: 0110 001- 0000 02: 0001 0--- OUT 03: 0100 0111 RLL 04: 0011 0000 0000 0001 LD 0010 BA オペランド ACC, 01h ACC 02h 「-」は0か1で置き換える (どちらでもよい) 28 プログラム例 (p.84,リスト3) アドレス データ 命令 00: 0110 01: 0010 0000 02: 0001 0000 OUT 03: 0100 0111 RLL 04: 0011 05: 0000 0000 0001 LD 0010 BA オペランド ACC, 01h ACC 02h アセンブル完了 29 プログラムの実行 第2.5節に沿って行う (p.82~86) 注意: 実行前にRESETを押すこと 全員確認できたら次の説明へ (次回はグループではなく一人1台ずつ行う) 30 今日の実験内容 プログラムがどう実行されているか理解 課題1 課題2 ADD命令 課題2 ADC命令 課題3A 課題3B 課題4 課題5 次回:課題6 (応用プログラミング) 31 各命令の動作 (p.79,2.4節) 1. 2. 3. Fetch:命令をメモリから取ってくる Decode:取ってきた命令を解読する Execute:命令を実行する 32 実際に見てみる:リスト1 アドレス データ (p.81) ラベル 命令 オペランド D1: EQU 80h 00: 64 80 LD ACC,[D1] 02: A2 01 SUB ACC,1 04: 0F HLT END 80: 01 80番地の内容を01とする 「D1」を見たら「80h」だと思う メモリD1番地の内容を ACCの内容から1を引く プログラムの実行を停止する プログラムを停止する アセンブル結果の16進表示 ACCに格納する 引いた結果はACCに蓄えられる (変数宣言,初期化のようなもの) 33 各命令実行前後のCPUの内部状態 命令の実行 PC ACC フラグ 00000000 00000000 00000000 LD ADD,[D1] 00000010 00000001 00000000 SUB ACC,1 00000100 00000000 00000001 HLT 00000101 00000000 00000001 指導書 p.81 表2 34 今日の実験内容 課題の説明に従って,プログラムを実行 し,CPUの内部状態を表にまとめる 課題1 課題2 ADD命令 課題2 ADC命令 課題3A (プログラムを作成) 課題3B (プログラムを作成) 課題4 課題5 35 課題3A:2バイトどうしの加算 0番地 1番地 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 + 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 2番地 3番地 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 4番地 5番地 1バイト = 8ビット 36 課題3B:2バイトどうしの減算 0番地 1番地 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 - 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 2番地 3番地 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 0 4番地 5番地 1バイト = 8ビット 37 今日のまとめ 38 2の補数表現 8ビットで数を表現する場合 45 -45は? 0 0 1 0 1 1 0 1 -45の8ビットにおける2の補数表現 1 -45 (負の数の表現法) 1 0 1 0 0 1 1 実際足すと? 1 0 0 0 0 0 0 0 0 39 ADD命令とADC命令の違い ADD命令:加算命令.CFを考慮しない ADC命令:加算命令.CFを考慮する 「CFを考慮する」とは… 演算結果によって,CFを変更する CFが1であるとき,加算結果に1を足す 実際の動作は「CFを加算結果に足す」 40 桁上げフラグと桁あふれフラグ 桁上げ (Carry) 桁あふれ (Overflow) 次の計算のフラグ変化は? 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 CF VF NF ZF 0 0 0 0 41 桁上げフラグと桁あふれフラグ 桁上げ (Carry) 桁あふれ (Overflow) 次の計算のフラグ変化は? 1 1 0 1 0 0 0 0 + 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 CF VF NF ZF 1 0 0 0 42 桁上げフラグと桁あふれフラグ 桁上げ (Carry) 桁あふれ (Overflow) 次の計算のフラグ変化は? 1 1 0 1 0 0 0 0 + 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 CF VF NF ZF 1 1 0 0 43 桁上げフラグと桁あふれフラグ 桁上げ (Carry) 桁あふれ (Overflow) 次の計算のフラグ変化は? 0 1 0 1 0 0 0 0 + 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 CF VF NF ZF 0 1 1 0 44 次回の内容 課題6A:往復するフラッシャー 課題6B:積の計算 予習:必ずプログラムを作ってくること 作ってこないと終わりません グループではなく一人ずつ行う 45 積の計算 0番地 0 1 0 1 0 0 1 0 × 1 0 0 0 1 0 1 0 1番地 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 2番地 3番地 1バイト = 8ビット 46 フローチャートの例 1バイトの乗算 A × B C 初期化 0→C 終了判定 B=0? Y 終了 HLT N 繰り上がりも 考えること CにAを足す C+A→C Bを1減らす B-1→B 47 計算機基礎Ⅲ 48 今日の内容 課題6A:往復するフラッシャー 課題6B:積の計算 終わった人から解散 各人が1つずつ行う (グループで1つではなく) 各人は各課題ができたら確認を受けること 49 課題6Bの確認 次の計算が正しくできることを見せる 9 7 E 4 × 2 A × 3 C 1 8 C 6 3 5 7 0 50 レポートについて 〆切:一週間以内 (次回の実験開始前) 厳守 提出場所:C2-503 (手渡し) または C1-301 注意: 完全なレポートを提出すること. 複数人で相談してレポートを作成した場合は, その旨をレポート内で述べること. 参考にした文献等も明記すること. 51 結果の整理1について 各課題で用いたプログラムも掲載する そのトレース結果を掲載する トレース結果の各行に対して, なぜそのような結果が得られるのかを 述べる それを踏まえて各命令の動作をまとめる 52 結果の整理1 の例 命令の実行 PC ACC フラグ 00000000 00000000 00000000 LD ADD,(D1) 00000010 00000001 00000000 LD命令は2バイト命令なのでPCの値は2だけ増 加する. データ領域D1番地の内容が01hなので,LD命令 を実行した結果ACCの内容は01hとなる LD命令でフラグレジスタの値は変化しない 53