2010-09-01 110 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

”下一行总是会发生吗?“