2014.11.12 コンピュータアーキテクチャI 課題解答例 (第 6 回) 1. 講義ノート 4 の演習 1∼演習 5 を行え. 演習 1: or and $s3, $s4, $s5 $s2, $s3, $s6 #g=h|i #f=g&j xor $s1, $s2, $s4 #e=f^h sll add $t0, $s4, 2 $t0, $s3, $t0 #i*4 #&A[i] lw add $t0, 0($t0) $s1, $s2, $t0 #A[i] #g=h+A[i] $s1, $s2, 4 $s1, $s2, 6 #g=h*16 #g=h/64 演習 2: 演習 3: sll srl 演習 4: bne add j ELSE: $s3, $s4, ELSE #if(i!=j) goto ELSE $s0, $s1, $s2 #then clause NEXT sub $s0, $s1, $s2 NEXT: ... #else clause 演習 5: LOOP: sll $t0, $s3, 2 #i*4 add lw bne $t0, $s6, $t0 $t1, 0($t0) $t1, $s5, EXIT #address of save[i] #load save[i] #save[i]==k? branch if not. add j $s3, $s3, $s4 LOOP #i=i+j EXIT: ..... 1 2. 講義ノート 4 の演習 6 を考え,検討結果を述べよ. 演習 6:解答例 100 104 slt bne $t0, $s5, $zero #k<0? $t0, $zero, ExCase #yes, then branch 108 10C slt beq $t0, $s5, $t2 #k<4? $t0, $zero, ExCase #no, then branch 110 114 118 sll add lw $t0, $s5, 2 $t0, $t4, $t0 $t1, 0($t0) #4*k #top address of jump table + 4*k #get branch address 11C jr case0: $t1 #branch 120 add 124 j case1: $s0, $s3, $s4 ExCase #f=i+j #break 128 12C add j $s0, $s1, $s2 ExCase #f=g+h #break case2: 130 sub 134 j $s0, $s1, $s2 ExCase #f=g-h #break case3: 138 sub $s0, $s3, $s4 #f=i-j 13C j ExCase ExCase: 140 ..... #break CaseTable: 200 204 208 dw dw dw case0 case1 case2 #address of case0 #address of case1 #address of case2 20C dw case3 #address of case3 解説:上記プログラムで左端の数字はプログラムの格納されるメモリ番地である(一例です). dw は define word の意味で,4 バイトのデータを定義する擬似命令.dw case0 で case0 ラベル のアドレスが 4 バイトのデータとして定義される.上記の例では case0 ラベルのアドレスは 120 で あるから,200 番地には 120 というデータが格納される.以下,204 番地には 128,208 番地には 130,20C 番地には 138 が格納される. CaseTable ラベルのアドレスは 200 であるから,$t4 には 200 が入っている. 上記のプログラムで,k=2 として,すなわち,$s5 の値を 2 として,シミュレートしてください. ちゃんと,case2 にたどり着きましたか? 2 3. 教科書の問題 2.18.1 と 2.18.2 を行え. 問題 2.18.1 下図のようになる. i=0 i<10? yes a<10? no yes no D[a]=b+a a+=b a+=1 i++ Exit Exit (b) (a) 問題 2.18.2 a. addi LOOP: $t0, $zero, 0 #i=0 slti bne $t2, $t0, 10 #i<10? $t2, $zero, EXIT #if i<10 then goto EXIT add addi j $s0, $s0, $s1 $t0, $t0, 1 LOOP #a+=b #i++ EXIT: b. LOOP: slti beq $t2, $s0, 10 #i<10? $t2, $zero, EXIT #if i>=10 then goto EXIT add sll $t0, $s1, $s0 $t1, $s0, 2 #t0=b+a #a*4 add sw addi $t1, $t1, $s2 $t0, 0($t1) $s0, $s0, 1 #&D[a] #D[a]=b+a #a+=1 j EXIT: LOOP 3
© Copyright 2024 ExpyDoc