2010-09-01 68 views
1

這是一個非常簡單的問題,但是如果我有一堆爲MIPS編寫的指令(儘管我認爲這可能會延續到彙編中),並且在某個時刻有一個標籤,即使未明確調用該標籤的指令也會執行?舉例來說,假設我有:在MIPS中執行標籤

SUB $6, $4, $3

BNE $6, $2, LABEL1

ADDI $6, $0, -8

LABEL1: SW $6, 0x01000

如果BNE分支LABEL1,然後ADDI被跳過。但是,如果BNE不轉移到LABEL1,那麼ADDI就會發生,但是下一條線總是會發生嗎? 「

回答

1

這就是所謂的延遲槽。在執行下列指令後,分支是否執行。這就是爲什麼在MIPS代碼中的分支指令後面看到nop常見的原因。延遲槽中的分支指令通常是未定義的行爲。

只有當條件爲真並且分支被採用時,纔會執行目標標籤處的指令。

更多信息here

+0

順便說一句,該文章提到具有兩個分支延遲時隙的架構。然後,在您的示例中,標籤中的代碼將被調用一次或兩次,但通常只有一個插槽。 – jbcreix 2010-09-01 08:37:03

0

」下一行總是會發生嗎?「