使用堆栈(int到32位)将C程序转换为MIPS

时间:2018-12-11 14:13:31

标签: c assembly mips translate

所以我正在研究MIPS,我需要在MIPS中翻译此C程序,但我不知道要使用堆栈。我编写程序时没有使用堆栈,但是过程显然使用了它。有人能帮我吗? 这是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

0 个答案:

没有答案