这是一个非常简单的问题,但是如果我有一堆为MIPS编写的指令(虽然我认为这可能会延续到一般的汇编),并且在某些时候有一个标签,那个标签上的指令是否正确即使没有明确调用它也会被执行?例如,假设我有:
SUB $6, $4, $3
BNE $6, $2, LABEL1
ADDI $6, $0, -8
LABEL1: SW $6, 0x01000
如果BNE
分支到LABEL1,则跳过ADDI。但是如果BNE没有分支到LABEL1,那么ADDI就会发生,但是下一行总是会发生吗?
答案 0 :(得分:1)
它被称为延迟槽。执行以下指令后执行或不执行分支。这就是为什么在MIPS代码中看到nop
分支指令后很常见的原因。延迟槽中的分支指令通常是未定义的行为。
目标标签上的指令只有在条件为真且分支被执行时才会执行。
更多信息here
答案 1 :(得分:0)
“下一行总是会发生吗?”
是