【发布时间】:2014-01-04 17:48:25
【问题描述】:
通过 Cross Compiler 将 C 编译为汇编 MIPS 后,我有:
main:
.frame $fp,32,$31 # vars= 16, regs= 1/0, args= 0, gp= 8
addiu $sp,$sp,-32
sw $fp,24($sp)
move $fp,$sp
li $2,5 # 0x5
sw $2,8($fp)
lw $2,8($fp)
nop
sw $2,16($fp)
li $2,5 # 0x5
lw $3,16($fp)
nop
beq $3,$2,$L4
nop
li $2,10 # 0xa
lw $3,16($fp)
nop
beq $3,$2,$L5
nop
li $2,1 # 0x1
lw $3,16($fp)
nop
beq $3,$2,$L3
nop
b $L7
nop
$L3:
lw $2,8($fp)
nop
addiu $2,$2,3
sw $2,8($fp)
b $L7
nop
$L4:
lw $2,8($fp)
nop
sll $2,$2,3
sw $2,8($fp)
b $L7
nop
$L5:
lw $2,8($fp)
nop
srl $2,$2,2
sw $2,8($fp)
$L7:
move $sp,$fp
lw $fp,24($sp)
addiu $sp,$sp,32
j $31
nop
.end main
我不明白为什么有很多nop代码行,这段代码中nop是什么意思?它对Pipeline Hazards 有什么帮助吗?如果我删除所有的 nops 怎么办?
【问题讨论】: