プロセッサと 年次前次前期 ( 第 回 ) 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow か? () + + () + + 答 答 中島克人 情報メディア学科 nakajima@im.dendai.ac.jp () - = + + 答 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow か? () - = + + () - - = + + (6) - - = + + 答 答 答 演算結果だけでは判断つかない 演算中に判断できる! 進数の加減算 (overflow) ( 正の )overflow # 7F + # ( 負の )overflow -# -# 7F + - + (- ) は? 符号ビットへの桁上げ 有符号ビットからの桁上げ 無 = + overflow の取っておきの見分け方がある!! 符号ビットへの桁上げ 無符号ビットからの桁上げ 有
進数の加減算 (overflow) 正数 + 負数 +(-) overflow なし 正数 - 負数 -(-) + + - 符号ビットへの桁上げ 符号ビットからの桁上げ 教科書 p.9 へ 問題.9 をやって見よう! 問題.9 6ビットの符号付き数の最大値, 最小値を, 進,6 進, および, 進で示せまた, 符号なし数についても同じようにせよ ( 教科書 p.9) overflow なし 符号ビットへの桁上げ 符号ビットからの桁上げ 6 問題.9 ( 教科書 p.9) プロセッサと その前にまず, 8 ビットの符号なし数の最大値, 最小値を 進,6 進, および, 進で示せ 進 ~, 6 進 # ~ #FF 進 ~ 8 - ~ 次に,8 ビットの符号付き数の最大値, 最小値を 進,6 進, および, 進で示せ 進 ~, 6 進 #8 ~ #7F 進 - 7 ~ 7 - -8 ~ 7 計算機の構成 問題.9 6 ビットの符号付き数と符号なし数の最大値, 最小値を 進,6 進, および, 進で示せ 7 8
章計算機のしくみ (COMET COMET Ⅱ を題材に ) ( 教科書 p.) 語とビット 入力装置 記憶装置 ( ) 出力装置 fetch load store 制御装置 演算装置 プログラムを格納 ( 実行結果も格納 ) プログラム = 手続き ( 処理主体 ) + ( 処理対象 ) COMET Ⅱ では上の 語は 6 ビット 語 ビット位置 9 8 7 6 制御の流れ の流れ 9 記憶装置と番地 ( アドレス ) 記憶装置と番地 ( アドレス ) 番地 ( アドレス ) 語 COMET Ⅱ では 語長の機械命令と 語長の機械命令がある n 語語語語語語語語 n 命令 A 命令 B 命令 C 語命令 語命令 COMET Ⅱ では 語は番地は 6 ビット表現 = ~ 6 - = ~ 6 = ~ 約 6K
= 制御装置 + 演算装置 Instruction Register Program Register Memory Data Register Arithmetic & Logical Unit 機械命令 制御装置 演算装置 章計算機のしくみ (COMET COMET Ⅱ を題材に ) 制御装置機械命令 ( 命令 ) のからの取り出し (fetch) (Program Register, PC Program Counter) が上の命令アドレスを保持 取り出した命令の解釈 ( デコード ) 取り出した命令は (Instruction Regiter) に保持 必要なを渡して演算装置を制御 演算装置 ( 教科書 p.) 四則演算のような計算を行う演算は (Arithmetic and Logical Unit) で行う (COMET Ⅱには無いが ) 乗除算は乗算器 除算器で行う GR(General Register, 汎用レジスタ ) に演算途中結果を保持 COMET Ⅱにはに8 個の GR(GR~GR7) が備わる SF, ZF, OF からなる FR(Flag Register) に結果の正負等を格納 章計算機のしくみ (COMET Ⅱ を題材に ) 入力装置と出力装置 制御装置と複雑なやり取りを行うはを介してやり取りする COMET Ⅱ では入出力はマクロ命令で行う マクロ命令とは複数の命令列に名前を付けたもの COMET Ⅱ のマクロ命令の内容詳細は定義されていない 機械命令の実行イメージ 命令の取出し ( 命令フェッチ ) とオペランド 取出し ( ) 命令実行 ( 演算 ) の読み書き ( メモリアクセス ) または レジスタへの書き戻し ( レジスタ格納 ) 命令制御 演算ユニット Program Register, Instruction Register Memory Data Register, Arithmetic & Logical Unit 6
機械命令の実行イメージ ロード (load( load) ) 命令 上の指定された番地 ( 実効アドレス ) の内容を読み出し, 指定されたレジスタに格納する 例 LD GR,,GR 命令の取出し と GR の読み出し +(GR) ( 演算 = 実効アドレス計算 ) 読出し GR に格納 ( レジスタ格納 ) 命令制御 LD GR GR MAR 演算ユニット 語 ( 長 ) 命令 GR GR 7 機械命令の実行イメージ ロードアドレス アドレス (load address) 命令指定された番地 ( 実効アドレス ) 自身を, 指定されたレジスタに格納する指定された数字をレジスタに格納するためにも用いられる 例 LAD D GR,,GR 命令の取出し と GR の読み出し +(GR) ( 演算 = 実効アドレス計算 ) -- ( メモリアクセスは無し ) GR に格納 ( レジスタ格納 ) LAD GR GR 命令制御 MAR 演算ユニット 語 ( 長 ) 命令 GR GR 8 機械命令の実行イメージ 算術加算 算術加算 (add arithmetic) 命令 指定された つのレジスタの内容を算術加算し, 左側に指定されたレジスタに格納する 例 ADDA GR,GR 命令の取出し とGR,GR の読み出し (GR)+(GR) ( 演算 ) -- ( メモリアクセスは無し ) GR に格納 命令制御 GR GR レジスタ MAR ファイル GR 演算ユニット 語 ( 長 ) 命令 ADDA GR GR 9 プログラム実行イメージ 番地 6 7 8 n 機械命令 = 手続き 6 番地のを GR に 数値 を GR に 6+GR 番地のを GR に GR+GR を GR に GR を 8 番地に格納 格納場所 制御装置 演算装置 GR~GR7
プロセッサと 機械命令 (machine( instruction) 機械命令 ( 命令 )/ の一般形 機械命令 とその オペランド opcode (OP) operand- operand-n opcode/op Operation Code ( 操作コード オペコード 命令コード ) 読み書き 移動 load(lw), store(sw), move(mv) 算術演算 add, sub, multiply(mul), divide(div) 論理演算 and, or, xor, logical shift, arithmetic shift, 分岐 branch, branch if not equal, branch if less than, operand 操作 ( 演算 ) 対象 ( レジスタ ) memory ( メモリ ) immediate ( 即値 ) 機械命令イメージ immediate ( 即値 ) memory OP operand- operand-n 番地 6 番地のを GR に 数値 を GR に 6+GR 番地のを GR に ( レジスタ ) address GR GR 6 番地 memory ( メモリ ) immediate 制御装置 6 7 8 n GR +GR を GR に GR を 8 番地に格納 Add Store GR GR GR GR GR 8 番地 6 番地 index Instruction Register Program Register Memory Data Register Arithmetic & Logical Unit 演算装置
機械命令命令の例 (COMET Ⅱの場合 ) 語 ( 語長 ) 命令 op gr gr 8 bit bit bit 語 ( 語長 ) 命令 op gr adr xr 8 bit bit bit 6 bit アセンブラでの表記 ADDA GR,GR LD GR,GR LAD GR,#6 LD GR,#7 LD GR,Lab,GR アルファベット ラベル表記 ( 教科書 p.) # 6 進数表記 op 命令の種類... LD,ADDA 等 gr,gr,gr 汎用レジスタ... GR ~ GR7 xr インデックスレジスタ... GR ~ GR7 (GRは指定できない) adr 番地, 数字, リテラル... ラベル, 進数,6 進数, 他 機械命令命令の例 ( 一般形 ) - 命令 OP R R -immediate 命令 インデックスレジスタ指定 R Register number, I Immediate ( 即値 ) D Displacement ( 変位 = 相対アドレス ) アセンブラでの表記 LD GR,GR ADDA GR,GR OP R I LAD GR,# 機械命令命令の例 (COMET Ⅱの場合 ) インデックスレジスタ (xr) の省略 語長命令におけるアセンブラでの表記において, インデックスレジスタを省略したとき, では xr 部には が埋められるため, はインデックスレジスタの読み出し操作をしないと判断できる (= インデックスレジスタに GR が使用できない理由となる ) アセンブラでの表記 LAD GR,#FA,GR インデックスレジスタ有り LAD GR,#FA インデックスレジスタの省略 ( インデックスレジスタ不使用 ) LAD #FA 8 bit bit bit 6 bit LAD #FA 8 bit bit bit 6 bit 機械命令 ( ) とアセンブラ COMET Ⅱ の 語 ( 語長 ) 命令 op gr adr xr 8 bit bit bit 6 bit COMET Ⅱ のの具体例 ビット列でのプログラムを プログラミング と称する 6 --displacement 命令 OP R D R LD GR,LAB,GR6 7 アセンブリ言語 CASL Ⅱ での表記例 ( その ) LD GR,... ロード ( 進数 ) 番地の内容を GR に CASL Ⅱ のアセンブラ ニーモニック (assembler mnemonic) 自分専用アセンブラとして独自のニーモニックを定めても良い 8
プログラムと機械命令 高水準プログラミング言語 (C 言語 ) swap (int v[ ], int k) { int temp; temp = v[k]; v[k] = v[k+]; v[k+] = temp; } compiler アセンブリ言語 swap muli $, $, add $, $,$ lw $, ($) lw $6, ($) sw $6, ($) sw $, ($) jr $ 機械命令 ( ) CASL Ⅱ SWAP SLA GR, ADDA GR,,GR LD GR,, GR LD GR6, ST GR6,, GR ST GR,, GR RET assembler A....... COMET Ⅱマシンの機械命令 ( 例 ) アセンブリ言語 CASL Ⅱ での表記例 ( その ) 番地,,,6 7 8,9 A B C A 番地のを GR に 数値 を GR に (A+GR) 番地のを GR に GR +GR を GR に GR を C 番地に格納 (#) (#) 格納場所 GR GR address Add GR GR GR GR Store GR??? A 番地 A 番地 C 番地 LD GR,SA LAD GR, CASL Ⅱ LD GR,SA,GR ADDA GR,GR ST GR,RC SA DC # DC # RC DS ラベル (label) 場所確保語数 ラベル参照 定数 定数定義 9 機械命令イメージ ( 正確版 ) 番地,, A 番地のを GR に 数値 を GR に,6 (A+GR) 番地のをGRに 7 GR +GR を GR に 8,9 GR を C 番地に格納 A B C 格納場所 ( レジスタ ) address Add GR immediate ( 即値 ) GR GR GR GR GR Store GR??? memory ( メモリ ) A 番地 A 番地 index C 番地 COMET Ⅱマシンの機械命令 ( 例 ) ( CASL Ⅱ 表記 ) LD gr,adr[,xr] ST gr,adr[,xr] ADDA gr,gr CPL gr,adr[,xr] SLA gr,adr[,xr] JPL adr[,xr] PUSH adr[,xr] POP gr CALL adr[,xr] RET etc. gr GR~GR7 xr GR~GR7 [ ] 省略可 LoaD STore ADD Arithmetic ComPare Logical Shift Left Arithmetic Jump on PLus PUSH effective address POP up CALL subroutine RETurn from subroutine
COMET Ⅱマシンの機械命令 ( 例 ) アセンブリ言語 CASL Ⅱ での表記例 ( その ) LD GR,LAB LAD GR, ADDA GR,GR... ロード LAB 番地の内容を GR にコピー LD GR,LAB,GR... ロード LAB+GR の内容を番地として, その内容を GR にコピー... ロードアドレス ( 進数 ) を GR に格納... 算術加算 GR の内容 + GR の内容を GR に格納 COMET Ⅱマシンの機械命令 ( 例 ) COMET Ⅱマシンの機械命令 ( 例 ) LD GR,LAB... ロード LAB 番地の内容を GR にコピー op adr = LAB LD GR,LAB,GR... ロード LAB+(GR の内容 ) を番地 ( 実効番地 EA(Effective Address)) として, その内容を GR にコピー op adr = LAB + LAB EAEffective Address LAB +6 GR コピー GR GR コピー オペランドの指定法 ( まとめ /) GR~7 GR~7 6 LAD GR,... ロードアドレス ( 進数 ) を GR に格納 op adr = GR GR~7 / 8 Immediate... LAD GR, etc. op gr I IImmediate ( 即値 ) Direct addressing op gr adr... LD GR,LAB etc. ADDA GR,GR... 算術加算 GR の内容 + GR の内容を GR に格納 op GR GR~7 6 GR + / 8 Indirect addressing op gr adr... (COMET Ⅱ には無い ) アドレス 6
オペランドの指定法 ( まとめ /) プロセッサと Absolute address( 絶対アドレス ) op gr adr (Effective Address 実効番地 ) EA Index による修飾 op gr xr adr... LD GR,LAB etc. xr Index COMETⅡ と CASLⅡ + EA... LD GR,LAB,GR etc. 7 8 CASL-Ⅱ シミュレータ (WCASL-Ⅱ) 講義 HP から wcs8.zip を適当なフォルダにダウンロード C/FreeSoft/WCASL/wcs8.zip など wcs8.zip を解凍 解凍ソフトがない場合は, 圧縮 解凍ソフトをダウンロード ( 講義 HP 経由では Lhaplus) SETUP.exe を実行し, 適当なフォルダにインストール C/FreeSoft/WCASL/ などに COMET Ⅱマシンの構成 汎用レジスタ (6 ビット 8 個 ) GR,GR,GR,GR,GR,GR,GR6,GR7... gr,gr,grとして使用可能... GR 以外はインデックスレジスタ (xr) としても使用可能 フラグレジスタ FR( ビット ) SF... 演算やロード結果が負であることを表す ZF... 演算やロード結果が零であることを表す OF... 演算結果のオーバフローを表す プログラムレジスタ (6 ビット ) 次に実行すべき命令の番地を保持している スタックポインタ SP(6 ビット ) スタックの先頭番地を保持している スタック操作を含む PUSH, POP, CALL, RET により値が変更される 9
WCASL-Ⅱ (COMET COMETシミュレータ ) Instruction Register ( 命令レジスタ ) Program Register (PC Program Counterとも ) SP Stack Pointer MAR Memory Address Register Memory Data Register 制御装置 演算装置 単なる説明 宿題 WCASL-II のインストールとサンプルプログラム実行 次回までに前記の要領で WCASL-II を自 PC にインストール 授業 HPの 参考 CASL-II 演習プログラム集 SMPL.cas をダウンロード WCASL-II にて下記の手順にて SMPL.cas をアセンブルし, 実行する a. ファイル CASLプログラムの新規作成 とし, SMPL.cas の内容を貼り付ける. b. もしくは, ファイル CASLファイルを開く. プロジェクト アセンブル によりアセンブラの実行. プロジェクト CASLシミュレート でシミュレータを開く. <enter> キーを 回ずつ入力し, 画面内の情報変化を観察.( プロジェクト リロード でシミュレーションをやり直す事が可能)