本文介绍了这是怎么回事C程序的这一MIPS汇编转换?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个基本的计算机科学类我正在那里我的任务就是给一个函数转换成MIPS汇编语言一个简单的问题。我相信我有一个正确的答案,但我想验证它。
这是C函数
INT的strlen(字符* S){
INT LEN; LEN = 0;
而(* S!='\\ 0'){
LEN ++;
小号++;
}
返回LEN;
}
谢谢!
的strlen:
加$ V0,$零,零$
循环:
LBU $ T0,0($ A0)
阿迪$ A0,$ A0,1
阿迪$ V0,V0 $ 1
BNE $ T0,$零,环
发送:
阿迪$ V0,V0 $,-1
Ĵ$ RA
解决方案
是啊,你有一个正确的ASM的版本,我喜欢的事实,你做尽可能多的工作尽可能测试T0的值之前给尽可能多的时间尽可能从内存中加载。
I have a simple question for a Comp Sci class I'm taking where my task is to convert a function into MIPS assembly language. I believe I have a correct answer but I want to verify it.
This is the C function
int strlen(char *s) {
int len;
len=0;
while(*s != '\0') {
len++;
s++;
}
return len;
}
Thanks!
strlen:
add $v0, $zero, $zero
loop:
lbu $t0, 0($a0)
addi $a0, $a0, 1
addi $v0, $v0, 1
bne $t0, $zero, loop
s_end:
addi $v0, $v0, -1
j $ra
解决方案
Yeah, you have a correct asm version, and I like the fact that you do as much work as possible before testing the value of t0 to give as much time as possible for loading from memory.
这篇关于这是怎么回事C程序的这一MIPS汇编转换?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!