這是一個非常簡單的問題,但是如果我有一堆爲MIPS編寫的指令(儘管我認爲這可能會延續到彙編中),並且在某個時刻有一個標籤,即使未明確調用該標籤的指令也會執行?舉例來說,假設我有:在MIPS中執行標籤
SUB $6, $4, $3
BNE $6, $2, LABEL1
ADDI $6, $0, -8
LABEL1: SW $6, 0x01000
如果BNE
分支LABEL1,然後ADDI被跳過。但是,如果BNE不轉移到LABEL1,那麼ADDI就會發生,但是下一條線總是會發生嗎? 「
這是一個非常簡單的問題,但是如果我有一堆爲MIPS編寫的指令(儘管我認爲這可能會延續到彙編中),並且在某個時刻有一個標籤,即使未明確調用該標籤的指令也會執行?舉例來說,假設我有:在MIPS中執行標籤
SUB $6, $4, $3
BNE $6, $2, LABEL1
ADDI $6, $0, -8
LABEL1: SW $6, 0x01000
如果BNE
分支LABEL1,然後ADDI被跳過。但是,如果BNE不轉移到LABEL1,那麼ADDI就會發生,但是下一條線總是會發生嗎? 「
這就是所謂的延遲槽。在執行下列指令後,分支是否執行。這就是爲什麼在MIPS代碼中的分支指令後面看到nop
常見的原因。延遲槽中的分支指令通常是未定義的行爲。
只有當條件爲真並且分支被採用時,纔會執行目標標籤處的指令。
更多信息here
」下一行總是會發生嗎?「
是
順便說一句,該文章提到具有兩個分支延遲時隙的架構。然後,在您的示例中,標籤中的代碼將被調用一次或兩次,但通常只有一個插槽。 – jbcreix 2010-09-01 08:37:03