アドレシング・モード アドレシング・モードとは? アクセスしたいオブジェクトに対するアドレスの指定方法 (定数,レジスタ,メモリ番地) 例えば,MIPSの加算命令の場合 レジスタ$s2の値と,レジスタ$s3の値を 加算して、レジスタ$s1に格納する レジスタ・アドレシング $s1 $s2 $s3 $s4 レジスタ add $s1, $s2, $s3 プロセッサ ALU 九州大学工学部電気情報工学科 MIPSのアドレシング・モード z レジスタ・アドレシング ¾ レジスタをオペランドとする z ベース相対アドレシング ¾ 命令中に指定した定数とレジスタの和によって,オペランドが記憶され ているデータのメモリ番地を表す z 即値アドレシング ¾ 命令中に指定された定数をオペランドとする z PC相対アドレシング ¾ PCと命令中に指定した定数との和によって,フェッチする命令のメモリ 番地を表す z 擬似直接アドレシング ¾ 命令中の26ビットとPCの上位ビットを連結することによって,フェッチす る命令のメモリ番地を表す 九州大学工学部電気情報工学科 レジスタ・アドレシング レジスタをオペランドとする 例)add $s1, $s2, $s3 プロセッサ op rs rt rd ・・・ func レジスタ $s1 $s2 $s3 $s4 レジスタ R形式命令 $s1 $s2 $s3 $s4 ALU 九州大学工学部電気情報工学科 ベース相対アドレシング 命令中に指定した定数とレジスタの和によって オペランドが記憶されているデータのメモリ番地を表す I形式命令 例) lw $t1, 8 ($s3) op $t1 rt address 主記憶 プロセッサ レジスタ アドレス オフセット $s1 ベース $s2 $s3 X rs オフセット X X+4 X+8 A[0] A[1] A[2] A[99] 32ビットに符号拡張 ベース レジスタ + メモリ番地 九州大学工学部電気情報工学科 即値アドレシング 命令中に指定された定数をオペランドとする I形式命令 例)addi $s1, $s2, n op rs rt 即値 32ビットに符号拡張 レジスタ *)定数nは16bit の2の補数表現の符号つき整数 ALU 九州大学工学部電気情報工学科 PC相対アドレシング PCと命令中に指定した定数との和によって フェッチする命令のメモリ番地を表す 例) bne $s1, $s2, LableA (分岐命令の次命令のPC) PC I形式 00 op rs rt address address を符号拡張 + 00 整列化制約: 命令の 番地は常に4の倍数. 分岐先(Label の番地) 00 九州大学工学部電気情報工学科 擬似直接アドレッシング 命令中の26ビットとPCの上位ビットを連結すること によって,フェッチする命令のメモリ番地を表す 例) j LableA (ジャンプ命令の次命令のPC) PC J形式 分岐先 b31~b28 op b31~b28 b27~b2 00 整列化制約 address address 00 九州大学工学部電気情報工学科 MIPSのまとめ レジスタ MIPS のレジスタ レジスタ名 レジスタ番号 用途 $zero 0 $v0~$v1 2~3 関数の返り値 $a0~$a3 4~7 引数用 $t0~$t7 8~15 一時保存用 $s0~$s7 16~23 変数用 $t8~$t9 24~25 一時保存用 $sp 29 スタックポインタ(後述) 不可 $fp 30 フレームポインタ(後述) 不可 $ra 31 戻り番地 不可 定数値 0,不要な結果の破棄 関数呼出時のレジスタ破壊 (NA) 可 不可 可 不可 可 プログラムカウンタ PC: 次に実行する命令の番地を格納.非分岐命令実行ご とに +4 され,また分岐命令実行時に更新される. 九州大学工学部電気情報工学科 命令形式 命令形式: 命令語のフィールド構成. z MIPS は命令語を32bit 幅で統一している. z MIPS の命令形式は,R形式,I形式,J形式の3種類がある. z どの命令形式かは,op フィールド(命令操作コード)で判別できる. R形式 I形式 J形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt address/immediate 6bit 5bit 5bit 16bit op address 6bit 26bit 九州大学工学部電気情報工学科 命令セット z 算術論理演算 ¾ ¾ ¾ ¾ 加減算命令(R形式,I形式) 比較命令(R形式,I形式) 論理演算命令(R形式,I形式) シフト命令(R形式) z データ転送 ¾ メモリロード命令(I形式) ¾ メモリストア命令(I形式) ¾ 即値ロード命令(I形式) z 分岐 ¾ 条件分岐命令(I形式) ¾ 無条件分岐命令(R形式,J形式) 九州大学工学部電気情報工学科 加減算命令(1) レジスタ±レジスタ → レジスタ add sub addu subu $○, $○, $○, $○, $△, $△, $△, $△, $□ $□ $□ $□ # # # # $△ $△ $△ $△ + – + – $□ $□ $□ $□ → $○ → $○ → $○ → $○ z add/sub 命令は,2の補数表現された符号つき整数の加減算 を行う. z addu/subu 命令は,符号なし整数の加減算を行う. z add/sub 命令と addu/subu 命令はオーバーフロー発生時の振 る舞いが違う.(計算については同じことを行う.) 九州大学工学部電気情報工学科 加減算命令(2) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt rd shamt funct add $○, $△, $□ 000000 $△ $□ $○ 00000 100000 addu $○, $△, $□ 000000 $△ $□ $○ 00000 100001 sub $○, $△, $□ 000000 $△ $□ $○ 00000 100010 subu $○, $△, $□ 000000 $△ $□ $○ 00000 100011 命令 九州大学工学部電気情報工学科 加減算命令(3) レジスタ + 定数 → レジスタ addi addiu $○, $△, n $○, $△, n # $△ + n → $○ # $△ + n → $○ 即値オペランド z addi/addiu 命令では,定数 n に 16bit の2の補数表現の符号 つき整数(–32768~32767)を指定できる. z 定数 n は 32bit に符号拡張されてから加算される. z addi 命令と addiu 命令はオーバーフロー発生時の振る舞いが 違う.(計算については同じことを行う.) z 「subi」「subiu」は存在しない.(∵addi,addiu で代用すればよ い.) 九州大学工学部電気情報工学科 加減算命令(4) I形式 op rs rt address/immediate 6bit 5bit 5bit 16bit op rs rt address/immediate addi $○, $△, n 001000 $△ $○ n addiu $○, $△, n 001001 $△ $○ n 命令 九州大学工学部電気情報工学科 加減算命令(5) 例) $s1 に 65539 が格納されているとき, addi $s0, $s1, 13 00000000 00000001 +) 00000000 00000000 00000000 00000001 addi 00000000 00000011 00000000 00001001 00000000 00001100 $s1: 65539(10) 13(10) $s0: 65552(10) 00000000 00000011 11111111 11110111 11111111 11111010 $s1: 65539(10) –13(10) $s0: 65526(10) $s0, $s1, –13 00000000 00000001 +) 11111111 11111111 00000000 00000000 九州大学工学部電気情報工学科 比較命令(1) レジスタ < レジスタ → レジスタ slt sltu $○, $△, $□ $○, $△, $□ # $△ < $□ → $○ # $△ < $□ → $○ レジスタ < 定数 → レジスタ(定数は 32bit に符号拡張) slti sltiu $○, $△, n $○, $△, n # $△ < n → $○ # $△ < n → $○ z slt/slti 命令は,第二オペランドと第三オペランドを 2 の補数表現された符 号つき整数とみなして,比較結果を $○ に書き込む. z sltu/sltiu 命令は,第二オペランドと第三オペランドを符号なし整数とみなし て,比較結果を $○ に書き込む. z slti/sltiu 命令では,定数 n は 32bit に符号拡張されてから比較される. 九州大学工学部電気情報工学科 比較命令(2) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt rd shamt funct slt $○, $△, $□ 000000 $△ $□ $○ 00000 101010 sltu $○, $△, $□ 000000 $△ $□ $○ 00000 101011 命令 九州大学工学部電気情報工学科 比較命令(3) I形式 op rs rt address/immediate 6bit 5bit 5bit 16bit op rs rt address/immediate slti $○, $△, n 001010 $△ $○ n sltiu $○, $△, n 001011 $△ $○ n 命令 九州大学工学部電気情報工学科 論理演算命令(1) レジスタ and/or レジスタ → レジスタ and or xor $○, $△, $□ $○, $△, $□ $○, $△, $□ # $△ & $□ → $○ # $△ | $□ → $○ # $△ ^ $□ → $○ レジスタ and/or 定数 → レジスタ(定数は 32bit にゼロ拡張) andi ori xori $○, $△, n $○, $△, n $○, $△, n # $△ & n → $○ # $△ | n → $○ # $△ ^ n → $○ 九州大学工学部電気情報工学科 論理演算命令(2) ANDゲート: 入力が全て 1 のときのみ出力が 1. A Y B A B Y 0 0 0 0 1 0 1 0 0 1 1 1 AND演算(&): オペランドのビットごとに AND をとる. 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 0 1 0 1 0 0 0 0 0 九州大学工学部電気情報工学科 論理演算命令(3) ORゲート: 入力のいずれかが 1 のときのみ出力が 1. A Y B A B Y 0 0 0 0 1 1 1 0 1 1 1 1 OR演算(|): オペランドのビットごとに OR をとる. 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 0 1 1 1 1 1 1 1 0 九州大学工学部電気情報工学科 論理演算命令(4) XORゲート: 2つの入力が異なる値のときのみ出力が 1. A Y B A B Y 0 0 0 0 1 1 1 0 1 1 1 0 XOR演算(^): オペランドのビットごとに XOR をとる. 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 九州大学工学部電気情報工学科 論理演算命令(5) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt rd shamt funct and $○, $△, $□ 000000 $△ $□ $○ 00000 100100 or $○, $△, $□ 000000 $△ $□ $○ 00000 100101 xor $○, $△, $□ 000000 $△ $□ $○ 00000 100110 命令 九州大学工学部電気情報工学科 論理演算命令(6) I形式 op rs rt address/immediate 6bit 5bit 5bit 16bit op rs rt address/immediate andi $○, $△, n 001100 $△ $○ n ori $○, $△, n 001101 $△ $○ n xori $○, $△, n 001110 $△ $○ n 命令 九州大学工学部電気情報工学科 シフト命令(1) レジスタを n ビット論理左右シフト → レジスタ sll srl $○, $△, n $○, $△, n # $△ を n ビット論理左シフト → $○ # $△ を n ビット論理右シフト → $○ レジスタを n ビット算術右シフト → レジスタ sra $○, $△, n # $△ を n ビット算術右シフト → $○ 九州大学工学部電気情報工学科 シフト命令(2) n ビット論理シフト演算: n ビット分を左右にずらし,はみ出したビッ トを捨てて,空いたビットに 0 を補填する. n ビット左シフト: 0 1 1 1 0 1 1 0 n=2の場合 0 1 1 1 0 1 1 0 0 0 n ビット右シフト: 0 1 1 1 0 1 1 0 n=2の場合 0 0 0 1 1 1 0 1 1 0 九州大学工学部電気情報工学科 シフト命令(3) n ビット算術右シフト演算: n ビット分を右にずらし,はみ出したビッ トを捨てて,空いたビットに 最上位ビット(符号ビット) を補填する. n ビット右シフト: 1 1 1 1 0 1 1 0 n=2の場合 1 1 1 1 1 1 0 1 1 0 九州大学工学部電気情報工学科 シフト命令(4) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt rd shamt funct sll $○, $△, n 000000 00000 $△ $○ n 000000 srl $○, $△, n 000000 00000 $△ $○ n 000010 sra $○, $△, n 000000 00000 $△ $○ n 000011 命令 九州大学工学部電気情報工学科 データ転送命令(1) レジスタ/メモリ間(符号つき) lw lh lhu lb lbu sw sh sb $○, $○, $○, $○, $○, $○, $○, $○, n($△) n($△) n($△) n($△) n($△) n($△) n($△) n($△) # # # # # # # # ($△ + ($△ + ($△ + ($△ + ($△ + $○ → $○ → $○ → n)番地 → $○,1ワード(32bit) n)番地 → $○,1ハーフワード(16bit) n)番地 → $○,1ハーフワード(16bit) n)番地 → $○,1バイト(8bit) n)番地 → $○,1バイト(8bit) ($△ + n)番地,1ワード(32bit) ($△ + n)番地,1ハーフワード(16bit) ($△ + n)番地,1バイト(8bit) z オフセット n には,16bit の2の補数表現の整数(–32768~32767)を指定できる. z オフセット n は 32bit に符号拡張されてからベースレジスタに加算される. z lw/sw 命令の対象番地は4の倍数,lh/sh 命令の対象番地は2の倍数でなければな らない.(整列化制約) z lb/lh 命令では読み込むデータの符号拡張,lbu/lhu 命令ではゼロ拡張が行われる. 九州大学工学部電気情報工学科 データ転送命令(2) lw/lh/lb/lhu/lbu/sw/sh/sb $○, n($△) $○ –32768 $△ zzzz +n 32767 a b c d lw/sw a b c d lh/sh X X a b lhu 0 0 a b lb/sb X X X a lbu 0 0 0 a 九州大学工学部電気情報工学科 データ転送命令(3) I形式 op rs rt address/immediate 6bit 5bit 5bit 16bit 命令 op rs rt address/immediate lw $○, n($△) 100011 $△ $○ n sw $○, n($△) 101011 $△ $○ n lh $○, n($△) 100001 $△ $○ n lhu $○, n($△) 100101 $△ $○ n sh $○, n($△) 101001 $△ $○ n lb $○, n($△) 100000 $△ $○ n lbu $○, n($△) 100100 $△ $○ n sb $○, n($△) 101000 $△ $○ n 九州大学工学部電気情報工学科 データ転送命令(4) 即値→レジスタ lui $○, n # $○の上位 16bit に n を格納 # $○の下位 16bit に 0 を格納 $○ n 0000…00 32bit 即値(nm)の転送 lui $○, n addi $○, m lui ori $○, n $○, m # $○の上位 16bit に n を格納 # $○の下位 16bit に m を格納(符号拡張あり) # $○の上位 16bit に n を格納 # $○の下位 16bit に m を格納(符号拡張なし) 九州大学工学部電気情報工学科 データ転送命令(5) I形式 命令 lui $○, n op rs rt address/immediate 6bit 5bit 5bit 16bit op rs rt address/immediate 001100 00000 $○ n 九州大学工学部電気情報工学科 分岐命令(1) j jal jr beq bne Label # Label に無条件分岐 Label # Label に無条件分岐(関数呼出用) $○ # $○の番地に無条件分岐 $△, $□, Label # $△ = $□ ならば Label に分岐 $△, $□, Label # $△ ≠ $□ ならば Label に分岐 z 命令によってジャンプできる範囲に違いがある. ¾j, jal(J形式):擬似直接アドレシング ¾jr(R形式):レジスタ値をそのままPCに設定 ¾beq, bne(I形式):PC相対アドレシング 九州大学工学部電気情報工学科 分岐命令の守備範囲 00000000 10000000 PC相対アドレシング (PCを中心に 218 番地の範囲) 20000000 30000000 40000000 50000000 PC JR命令は全域 60000000 70000000 擬似直接アドレシング (PCを含むに 228 番地分のページ) D0000000 E0000000 F0000000 九州大学工学部電気情報工学科 分岐命令(2) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt rd shamt funct 000000 $○ 00000 00000 00000 001000 命令 jr $○ I形式 op rs rt address/immediate 6bit 5bit 5bit 16bit op rs rt address/immediate beq $△, $□, Label 000100 $△ $□ d bne $△, $□, Label 000101 $△ $□ d 命令 九州大学工学部電気情報工学科 分岐命令(3) J形式 op address 6bit 26bit 命令 op immediate j Label 000010 ラベル Label の番地のビット27~2 jal Label 000011 ラベル Label の番地のビット27~2 擬似直接アドレッシング: j, jal 命令の分岐先番地 PC J形式 分岐先 b31~b28 j/jal b31~b28 整列化制約 b27~b0 address address 00 九州大学工学部電気情報工学科 アドレシングモード アドレシングモード: 機械語における番地指定,さらにはオペラン ドの表現方法. アドレシングモード 形式 説明 レジスタアドレシング R 「$○」と直接レジスタを指定する形式. add, sub, and, or 命令など. ベース相対アドレシング I 「n($○)」とベースレジスタとオフセットで主記憶の 番地を指定する形式.lw, sw 命令など. 即値アドレシング I 「n」と定数を指定する形式.addi, subi, andi, ori 命 令など. 擬似直接アドレシング J 命令の番地を指定する形式.アセンブリ言語では ラベル名として表される.j, jal 命令など. PC相対アドレシング I 命令の番地を指定する形式.アセンブリ言語では, 擬似直接アドレシングと同様にラベル名として表さ れるが,命令表現の形式と意味は異なる. beq, bne 命令など. 九州大学工学部電気情報工学科 R形式(1) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit 命令 op rs rt rd shamt funct add $○, $△, $□ 000000 $△ $□ $○ 00000 100000 addu $○, $△, $□ 000000 $△ $□ $○ 00000 100001 sub $○, $△, $□ 000000 $△ $□ $○ 00000 100010 subu $○, $△, $□ 000000 $△ $□ $○ 00000 100011 slt $○, $△, $□ 000000 $△ $□ $○ 00000 101010 sltu $○, $△, $□ 000000 $△ $□ $○ 00000 101011 and $○, $△, $□ 000000 $△ $□ $○ 00000 100100 or $○, $△, $□ 000000 $△ $□ $○ 00000 100101 xor $○, $△, $□ 000000 $△ $□ $○ 00000 100110 九州大学工学部電気情報工学科 R形式(2) R形式 op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit 命令 op rs rt rd shamt funct sll $○, $△, n 000000 00000 $△ $○ n 000000 srl $○, $△, n 000000 00000 $△ $○ n 000010 sra $○, $△, n 000000 00000 $△ $○ n 000011 jr $○ 000000 $○ 00000 00000 00000 001000 九州大学工学部電気情報工学科 I形式(1) I形式 op rs rt immediate 6bit 5bit 5bit 16bit 命令 op rs rt immediate addi $○, $△, n 001000 $△ $○ n addiu $○, $△, n 001001 $△ $○ n slti $○, $△, n 001010 $△ $○ n sltiu $○, $△, n 001011 $△ $○ n lui $○, $△, n 001111 $△ $○ n andi $○, $△, n 001100 $△ $○ n ori $○, $△, n 001101 $△ $○ n xori $○, $△, n 001110 $△ $○ n 九州大学工学部電気情報工学科 I形式(2) I形式 op rs rt address 6bit 5bit 5bit 16bit 命令 op rs rt immediate lw $○, n($△) 100011 $△ $○ n sw $○, n($△) 101011 $△ $○ n lh $○, n($△) 100001 $△ $○ n lhu $○, n($△) 100101 $△ $○ n sh $○, n($△) 101001 $△ $○ n lb $○, n($△) 100000 $△ $○ n lbu $○, n($△) 100100 $△ $○ n sb $○, n($△) 101000 $△ $○ n 九州大学工学部電気情報工学科 I形式(3) op rs rt address 6bit 5bit 5bit 16bit I形式 命令 op rs rt address beq $△, $□, Label 000100 $△ $□ d bne $△, $□, Label 000101 $△ $□ d 九州大学工学部電気情報工学科 z Created by Tsuneo Nakanishi, 2002-2004 (R1.00) z Updated by Koji Inoue, 2005 (R1.01) z Updated by Koji Inoue, 2007 (R1.02) 九州大学工学部電気情報工学科
© Copyright 2024 ExpyDoc