MIPS - помогите конвертировать код из C - PullRequest
0 голосов
/ 28 марта 2011

Я новичок в 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 и объяснить мне.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 28 марта 2011

Просто сосредоточившись на цикле, попробуйте что-то вроде этого:

   .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());
0 голосов
/ 25 апреля 2012

У вас проблема с инициализацией ...

0 голосов
/ 28 марта 2011

Я думаю, вы должны Google "Кросс-компилятор".

Wiki http://en.wikipedia.org/wiki/Cross_compiler

здесь есть образец: https://stackoverflow.com/questions/1604580/convert-c-to-mips-assembly-language

...