1 / 201

ソフトウェアとのインターフェース

ソフトウェアとのインターフェース. アセンブリ言語. MIPS  アセンブリ言語による加算 add a, b, c 動作 a= b+c 減算 sub a, b, c 動作 a=b-c. オペランド. アセンブリ言語. MIPS  アセンブリ言語による加算 add a, b, c 動作 a= b+c 減算 sub a, b, c 動作 a=b-c. ディスティネーション. オペランド. アセンブリ言語. MIPS  アセンブリ言語による加算 add a, b, c 動作 a= b+c 減算 sub a, b, c 動作 a=b-c.

Download Presentation

ソフトウェアとのインターフェース

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ソフトウェアとのインターフェース

  2. アセンブリ言語 • MIPS アセンブリ言語による加算 • add a, b, c • 動作 • a=b+c • 減算 • sub a, b, c • 動作 • a=b-c オペランド

  3. アセンブリ言語 • MIPS アセンブリ言語による加算 • add a, b, c • 動作 • a=b+c • 減算 • sub a, b, c • 動作 • a=b-c ディスティネーション オペランド

  4. アセンブリ言語 • MIPS アセンブリ言語による加算 • add a, b, c • 動作 • a=b+c • 減算 • sub a, b, c • 動作 • a=b-c ソース オペランド

  5. Cからアセンブリ言語への変換 • C コード • アセンブリコード a=b+c; d=a-e; add a,b,c sub d,a,e

  6. Cからアセンブリ言語への変換 • C コード • アセンブリコード f=(g+h)-(i+j); add t0,g,h#一時変数t0にg+hを記憶 add t1,i,j#一時変数t1にi+jを記憶 sub f,t0,t1#fにt0ーt1を代入 実際は変数はレジスタに割り当てられる。

  7. op rs rt rd shamt funct R形式命令(復習) • op:命令の種類を表現。オペコード(opcode)と呼ばれる。 • rs:第一ソースオペランドレジスタ。$s0、$s1、…、$s7 • rt:第二ソースオペランドレジスタ。$t0、$t1、…$t7 • rd:ディスティネーションレジスタ。 • shamt:シフト量。 • funct:あるopで表現される命令の機能の区別をする表現。機能コードと呼ばれる。

  8. レジスタの利用 • C コード • アセンブリコード f=(g+h)-(i+j); add $t0,$s1,$s2#一時変数t0にg($s1)+h($s2)を記憶 add $t1,$s3,$s4#一時変数t1にi($s3)+j(S4)を記憶 sub $s0,$t0,$t1#f($s0)に$t0ー$t1を代入

  9. メモリにある値をオペランドとした演算 • C コード • アセンブリコード g=h+A[8]; lw$t0,8($s3) add $s1,$s2,$t0 #h は$s2に格納 lw:1ワードをロードする命令 この場合、8+$s3のアドレスをロードする 今の例では32bitを考えているので1wordは32bit

  10. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  11. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ lw$t0,8($s3) 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  12. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  13. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 7 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  14. add メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 1 0 0 PC s0 s4 命令 デコーダ add $s1,$s2,$t0 0 0 s1 s5 7 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  15. add メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 1 0 0 PC s0 s4 命令 デコーダ add $s1,$s2,$t0 h+A[8] 0 s1 s5 7 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  16. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ lw$t0,8($s3) 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8] ベースレジスタ オフセット

  17. メモリのアドレス • 通常、多くのアーキテクチャではbyteつまり8bitを単位としてアドレスを表現する。 • 今までの図はワードアドレスとしては正しいがバイトアドレスとしては正しくない。MIPS32を仮定すると1word=32bit=4byte • 先のアセンブリコードは本来以下のようになる。 • プログラムカウンタもバイトアドレス表現の場合は4ずつ増える。 lw$t0,32($s3) add $s1,$s2,$t0 #h は$s2に格納

  18. バイトアドレス メモリ 3 0 メモリバス PC r0 r4 命令 デコーダ r1 r5 31 28 r2 r6 制御処理 r3 r7 ALU 演算処理 63 60

  19. ロードとストアが使用されるコード • C コード • アセンブリコード A[0]=h+A[8]; lw$t0,32($s3) add $t0,$s2,$t0 #h は$s2に格納 sw$t0,0($s3)

  20. lw メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 A[0] h 0 s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

  21. lw メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

  22. add メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 4 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] + A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

  23. add メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 4 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 A[0] h h+A[8] s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

  24. sw メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 8 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 A[0] h h+A[8] s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

  25. sw メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 8 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 h+A[8] h h+A[8] s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

  26. 条件判定(if-then-else) • C コード • アセンブリコード if(i==j) f=g+h;else f=g-h; bne $s3,$s4,Else #iと j が等しくなければ Else add $s0,$s1,$s2 j Exit #Exit へジャンプ Else: sub $s0,$s1,$s2 Exit:

  27. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 0 0 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  28. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 0 0 0 PC s0 s4 命令 デコーダ bne 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  29. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 4 0 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  30. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 4 0 0 PC s0 s4 命令 デコーダ add 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 + ALU 演算処理 60 63

  31. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 4 3 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  32. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 8 3 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  33. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 16 3 0 PC s0 s4 命令 デコーダ J 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  34. If-then-else (i==j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 16 3 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 0 0 s3 t1 ALU 演算処理 60 63

  35. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 0 0 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 ALU 演算処理 60 63

  36. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 0 0 0 PC s0 s4 命令 デコーダ bne 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 ALU 演算処理 60 63

  37. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 12 0 0 PC s0 s4 命令 デコーダ bne 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 ALU 演算処理 60 63

  38. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 12 0 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 ALU 演算処理 60 63

  39. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 12 0 0 PC s0 s4 命令 デコーダ sub 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 - ALU 演算処理 60 63

  40. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 12 -1 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 ALU 演算処理 60 63

  41. If-then-else (i!=j) メモリ メモリバス 3 bne $s3,$s4,12 0 add $s0,$s1,$s2 J 16 sub $s0,$s1,$s2 16 -1 0 PC s0 s4 命令 デコーダ 1 0 s1 s5 31 28 2 0 s2 t0 制御処理 1 0 s3 t1 ALU 演算処理 60 63

  42. 条件判定(while) • C コード • アセンブリコード while(A[i]!=k) i+=1; Loop:sll $t1,$s3,2 #$3を2ビットシフト=i*4 add $t1,$t1,$s6 #ベースアドレス加算 lw $t0,0($t1)#A[i]をロード beq$t0,$s5,Exit#A[i] と k の比較 addi $s3,$s3,1 j Loop Exit:

  43. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 0 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 0 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

  44. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 0 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 0 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

  45. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 0 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ sll 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 0 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

  46. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 4 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 0 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

  47. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 4 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ add 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 0 t0 t1 A[2]=2 A[3]=3 + ALU A[4]=4 60 63 演算処理

  48. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 4 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 40 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

  49. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 8 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 40 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

  50. while メモリ メモリバス 3 sll $t1,$s3,2 0 add $t1,$t1,$s6 lw$t0,0($t1) beq$t0,$s5,24 8 0 0 PC s0 s4 addi $s3,$s3,1 j 0 命令 デコーダ lw 1 3 s1 s5 31 28 2 40 s2 s6 制御処理 0 0 s3 s7 A[0]=0 A[1]=1 0 40 t0 t1 A[2]=2 A[3]=3 ALU A[4]=4 60 63 演算処理

More Related