我有一个关于 Comp Sci 类的简单问题,我的任务是将函数转换为 MIPS 汇编语言。我相信我有一个正确的答案,但我想验证它。
这是C函数
int strlen(char *s) {
int len;
len=0;
while(*s != '\0') {
len++;
s++;
}
return len;
}
谢谢!
strlen:
add $v0, $zero, $zero # len = 0
loop: # do{
lbu $t0, 0($a0) # tmp0 = load *s
addi $a0, $a0, 1 # s++
addi $v0, $v0, 1 # len++
bne $t0, $zero, loop # }while(tmp0 != 0)
s_end:
addi $v0, $v0, -1 # undo counting of the terminating 0
j $ra
最佳答案
是的,你有一个正确的 asm 版本,我喜欢你在测试 t0 的值之前做尽可能多的工作,以便为从内存加载提供尽可能多的时间。
关于c - 这个 MIPS strlen 是否从相应的 C 循环正确转换而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751463/