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