我是MIPS的初学者,我正在尝试编写一个简单的代码,该代码在内存中的给定数组上运行,小于10个单元格,比如9个单元格,并在屏幕上打印最大数字。
我编写了一个C代码来解决这个问题,但我不知道如何将它(没有mips gcc)转换为有效的MIPS汇编代码。
我写的代码:
int N = 9 , i = 0 , biggest = 0 ;
int arr [N] = -2 , 3 , 9 , -1 , 5 , 6 , 10 , 52 , 9 ;
while ( i <= N )
{
if ( arr [i] > biggest )
biggest = arr [i] ;
i++ ;
}
printf ( "biggest number is: %d" , biggest ) ;
如果有人可以在MIPS汇编中编写该代码,我将非常高兴,并向我解释。
谢谢!
答案 0 :(得分:0)
我认为你应该谷歌“交叉编译器”。
Wiki http://en.wikipedia.org/wiki/Cross_compiler
这里有一个示例:https://stackoverflow.com/questions/1604580/convert-c-to-mips-assembly-language
答案 1 :(得分:0)
只关注循环,尝试类似的东西:
.text
.set noreorder
.global get_max
get_max:
li $4, array // start pointer
li $5, array_end-array-4 // end pointer
li $2, 0 // 'biggest' as result
lw $6, 0($4) // load first table entry
1: slt $3, $2, $6 // boolean flag (biggest<arr[i])
movn $2, $6, $3 // update 'biggest' when flag is set
lw $6, 4($4) // load next table entry
bne $4, $5, 1b // continue until we hit end of array
addiu $4, 4 // advance to next cell (using bne delay slot)
jr $31 // return to the caller
nop // safely fill the delay slot
.data
array: .long -2 , 3 , 9 , -1 , 5 , 6 , 10 , 52 , 9
array_end: .long 0
将其编译为单独的汇编源文件,并与主C代码链接。
不要忘记从C代码中调用该函数:
printf("biggest=%d\n",get_max());
答案 2 :(得分:0)
您的初始化存在问题......