这是一个非常简单的问题,但是如果我有一堆为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