10.07.2015 Views

コンピュータアーキテクチャ1 - 九州大学

コンピュータアーキテクチャ1 - 九州大学

コンピュータアーキテクチャ1 - 九州大学

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

命 令 の 内 部 表 現• MIPSコンピュータは add $s0, $s1,$s2 という 文 字 列 を 直 接 認 識 するわけではない.• 実 際 には 複 数 の0/1のビットの 集 まり(01001010101)が 命 令 の 正 体 .• このビットの 集 まりを2 進 数 (binarynumber)とみなせば, 命 令 とは 数 値 である.


レジスタと 番 号 の 対 応 づけ• $s0 や $t1 といったレジスタも 数 値 化 される 必 要 がある.• MIPS では,$s0 16 $s1 17 $s2 18 .. .. $s7 23$t0 7 $t1 8 .. .. $t7 15• ここでは $s0 から $s7 と $t0 から $t7 のみの 割 り 当 てを 示 している. 残 りは 後(P.127 の 図 3.13)で 説 明 する.


P.106 の 例 題• add $t0, $s1, $s2 という 命 令 がどのような 機 械 語 になるのか?• 命 令 をいくつかの 固 まりフィールド(field)に 区 切 る.• 10 進 表 記 と2 進 表 記• 0 17 18 8 0 32• 00000 10001 10010 01000 00000 100000


機 械 語• 数 値 化 された 命 令 -> 機 械 語 (machinelanguage)• 機 械 語 の 連 なり -> マシンコード(machine code)• フィールドなどの 規 則 -> 命 令 形 式(instruction format)• MIPSの 命 令 は32ビット(1 語 )


フィールド 名 (R 形 式 )• op(6) : 命 令 操 作 コード(opcode,オペコード)• rs(5) : 第 1ソースオペランドのレジスタ• rt(5) : 第 2ソースオペランドのレジスタ• rd(5) : デスティネーションオペランドのレジスタ• shamt(5) : シフト 量 (シフト 命 令 に 関 しては後 述 )• funct(6): 機 能 コード(function code)


宿 題 1• rs, rt, rd フィールド 長 はどのような 要因 で 決 められているか 考 察 せよ.


R 形 式 だけでは 不 足• 上 の 命 令 形 式 はロード 命 令 に 適 していない.• ロード 命 令 のオペランドは2つのレジスタと1つのオフセット• レジスタのフィールドがひとつ 無 駄• shamt だけでは5ビット = 32 個 の 要 素 しか表 せない.• 命 令 長 を32ビットに 保 つためには 異 なる 命 令形 式 を 用 いるしかない.


I 形 式• op(6)• rs(5)• rt(5)• address(16)• 教 科 書 では 後 で 符 号 つき 数 の 説 明 が 出 てくるのに 暗 にこの16ビットのアドレスで±32,768の 範 囲 が 指 定 できると 書 いている.p.109に 補 足 として2の 補 数 表 現 の 話 が 簡単 に 書 いてある.


複 数 の 命 令 形 式• 複 数 の 異 なる 命 令 形 式 を 持 つとコンピュータの 制 御 は 複 雑 になる.• でも R 形 式 と I 形 式 は 最 初 の3つのフィールド(op, rs, rt)は 共 通• 残 りの (rd, shamt, funct)と addressのみが 異 なる.• 命 令 形 式 の 区 別 は opcode で 行 なう.


複 数 の 命 令 形 式• 複 数 の 異 なる 命 令 形 式 を 持 つとコンピュータの 制 御 は 複 雑 になる.• でも R 形 式 と I 形 式 は 最 初 の3つのフィールド(op, rs, rt)は 共 通• 残 りの (rd, shamt, funct)と addressのみが 異 なる.• 命 令 形 式 の 区 別 は opcode で 行 なう.


複 数 の 命 令 形 式• 複 数 の 異 なる 命 令 形 式 を 持 つとコンピュータの 制 御 は 複 雑 になる.• でも R 形 式 と I 形 式 は 最 初 の3つのフィールド(op, rs, rt)は 共 通• 残 りの (rd, shamt, funct)と addressのみが 異 なる.• 命 令 形 式 の 区 別 は opcode で 行 なう.


まとめの 例 題• - A[300] = h + A[300] をアセンブリ 言 語に 変 換 し,さらにマシンコードに 直 せ.• $t1 に A のベースアドレス• $s2 が h に 対 応 する.• lw $t0, 1200($t1) add $t0, $s2, $t0sw $t0, 1200($t1)• 35 19 8 1200 (10 進 ) 0 18 8 8 0 32 43 19 8 1200• 100011 10011 01000 0000010010110000 (2 進 )• 000000 10010 01000 01000 00000 100000• 101011 10011 01000 0000010010110000


宿 題 2• A[150] = h + A[10] をアセンブリ 言語 に 変 換 し,さらにマシンコードに 直せ


根 本 事 項• 命 令 も 数 値• データとプログラムの 両 方 がメモリに格 納 されている.• プログラムもデータと 同 様 に 書 き 換 えが 可 能 . 専 用 ハード -> 汎 用 コンピュータ


条 件 判 定 用 の 命 令• 実 際 には 無 条 件 分 岐 命 令 もあるのだから 条 件 判 定 ではなく 制 御用 の 命 令• コンピュータが( 単 純 な) 電 卓 と 異 なる 部 分 は, 同 じ 命 令 を 繰 り返 し 実 行 したり, 条 件 に 従 って 異 なる 命 令 を 実 行 したりできるところにある.• MIPS の 命 令 では 条 件 分 岐 (conditional branch) 命 令 を 用 いてこのような 繰 り 返 しや 条 件 判 定 を 行 なう.• beq register1, register2, L1 [B]ranch if [EQ]ual の 略 で,register1 と register2 の 値 が 等 しい (equal) 時 に L1 というラベル(label)を 持 つ 場 所 に 制 御 を 移 す.• bne register1, register2, L1 [B]ranch if [N]ot [E]qual の略 で,register1 と register2 の 値 が 等 しくないときに L1 というラベルを 持 つ 場 所 に 制 御 を 移 す.


例 題if ( i == j ) goto L1;f = g + h;L1: f = f - i;• f($s0), g($s1), h($s2), i($s3), j($s4) という 割 り 当 て.• 基 本 的 にはそのまま 置 き 換 えれば 良 い.beq $s3, $s4, L1add $s0, $s1, $s2L1: sub $s0, $s0, $s3• 注 意 事 項 : この 「L1:」というラベルに 相 当 する 機 械 語 命 令 は 存在 しない. 実 際 にはこの sub $s0, $s0, $s3 という 命 令 が 格納 されているメモリのア ドレスを 表 すために 用 いている.beq/bne 命 令 中 でこのL1に 対 応 するメモリアドレスがどのように 表 されているかの 詳 細 は 後 述 (3.8).


例 題if (i == j) f = g + h; elsef = g - h;• 前 の 例 題 と 異 なるのは f = g + h を 実 行 した 後 で 次 のf = g - h を 実 行 してはいけないということ.• そのためにMIPSには 無 条 件 分 岐 (unconditionalbranch) 命 令 を 用 意 している.bne $s3, $s4, Elseadd $s0, $s1, $s2j ExitElse: sub $s0, $s1, $s2 Exit: ( 次 の 命 令 )• もとのプログラムでは i == j と 等 価 比 較 を 行 なっているが,ここでは bne 命 令 を 用 いていることに 注意 .


例 題Loop: g = g + A[i];i = i + j;if ( i != h ) goto Loop;• A のベースは $s5• g($s1), h($s2), i($s3), j($s4)Loop: add $t1, $s3, $s3 # 3.3 節 のコードと 同 じadd $t1, $t1, $t1add $t1, $t1, $s5 # $t1 は A[i] のアドレスlw $t0, 0($t1)add $s1, $s1, $t0 # g = g + A[i];add $s3, $s3, $s4 # i = i + j;bne $s3, $s2, Loop


例 題• 大 小 関 係 の 判 定• 2つの 値 の 関 係 には「 等 しい」「 等 しくない」 以 外 に「 小 さい」「 大 きい」がある.• MIPS では 大 小 関 係 の 判 定 のために slt ([S]et on [L]ess[T]han) 命 令 を 用 意 している.• slt $t0, $s3, $s4• $s3 の 値 が $s4 よりも 小 さいとき( 等 しい 場 合 は 含 まない)に$t0 に 1 を 設 定 し,そうでないときには $t0 に 0 を 設 定 する.• [ 注 意 事 項 ] 教 科 書 には 第 1のレジスタと 第 2のレジスタを 比 較 して 第 3のレジスタに0/1を 設 定 すると 書 いてあるが,この 第 1,第 2というのは 機 械 語 の 命 令 形 式 上 の Rs, Rt, Rd の 順 のことであり,アセンブリ 言 語 のニーモニック 表 現 上 の 順 のことではない.


例 題• a($s0)が b($s1)よりも 小 さいときに Lessというラベルへ 分 岐 するコードを 示 せ.slt $t0, $s0, $s1bne $t0, $zero, Less• ここで $zero は 特 殊 なレジスタで 常 に 0 という 値 を 持 っている.つまり,$zero に 値 を設 定 しても 値 は0から 変 わらない.ある 意 味,レジスタではないが, 良 く 用 いられる 定 数0をレジスタと 同 じように 扱 うための「 仕 掛け」.


宿 題 4• a($s0)がb($s1)よりも 大 きいときにGreater というラベルへ 分 岐 するコードを 示 せ.• a($s0)がb($s1)と 等 しいか 小 さいときに LE というラベルへ 分 岐 するコードを 示 せ. (ヒント: どちらの 場 合 も1つの slt 命 令 と 1つの 条 件 分 岐 命 令 で 実 現できる)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!