Re: [理工] 計算機組織
※ 引述《black32044 (大黑)》之銘言:
: 原題是這樣的
: switch(k){
: case 0:f=i+j ; break ; /*k=0*/
: case 1:f=g+h ; break ; /*k=1*/
: case 2:f=g-h ; break ; /*k=2*/
: case 3:f=i-j ; break ; /*k=3*/
: }
: 其中變數f,g,h,i,j,k對應到$s0,$s1,$s2,$s3,$s4,$s5暫存器
: 且$t2暫存器為4,試問MIPS組合語言為何?
: [解]
: slt $t3,$s5,$Zero
: bne $t3,$Zero,Exit
: slt $t3,$s5,$t2
: beq $t3,$Zero,Exit
# 以上為check k的範圍有沒有在0~3
: add $t1,$s5,$s5
: add $t1,$t1,$t1
#做到這邊時 $t1 = 4*k
: add $t1,$t1,$t4 #jump table起始位置在$t4位置 (這邊我看不懂)
# jump table 是另外被產生的(表格)
# 裡面存的第一個word(位置是$t4+0) 所存的值是L0的address
# 第二個word(位置是$t4+4) 所存的值是L1的address
# 第三個word(位置是$t4+8) 所存的值是L2的address
# 第四個word(位置是$t4+12) 所存的值是L3的address
: lw $t0, 0($t1)
# 相當於去 存取$t4+4k的位置 所存的值 load 到$t0 (查表)
: jr $t0
#jump 到 $t0 暫存器裡面所存的(值)位置
: L0: add $s0,$s3,$s4
: j Exit
: L1: add $s0,$s1,$s2
: j Exit
: L2: sub $s0,$s1,$s2
: j Exit
: L3: sub $s0,$s3,$s4
: Exit:
: 前面幾行大概都看得懂,前四行都是在設定range,第五行開始把他定在陣列
: 那我是不了解起始位置是怎麼來的,還有他的L0,L1,L2,L3是怎麼跳的,
: 因為我看不出來他go to的動作
: 最近剛學計組....感謝哦!!!!!
--
做善事 積人品 等放榜
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.210.155
※ 編輯: seiki 來自: 114.47.210.155 (03/11 07:40)
推
03/11 17:35, , 1F
03/11 17:35, 1F
推
03/12 19:57, , 2F
03/12 19:57, 2F
討論串 (同標題文章)