勉強会その3 2016/5/1 10 8分35秒 データの表現 演算
MIPS 命令セットアーキテクチャ 主に組み込みシステムで使われていた 特徴 仕様がきれいなため, アーキテクチャの 授業でよく使われる 情報システム基盤学基礎1 MIPS 命令セットアーキテクチャ 主に組み込みシステムで使われていた 例: CISCO のルータやプリンタ,NINTENDO64, PS, PS2 など 特徴 命令長を 32 ビットに統一 32 本の汎用レジスタと 32 本の浮動小数点レジスタ レジスタの幅は 32 ビット (のちに 64 ビット) 仕様がきれいなため, アーキテクチャの 授業でよく使われる [ MIPS命令セットアーキテクチャの一部 ]
命令の基本構造 オペコード オペランド 処理の種類 例: add, sub, lw など 処理の対象 情報システム基盤学基礎1 命令の基本構造 オペランド オペコード 処理の種類 例: add, sub, lw など オペランド 処理の対象 例: $s0, 0($t0), 100 など オペランドの数はオペコードによって異なる オペコード lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 16($t0)
フィールドと命令形式 アセンブリ言語と機械語の対応例 命令形式 アセンブリ言語: add $t1, $s1, $s2 機械語: 情報システム基盤学基礎1 フィールドと命令形式 アセンブリ言語と機械語の対応例 アセンブリ言語: add $t1, $s1, $s2 機械語: 命令形式 フィールドの構成の違いによる命令の分類 MIPS の場合は 3 種類の命令形式が存在 フィールド 32ビット 000000 10001 10010 01001 00000 100000 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット (add) ($s1) ($s2) ($t1) (未使用) (add)
MIPS の命令形式 R 形式 I 形式 J 形式 op rs rt rd shamt funct op rs rt 情報システム基盤学基礎1 MIPS の命令形式 R 形式 I 形式 J 形式 op rs rt rd shamt funct 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット op rs rt constant or address 6ビット 5ビット 5ビット 16ビット op address 6ビット 26ビット op: オペコード rs: 第1オペランド rt: 第2オペランド rd: 第3オペランド shamt: シフト量 funct: 機能コード constant: 定数 address: アドレス
情報システム基盤学基礎1 MIPS 命令の種類 算術演算命令 論理演算命令 データ転送命令 分岐命令
算術演算命令 四則演算などの算術演算を行う命令 命令形式は R 形式または I 形式 オペランドはレジスタまたは定数(即値) 情報システム基盤学基礎1 算術演算命令 四則演算などの算術演算を行う命令 例: add, sub, mult, div, addi など 命令形式は R 形式または I 形式 オペランドはレジスタまたは定数(即値) MIPS の算術演算ではメモリアドレスを指定できない 命令形式 アセンブリ言語 意味 機械語 000000 10001 10010 01001 00000 100000 add $t1, $s1, $s2 $t1 = $s1 + $s2 $s1 $s2 $t1 add R 000000 10000 10011 01001 00000 100010 sub $t1, $s0, $s3 $t1 = $s0 - $s3 $s0 $s3 $t1 sub 001000 10000 01001 0000000001000010 I addi $t1, $s0, 66 $t1 = $s0 + 66 addi $s0 $t1 66
論理演算命令 論理演算を行う命令 命令形式は R 形式または定数 オペランドはレジスタまたは定数 情報システム基盤学基礎1 論理演算命令 論理演算を行う命令 例: and, or, andi, sll など 命令形式は R 形式または定数 オペランドはレジスタまたは定数 メモリアドレスの指定不可 命令形式 アセンブリ言語 意味 機械語 000000 10001 10010 01001 00000 100100 and $t1, $s1, $s2 $t1 = $s1 & $s2 $s1 $s2 $t1 and R 000000 00000 10000 01001 00100 000000 sll $t1, $s0, 4 $t1 = $s0 << 4 $s0 $t1 4 sll 001100 10000 01001 0000000000001010 I andi $t1, $s0, 10 $t1 = $s0 & 10 andi $s0 $t1 10
データ転送命令 メモリ レジスタ間のデータ転送を行う命令 命令形式は I 形式 オペランドはレジスタまたはアドレス 情報システム基盤学基礎1 データ転送命令 メモリ レジスタ間のデータ転送を行う命令 例: lw, sw など 命令形式は I 形式 オペランドはレジスタまたはアドレス 命令形式 アセンブリ言語 意味 機械語 100011 10010 01000 0000000000000100 lw $s2, 4($t0) $s2=M[$t0+4] lw $s2 $t0 4 I 101011 10000 01000 0000000000010000 sw $s0, 16($t0) M[$t0+16]=$s0 sw $s0 $t0 16 ※ M[X]: メモリアドレス X に対応するメモリ上のデータ
分岐命令 次に実行する命令を変更する命令※ 命令形式は R 形式,I 形式,J 形式 オペランドはレジスタ,アドレス,定数 情報システム基盤学基礎1 分岐命令 次に実行する命令を変更する命令※ 無条件に変更する命令: j, jr など(goto 文,switch 文に相当) 条件に応じて変更する命令: slt + beq, bne など(if 文に相当) 命令形式は R 形式,I 形式,J 形式 オペランドはレジスタ,アドレス,定数 ※ 通常はメモリ上の並びの 次の命令が実行される 命令形式 アセンブリ言語 意味 機械語 000010 00000000000000100111000100 J j 10000 go to 10000 j 2500※ 000000 00000 01001 00000 00000 001000 R jr $t1 go to $t1 $t1 jr if ($s2 < $s3) $s1 = 1; else $s1 = 0; 000000 10010 10011 10001 00000 101010 R slt $s1, $s2, $s3 $s2 $s3 $s1 slt if ($s1 == $s2) go to 100; 000100 10001 10010 0000000000011001 I beq $s1, $s2, 100 beq $s1 $s2 25※ ※ 2ビット左シフトしたものをアドレスとして使用するため