計算機アーキテクチャ 第13回 命令セットとアドレッシング 2014年 7月7日 電気情報工学科 田島 孝治 第13回 計算機アーキテクチャ 1 授業スケジュール(前期) 回 日付 タイトル 回 日付 タイトル 1 4/7 コンピュータ技術の歴史と コンピュータアーキテクチャ 10 6/16 主記憶装置とレジスタ 11 6/20 命令実行の流れ 12 6/30 命令形式とアセンブリ言語 13 7/7 命令セットとアドレッシング 14 7/14 サブルーチンの実現 15 7/28 PCSpimによるアセンブリ言語 プログラム 8/4? 期末試験(日程は仮) 9/29? フォローアップ(日程は仮) 2 4/14 ノイマン型コンピュータ 3 4/21 コンピュータのハードウェア 4 4/28 数と文字の表現 5 5/12 固定小数点数と浮動小数点表現 6 5/19 計算アーキテクチャ(ARU) 7 5/26 計算装置のハードウェア実装 8 6/2 文字コード 9 6/11 中間試験(9:00-9:50) 16 ※5/5はこどもの日、7/21は海の日のため休講 ※授業変更:6/23 1時限→6/20 3時限 第13回 計算機アーキテクチャ 2 R形式の特殊命令 HIとLOのレジスタはどうやって読み込む? 専用の命令があります 第13回 計算機アーキテクチャ 3 64ビットを使った掛け算 main: loop: li li li li $t1,1024 # t1 = 0 $t2,4 # t2 = 0 $t3,1000000000 # $t4,16 # mul mult mfhi mflo mult mfhi mflo $t0, $t1, $t2 $t1,$t2 $s0 $s1 $t3,$t4 $s2 $s3 # # # # # # # t3 = (0x3B9ACA00) t4 = (0x00000010) t0 = t1 * t2 (HI,LO) = t1 * t2 s1 = HI s0 = LO (HI,LO) = t3 * t4 s2 = HI s3 = LO レジスタ上はきちんと保持されている 表示には工夫が必要 4 今日の授業の目的 メモリ操作命令の形式について理解する メモリ番地を表す手法(アドレッシング)につ いて理解を深める メモリ操作命令のフォーマットを理解し、R形式と同 様に、バイナリの表現をできるようにする メモリ番地を命令の中で表現する方法を学ぶ 第13回 計算機アーキテクチャ 5 6 メモリ操作命令 ロード命令 ストア命令 メモリ上の特定の番地からレジスタへ値を読み込む メモリ上の特定の番地にレジスタの値を書き込む 命令の形式:I形式 メモリ操作 (load, store等) op レジスタ rs アドレス rt アドレス R形式とは異なり、アドレスを指定可能な書式とする ハードウェアの動作も異なる ただし命令長は変わらない 第13回 計算機アーキテクチャ 具体的な命令の例(I形式) I形式の命令 演算命令 命令コード 使用例 意味 メモリ読み込み lw lw $t0 C($s0) t0 = Memory[$s+C] メモリ書き込み sw sw $t0 C($s0) Memory[$s + C] = t0 beq $s,$t,10 2つのレジスタの値が 等しい場合に指定した アドレスに処理を移す bne bne $s 2つのレジスタの値が 等しくない場合に指定 アドレスに処理を移す 加算(即値) addi addi $t0,$a0,10 t0 = a0 + 10 比較 slti slti $t0,$a0,10 t0 = (a0 < C) 条件分岐 beq 条件分岐 第13回 計算機アーキテクチャ 7 ビット列の作り方(I形式) imm は immediate(即値)を表す つまり、レジスタと直接指定した値を比較したり、直接値を代入したりできる 第13回 計算機アーキテクチャ 8 9 ビット列の作り方(I形式)2 Offsetとアドレスの関係は?? 第13回 計算機アーキテクチャ 10 メモリアドレス 計算機上のメモリ 一意の長さを持つ:アドレス長と呼ぶ メモリアドレス メモリ番地 メモリの内容 0 プログラム1 1 プログラム2 ・・・ ・・・ 65536 データN アドレス長はいくつが適切か? 大きくするほどメモリも大きくできる メモリアドレスはプログラムカウンタ(レジスタの一種) に格納される → レジスタの大きさと同じにしたい 第13回 計算機アーキテクチャ 命令におけるアドレス問題 11 メモリアドレスが命令に入らない レジスタ長=データ長 データ長が32bitのとき、メモリアドレスが32bit メモリ番地を16ビット分 しか記述できない どうやって16bitで32bit分のアドレスを表す? 第13回 計算機アーキテクチャ 12 4種類のアドレッシング op rs rt imm op 即値アドレッシング 値を直接記入 rs rs rt rt address レジスタアドレッシング アドレスの入ったレジスタを指定 op rs offset op rs rt offset + rs address = 指定したaddress 指定したaddress ベース相対アドレッシング PC = address + レジスタの値+相対位置 第13回 で指定 PC相対アドレッシング PCからの相対位置を指定 計算機アーキテクチャ 直接アドレッシングの命令語 immには直接値が入る もちろん2進数に変換される 例題;次の命令をバイナリ列に直せ addi $t3, $s1, 36 op rs rt 第13回 計算機アーキテクチャ Imm 13 14 レジスタ番号対応表 レジスタ名 レジスタ番号 使用用途 zero 0 常に0を保持するレジスタ at 1 アセンブラ用一時レジスタ(利用不可) v0,v1 2,3 関数の戻り値を格納 a0, a1, a2, a3 4,5,6,7 関数の引数を格納 t0,…,t7, t8, t9 8,…,15,24,25 一次変数(関数呼び出し時に破棄) s0,..., s7, s8 16,…,23,30 自由な変数(関数呼び出し時に保持) k0, k1 26, 27 OSカーネルの戻り値を格納 gp 28 グローバルポインタを格納 sp 29 スタックポインタを格納 ra 31 関数から戻る際のアドレスを格納 第13回 計算機アーキテクチャ 15 ベース相対アドレッシングの命令語 rsにベースアドレスを保存したレジスタを指定 Offset で指定した値からの変化量を指定 例題;次の命令をバイナリ列に直せ sw $t1, 4($sp) op rs rt 第13回 計算機アーキテクチャ Offset PC相対アドレッシングの命令語 rsとrtは計算処理に使われる Offset でPCからの変化量を指定 例題;次の命令をバイナリ列に直せ (ただしラベル”loop”はこの命令の6行前にある) beq $t1, $t2, loop op rs rt 第13回 計算機アーキテクチャ Offset 16 例題のプログラム(全体図) Data segment中に保存用のメモリを定義 lwやswでメモリを読み書きする際には必要 「***:」でアドレスにラベルを付けて領域を確保できる # Data segment .data lb0: .word 1 # Text segment .text .globl main main: li $t1,0 # t1 = 0 (続く) 第13回 計算機アーキテクチャ 17 例題のプログラム(全体図) main: li $t1,0 # t1 = 0 li $t2,0 # t2 = 0 li $t3,10 # t3 = 10 li $t4,0 # t4 = 1 li $s0,0 # s0 = 0 # Data segment .data lb0: .word 1 loop: add $s0,$s0,$t2 # s0 = s0 + t2 la $t5, lb0 # t5 = Address of lb0 sw $s0, 0($t5) # Store $s to Memory[t5 + 0] addi $t2,$t2,1 # t2++ slt $t4,$t3,$t2 # if(t3 < t2) then t4 = 1 beq $t1,$t4, loop # if(t1 == t4) goto loop add $t0,$t3,$zero # t0 = t3 jr $ra # end of program 18 19 例題 次のC言語のプログラムをMIPS形式に変換せよ int a,b; a = 10; b = 3 + a * 2; a,bはメモリ上の領域 レジスタは何を使っても構わない 変数に値が代入される=メモリに書き込まれると考えること 第13回 計算機アーキテクチャ 20 回答欄 # Data segment .data a: .word 1 b: .word 1 # Text segment .text .globl main main: 第13回 計算機アーキテクチャ 21 演習問題1 次のC言語のプログラムをMIPS形式に変換せよ int a,b,c; a = 10; b = 20; c = (a - 5) + b * 3; a,b,cはメモリ上の領域 レジスタは何を使っても構わない 変数に値が代入される=メモリに書き込まれると考えること 第13回 計算機アーキテクチャ 22 回答欄 # Data segment .data a: .word 1 b: .word 1 c: .word 1 # Text segment .text .globl main main: 第13回 計算機アーキテクチャ 23 演習問題2 次のC言語のプログラムをMIPS形式に変換せよ int a,b,t; a = 10; b = 0; for(t = 0;t< 5; t++){ b = b + a * t; } a,bはメモリ上の領域とする 変数に値が代入される=メモリに書き込まれると考えること 変数tはレジスタt0に対応させる 他のレジスタは何を使っても構わない 第13回 計算機アーキテクチャ 24 回答欄 # Data segment .data a: .word 1 b: .word 1 # Text segment .text .globl main main: 第13回 計算機アーキテクチャ
© Copyright 2025 ExpyDoc