Перевести программу C на MIPS, используя стек (int в 32 бита) - PullRequest
0 голосов
/ 11 декабря 2018

Итак, я изучаю MIPS, и мне нужно перевести эту программу на C на MIPS, но я не знаю, как использовать стек.Я написал программу без использования стека, но процедуры, очевидно, используют его.Кто-нибудь может мне помочь?Это код C:

void bts(int n, char *s)
{ int i;
  for(i=0; i<32; ++i) if(n & (1<<i)) s[i]='1'; else s[i]='0';
  s[32]='\0';
}
void main()
{
 int x=259; char y[100]; bts(x,y); printf("%s\n",y);
}

И это моя программа MIPS.Все, что мне нужно сделать, это поместить значения в стек, но я не понимаю, как это сделать.Если кто-то может изменить код, это действительно поможет мне.

.data
x: .space 4
y: .space 100
.text
main:

li $t0, 259

jal bts

#afisare
li $v0, 4 
la $a0, y
syscall

li $v0, 10
syscall
#end_main

bts:
li $t1, 0 #i=t1
li $t2, 32

for:
beq $t1, $t2, exit 
#t3=masca (1<<i)
li $t3, 1 
sllv $t3, $t3, $t1
#t4=n&(1<<i)
and $t4, $t0, $t3  
   beq $t4, $zero, bit0 
         li $t4, '1'
         sb $t4, y($t1)
         j cond1

   bit0: li $t4, '0'
     sb $t4, y($t1)

     cond1: addi $t1, $t1, 1
        j for
#end_for

exit: jr $ra    

# end_bts

...