計算機システムⅡ 命令セットアーキテクチャ 和田俊和
講義計画 コンピュータの歴史1 コンピュータの歴史2 コンピュータの歴史3 論理回路と記憶,計算:レジスタとALU コンピュータの歴史2 コンピュータの歴史3 論理回路と記憶,計算:レジスタとALU 主記憶装置とALU,レジスタの制御 命令セットアーキテクチャ(←本日) 演習問題 パイプライン処理 メモリ階層:キャッシュと仮想記憶 命令レベル並列処理 命令実行順序の変更 入出力と周辺装置:DMA,割り込み処理 現代的な計算機アーキテクチャの解説 総括と試験 教科書:坂井修一著:電子情報通信学会レクチャーシリーズC−9,コンピュータアーキテクチャ,コロナ社 最終回の試験によって成績評価を行う.5回以上欠席で不合格とする.
命令という観点から,その構造と,各部の動きを解説 本日の講義の範囲 命令という観点から,その構造と,各部の動きを解説
3.1 命令セットアーキテクチャ
3.1.1 操作とオペランド d ← op s1 d ← s1 op s2 d ← I d: デスティネーションオペランド, 3.1.1 操作とオペランド 命令=操作(operation)+操作の対象(operand) 命令は2進数で表され,「命令語」に納められる 操作の対象(operand)の分類 ソースオペランド(source operand) デスティネーションオペランド(destination operand) 即値 (immediate) d ← op s1 d ← s1 op s2 d ← I d: デスティネーションオペランド, s1,s2:ソースオペランド, I:即値 op:オペレーション
3.1.2 命令の表現形式 命令は,命令語という2進数で表される. 命令語は,オペコード(operation code)とオペランド(operand)から成る. このテキストでは,1語の固定長命令のみを扱い,命令の形式はR,I,Aの3種のみを持つ仮想的なCPUを想定している. dpl
3.1.3 命令フィールド 命令語32bit,命令セット64個,レジスタ32個,という条件で考えると以下のbit割り当てになる. op:オペコード rs,rt,rd:オペランドレジスタ aux:実行細則 imm/dpl:即値または変位 addr: メモリアドレス
アセンブリ言語による命令の表現1 R型の命令の例
アセンブリ言語による命令の表現2 I型の命令の例
アセンブリ言語による命令の表現3 A型の命令の例
3.1.4 アセンブリ言語 機械語のプログラムは命令語の並び. 命令語は2進数で人にとっては分かりにくい. 英語に近い機械語プログラムの表記法 機械語と一対一の対応関係がある.(高級言語ではそうではない)
命令セット
3.2.1 算術論理演算
動作例 R命令の実行過程 I命令の実行過程
補足 mul, div, shift浮動小数点演算については,ALUとは別に専用の乗算器,除算器,シフタ,浮動小数点演算器(floating point unit, FPU)が設けられるのが普通になっている. 現在では,これらは全てCPUの内部に取り込まれており,ものによってはALUの内部に入れられているものもある.
算術シフト命令 空いた上位ビットに符号bitを入れる)
論理シフト命令 空いた上位ビットに0を入れる
3.2.2 データ移動命令 メモリとレジスタ間のデータ移動 ロード命令 ストア命令 メモリと入出力機器間のデータ移動は考える必要がない.
データ移動命令の例
データ移動命令の例
データ移動命令の例
3.2.3 分岐命令 無条件分岐→ j jr jal (明示的待避を伴うサブルーチンコール) 条件分岐(次頁)
条件分岐 分岐先は相対的 絶対番地に飛ぶ際は,無条件分岐と組み合わせる.
3.3 アドレッシング
3.3.1 アドレッシングの種類 データや命令の格納場所を示す方法 ここで示されているのは基本的なものだけ
アドレッシングの動作例
3.3.2 バイトアドレッシングとエンディアン 通常は1語を単位としてデータにアクセスする. バイト単位でのアクセスをするにはアドレスを指定する必要がある.
3.3.3 ゼロレジスタと定数の生成 r0 ゼロレジスタ: 読み書きしても値がゼロのレジスタ 定数の生成例 addi r1, r0, 0101010101010101 addi r1, r0, 28 sla r1, r1, 16 eq r1, r0, r1 ori r1, r1, 0000000011111111 (a)定数の生成 (b) 定数の生成 (c) ビット反転 (16bit) (32bit)
3.4 サブルーチンの実現
3.4.1 サブルーチンの基本 C言語では関数,Fortranではサブルーチン,Pascalでは手続き
3.4.2 サブルーチンの手順 Caller Save方式, Callee Save方式 レジスタ値の待避 戻り番地(次の命令番地)の待避 サブルーチンの先頭番地へのジャンプ サブルーチン本体の実行 戻り番地へのジャンプ レジスタ値の復帰 元の命令列の実行再開
3.4.3 スタックによるサブルーチンの実現 sw r1, 0(sp) addi sp,sp,4 (a) push subi sp,sp,4 lw r1, 0(sp) (b) pop
サブルーチンのアセンブラプログラム sw r1, 0(sp) sw r2, 4(sp) … sw r31, 4*30(sp) addi sp,sp,4*30+4 jal address /*サブルーチン へのジャンプ r31←(pc)+4*/ subi sp, sp, 4*30+4 lw r1, 0(sp) lw r2, 4(sp) … lw r31, 4*30(sp) 元の処理の続き address: …. jr r31
RISCとCISC CISC (complex instruction set computer)と RISC (reduced instruction set computer) CISCが先行(IBMメインフレーム,DEC VAX-11, Intel 80486など) 1980年以降,RISCが主流.(Sparc, MIPS, Power PC, Alphaなど)Pentiumも表面上はCISCだが,内部はRISC
命令という観点から,その構造と,各部の動きを解説 本日の講義の範囲 命令という観点から,その構造と,各部の動きを解説
次週の演習問題 次週は演習問題を行います. 各章の「理解度の確認」問題をやっておいて下さい. これ以外に講義でお話ししたことも出します.