看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《wsx02 (無酒罐)》之銘言: : from before : add $s1, $s2, $s3 : if $s2=0 then : delay slot : 請問為什麼要把add搬到delay slot ? 因為add不管跳不跳都要執行,所以放在delay slot裡, 不管有沒有跳都不會浪費掉那個clock。 : -------------------------------------- : from target : sub $t4, $t5, $t6 : add $s1, $s2, $s3 : if $s1=0 then : delay slot : 請問為什麼要把sub複製到delay slot ? 因為if的$s1與上面的add有RAW dependance, 所以不可以用from target, 而sub是Lebel指的位置(你沒打出來XD), 所以這個case在常跳的情況下都會執行到sub, 所以把sub放到一定會用掉的clock裡面並把Label往下移一格剛好。 這裡有一個地方要注意,就是如果沒跳的話也會多作一次sub, 所以要保證多一次沒差才可以使用。 : ---------------------------------------- : from fall through : add $s1, $s2, $s3 : if $s1=0 then : delay slot : sub $t4, $t5, $t6 : 請問為什麼要把sub搬到delay slot ? 同from target,有RAW dependance, 而這個case在不常跳的情況下都會執行到sub, 一樣把sub放到一定會用掉的clock內剛好, 並且要保證多作一次也沒差。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.136 ※ 編輯: wheels 來自: 140.112.30.136 (11/29 00:16)
wsx02:請問delay slot裡的指令是不管怎樣 一定要執行的嗎? 11/29 00:32
wsx02:請問為什麼有RAW就不能放delay slot? 11/29 00:41
metalalive:因為if($si=0)這行, $s1的值要先抓前面add指令算好的值 11/29 01:03
metalalive:如果add指令放到delay slot,則if內的$s1值就不保證正確 11/29 01:12