怎么把C语言代码转换为MIPS? 50
#include<stdio.h>intiarr[10];charstr[]="hello\n";voidmain(){/*use$s0fori*/inti=0;for(...
#include <stdio.h>
int iarr[10];
char str[] = "hello\n";
void main ()
{
/* use $s0 for i */
int i = 0;
for (i = 0; i < 10; i++)
iarr[i] = 10 - i;
printf ("fourth int is %d\n", iarr[3]);
printf ("third char is %c\n", str[2]);
}
把这段C代码转换为MIPS,最好可以每句都有注释。 展开
int iarr[10];
char str[] = "hello\n";
void main ()
{
/* use $s0 for i */
int i = 0;
for (i = 0; i < 10; i++)
iarr[i] = 10 - i;
printf ("fourth int is %d\n", iarr[3]);
printf ("third char is %c\n", str[2]);
}
把这段C代码转换为MIPS,最好可以每句都有注释。 展开
2016-03-01 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
把C语言代码转换为MIPS:
以下是c语言代码:
while (candidate_gcd <= min)
{
if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) ==
0))
{
current_gcd = candidate_gcd;
}
candidate_gcd = candidate_gcd + 1;
}
以下为转换为mips后的代码:
首先设置变量:
candidate_gcd = $t0
min = $t1
a mod candidate_gcd = $t2
b mod candidate_gcd = $t3
current_gcd = $t4
$t6 = 0
$t5
代码如下:(绿色为注释)
Label3: //设置标签Label3
ble $t0,$t1,Label //当$t0 小于等于$t1 时,跳到标签Label
Label: //设置标签Label
Add $t5,$t2,$t3 //将$t2 和$t3 相加赋值给$t5
Li $t6,0 //给$t6 赋值为0
Leq $t5, $t6,Label1 //判断如果$t6=$t5=0,跳到标签Label1
Label1: //设置标签Label1
Move $t4, $t0 //$t4=$t0
Addi $t0, $t0,1 //$t0=$t0+1(自加加)
J Label3 //跳到标签Label3,这里其实就是实现c 语言
中的while 无限循环
以下是c语言代码:
while (candidate_gcd <= min)
{
if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) ==
0))
{
current_gcd = candidate_gcd;
}
candidate_gcd = candidate_gcd + 1;
}
以下为转换为mips后的代码:
首先设置变量:
candidate_gcd = $t0
min = $t1
a mod candidate_gcd = $t2
b mod candidate_gcd = $t3
current_gcd = $t4
$t6 = 0
$t5
代码如下:(绿色为注释)
Label3: //设置标签Label3
ble $t0,$t1,Label //当$t0 小于等于$t1 时,跳到标签Label
Label: //设置标签Label
Add $t5,$t2,$t3 //将$t2 和$t3 相加赋值给$t5
Li $t6,0 //给$t6 赋值为0
Leq $t5, $t6,Label1 //判断如果$t6=$t5=0,跳到标签Label1
Label1: //设置标签Label1
Move $t4, $t0 //$t4=$t0
Addi $t0, $t0,1 //$t0=$t0+1(自加加)
J Label3 //跳到标签Label3,这里其实就是实现c 语言
中的while 无限循环
展开全部
1、硬件平台是什么?pc上还是51上或者arm,mips?不同硬件平台汇编不同,编译器对程序的处理也就不同。用汇编一般都是考虑到可以直接访问寄存器,速度有优势,但最大的缺点是不能跨平台,可移植性很差。
2、MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,亦为Millions of Instructions Per Second的相关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。最早的MIPS架构是32位,最新的版本已经变成64位。
2、MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,亦为Millions of Instructions Per Second的相关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。最早的MIPS架构是32位,最新的版本已经变成64位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-03-24
展开全部
MIPS?Million Instructions Per Second?还是你说的是LISP?
追问
应该是前者吧,就是有li、la、sw、$t0、$v0什么的那个,能在Mars里运行的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.text
.globl main
main:
li $t0,0 #counter
la $t1,iarr #iarr address pointer
loop:
bge $t0,10,loopBreak #if counter>=10 then loop break
sub $t3,$zero,$t0 #$t3=10-$t0
addi $t2,$t3,10
sw $t2,0($t1) #store the word into array
addi $t1,$t1,4 #update pointer
addi $t0,$t0,1 #counter++
b loop #branch to loop
loopBreak:
la $a0,msg1 #print msg1
jal printMsg
la $t0,iarr #load the array address
lw $t1,12($t0) #load the fourth number(I store numbers as word, so is 3*4=12)
move $a0,$t1 #print integer
jal printInt
jal printNewline #print a newline
la $a0,msg2 #print msg2
jal printMsg
la $t0,str #load the string address
lb $t1,2($t0) #get the third character
move $a0,$t1 #print character
jal printChar
li $v0,10 #all done
syscall
printMsg:
li $v0,4
syscall
jr $ra
printInt:
li $v0,1
syscall
jr $ra
printChar:
li $v0,11
syscall
jr $ra
printNewline:
la $a0,newline
li $v0,4
syscall
jr $ra
.data
str: .asciiz "hello\n"
.align 2
iarr: .space 100
msg1: .asciiz "fourth int is: "
msg2: .asciiz "third char is: "
newline:.asciiz "\n"
Sry,我注释写的太多了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |