530 likes | 708 Views
計算機基礎 Ⅱ,Ⅲ (指導書 pp. 76 ~ 94 ). 改訂: 佐竹 純二 (作成:岡本 吉央). コンピュータ:機械から見ると. 論理回路. コンピュータ. コンピュータ:人間から見ると. ユーザ. 入力. どのような仕組みで動いているのか ?. 出力. コンピュータ. コンピュータ・ハードウェア. 記憶装置. 入力装置. 処理装置. 出力装置. コンピュータ・ソフトウェア. 記憶装置. 入力装置. アプリケーションプログラム. システムプログラム. 処理装置. 出力装置. 疑問.
E N D
計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94) 改訂:佐竹 純二 (作成:岡本 吉央)
コンピュータ:機械から見ると 論理回路 コンピュータ
コンピュータ:人間から見ると ユーザ 入力 どのような仕組みで動いているのか? 出力 コンピュータ
コンピュータ・ハードウェア 記憶装置 入力装置 処理装置 出力装置
コンピュータ・ソフトウェア 記憶装置 入力装置 アプリケーションプログラム システムプログラム 処理装置 出力装置
疑問 • 処理装置 (CPU) はプログラム(≒ソフトウェア)をどのように解釈しているのか? 高級言語による プログラム 機械語による プログラム
(今のところの) 回答 • コンパイラ,アセンブラと呼ばれるプログラムを変換するプログラムを使う コンパイラ アセンブラ 高級言語による プログラム 機械語による プログラム アセンブリ言語に よるプログラム
コンパイラ アセンブラ 高級言語による プログラム 機械語による プログラム アセンブリ言語に よるプログラム ことばの整理:機械語 • CPUが直接理解し実行できる言語のこと • プログラムは0と1の列から構成される • CPUごとに異なる
コンパイラ アセンブラ 高級言語による プログラム 機械語による プログラム アセンブリ言語に よるプログラム ことばの整理:高級言語 • 人間が使いやすいプログラミング言語 • C,C++,Java,Perlなど • CPUごとに異ならない
コンパイラ アセンブラ 高級言語による プログラム 機械語による プログラム アセンブリ言語に よるプログラム ことばの整理:アセンブリ言語 • 機械語を人間にわかりやすくした言語 • 命令が機械語と (ほぼ) 1 対 1 に対応 • CPUごとに異なる
コンパイラ アセンブラ 高級言語による プログラム 機械語による プログラム アセンブリ言語に よるプログラム ことばの整理:コンパイル • 高級言語によるプログラムをアセンブリ言語によるプログラムに(または機械語によるプログラムに)翻訳すること
コンパイラ アセンブラ 高級言語による プログラム 機械語による プログラム アセンブリ言語に よるプログラム ことばの整理:アセンブル • アセンブリ言語によるプログラムを機械語によるプログラムに翻訳すること
この実験の流れ 1. アセンブリ言語によるプログラミング 2.作成したプログラムのアセンブル(手作業) 3.実行(動作の理解) アセンブラ 機械語による プログラム アセンブリ言語に よるプログラム
13h ←16進数であることを示す 他にも13H,0x13など この実験で用いるハードウェア • KUE-CHIP2 • 教育用の8ビットマイクロプロセッサ ≒ CPU 8ビット=1バイト
KUE-CHIP2の各部:ALU • 演算ユニット(Arithmetic and Logic Unit) • 算術演算,論理演算,アドレスの計算を行う
KUE-CHIP2の各部:ACC • アキュムレータ (accumulator) • 演算に利用するレジスタ.8ビット • 演算対象,演算結果を保持
KUE-CHIP2の各部:FLAG • フラグレジスタ (flag register) • 演算・シフト結果により変化.4ビット 桁上がりフラグ 桁あふれフラグ 負フラグ ゼロフラグ
KUE-CHIP2の各部:PC • プログラムカウンタ (program counter) • 次に実行する命令のメモリ上でのアドレスを保持.8ビット
KUE-CHIP2の各部:内部メモリ • 512バイト.バイト単位の番地指定 • プログラム領域:0~255番地 • データ領域:256番地~511番地 511 1FF データ 領域 ~ 256 100 255 0FF プログラム 領域 ~ 01100010 0 000
KUE-CHIP2でのプログラミング • 独自のアセンブリ言語で行う • プログラムはメモリのプログラム領域に 置かれる (プログラム内蔵方式) • 0番地に置かれた命令から順番に実行される
KUE-CHIP2のアセンブリ言語 • 命令の種類:p.80 表1を参照 • 命令仕様: p.91~94 付録A を参照 • 機械語フォーマット:1バイトか2バイト p.79 図4を参照
0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 プログラム例 (p.84,リスト2) アドレス データ 命令 オペランド 00: 0110 001- 0000 0001 LD ACC, 01h 02: 0001 0--- OUT 03: 0100 0111 RLL ACC 04: 0011 0000 0000 0010 BA 02h 「01」という値をACCに格納する ACCの内容を出力バッファ(OBUF)に出力する ACCの内容を論理左回転し,ACCに入れる 常に02番地へ戻る 機械語による プログラム アセンブリ言語による プログラム アセンブラ
アセンブルの方法 (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 B
アセンブルの方法 (2/4) • p.93,A.2 命令セットを参照 • 「OUT」のアセンブル 0 0 0 1 0 - - -
アセンブルの方法 (3/4) • p.93,A.2 命令セットを参照 • 「RLL ACC」のアセンブル 0 1 0 0 0 1 1 1 A s m
アセンブルの方法 (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
アドレス データ 命令 オペランド 00: 0110 001- 0000 0001 LD ACC, 01h 02: 0001 0--- OUT 03: 0100 0111 RLL ACC 04: 0011 0000 0000 0010 BA 02h プログラム例 (p.84,リスト2) 「-」は0か1で置き換える (どちらでもよい)
アドレス データ 命令 オペランド 00: 0110 0010 0000 0001 LD ACC, 01h 02: 0001 0000 OUT 03: 0100 0111 RLL ACC 04: 0011 0000 0000 0010 BA 02h 00: 01: 02: 03: 04: 05: プログラム例 (p.84,リスト3) アセンブル完了
プログラムの実行 • 第2.5節に沿って行う (p.82~86) • 注意:実行前にRESETを押すこと • 全員確認できたら次の説明へ (次回はグループではなく一人1台ずつ行う)
今日の実験内容 • プログラムがどう実行されているか理解 • 課題1 • 課題2 ADD命令 • 課題2 ADC命令 • 課題3A • 課題3B • 課題4 • 課題5 • 次回:課題6 (応用プログラミング)
各命令の動作 (p.79,2.4節) • Fetch:命令をメモリから取ってくる • Decode:取ってきた命令を解読する • Execute:命令を実行する
実際に見てみる:リスト1 (p.81) プログラムの実行を停止する 80番地の内容を01とする プログラムを停止する 「D1」を見たら「80h」だと思う (変数宣言,初期化のようなもの) メモリD1番地の内容を ACCに格納する ACCの内容から1を引く 引いた結果はACCに蓄えられる アセンブル結果の16進表示
各命令実行前後のCPUの内部状態 • 指導書 p.81 表2
今日の実験内容 • 課題の説明に従って,プログラムを実行し,CPUの内部状態を表にまとめる • 課題1 • 課題2 ADD命令 • 課題2 ADC命令 • 課題3A (プログラムを作成) • 課題3B (プログラムを作成) • 課題4 • 課題5
課題3A:2バイトどうしの加算 1番地 0番地 + 3番地 2番地 4番地 5番地 1バイト = 8ビット
課題3B:2バイトどうしの減算 1番地 0番地 - 3番地 2番地 4番地 5番地 1バイト = 8ビット
2の補数表現 (負の数の表現法) • 8ビットで数を表現する場合 • -45は? • 実際足すと? 45 -45の8ビットにおける2の補数表現 -45
ADD命令とADC命令の違い • ADD命令:加算命令.CFを考慮しない • ADC命令:加算命令.CFを考慮する 「CFを考慮する」とは… • 演算結果によって,CFを変更する • CFが1であるとき,加算結果に1を足す • 実際の動作は「CFを加算結果に足す」
桁上げフラグと桁あふれフラグ • 桁上げ (Carry) 桁あふれ (Overflow) • 次の計算のフラグ変化は? + CFVF NF ZF 00 0 0
1 桁上げフラグと桁あふれフラグ • 桁上げ (Carry) 桁あふれ (Overflow) • 次の計算のフラグ変化は? + CFVF NF ZF 10 0 0
1 桁上げフラグと桁あふれフラグ • 桁上げ (Carry) 桁あふれ (Overflow) • 次の計算のフラグ変化は? + CFVF NF ZF 11 0 0
桁上げフラグと桁あふれフラグ • 桁上げ (Carry) 桁あふれ (Overflow) • 次の計算のフラグ変化は? + CFVF NF ZF 01 1 0
次回の内容 • 課題6A:往復するフラッシャー • 課題6B:積の計算 • 予習:必ずプログラムを作ってくること • 作ってこないと終わりません • グループではなく一人ずつ行う
積の計算 0番地 × 1番地 3番地 2番地 1バイト = 8ビット
フローチャートの例 • 1バイトの乗算 初期化 0 → C A × B Y 終了判定 終了 C B=0 ? HLT N 繰り上がりも 考えること CにAを足す C+A → C Bを1減らす B-1 → B
今日の内容 • 課題6A:往復するフラッシャー • 課題6B:積の計算 • 終わった人から解散 • 各人が1つずつ行う(グループで1つではなく) • 各人は各課題ができたら確認を受けること
課題6Bの確認 • 次の計算が正しくできることを見せる × ×