int sign (int i) {
if (i > 0)
return 1;
else if (i < 0)
return -1;
else
return 0;
MIPS
.data
i: .word
.text
sign:
bgtz i, IF
bltz i, ELSE
addi $a0, $zero, $zero
j END
IF: addi $a0, $zero, 1
ELSE: addi $a0, $zero, -1
END: jr $ra
或......
.data
i: .word
.text
sign:
bgtz i, IF
bltz i, ELSE
addi $ra, $zero, $zero
j END
IF: addi $ra, $zero, 1
ELSE: addi $ra, $zero, -1
END: jr $ra
我到了这里......在这种情况下,elseif是如何工作的...我试图搜索它但是没有例子可供我查看并查看。这个实现也是正确的吗?
答案 0 :(得分:3)
使用-S选项编译它以查看装配信息。即gcc file.c -S file.s
答案 1 :(得分:0)
我确定必须有另一种方式,但你可以编译它然后反汇编它。
答案 2 :(得分:0)
如果i
大于零或小于零并且继续,则通过分支工作
正常执行i = 0
。
.data
i: .word
.text
sign:
bgtz i, IF // if i greater than zero, go to IF
bltz i, ELSE // if i less than zero go to ELSE
addi $ra, $zero, $zero // If we didn't branch, i not > 0 and i not < 0, i.e. i = 0
j END
IF: addi $ra, $zero, 1 // If body
j END // Note, I think you need this to avoid also executing the else body
ELSE: addi $ra, $zero, -1 // else body
END: jr $ra