In: Computer Science
Write the MIPS assembly version of this C code:
int weird(char[] s, int x)
{
int i;
for (i = 0; i < x; i++) {
if (s[i] == ‘A’)
{
return power(10, i);
}
}
return -1;
}
int power(int base, int i)
{
int j = 0;
while (j < base)
{
base = base * base;
j++;
}
return base;
}
MIPS GCC 5.4 Code for the given c code:
power(int, int):
addiu $sp,$sp,-24
sw $fp,20($sp)
move $fp,$sp
sw $4,24($fp)
sw $5,28($fp)
sw $0,8($fp)
$L3:
lw $3,8($fp)
lw $2,24($fp)
nop
slt $2,$3,$2
beq $2,$0,$L2
nop
lw $3,24($fp)
lw $2,24($fp)
nop
mult $3,$2
mflo $2
sw $2,24($fp)
lw $2,8($fp)
nop
addiu $2,$2,1
sw $2,8($fp)
b $L3
nop
$L2:
lw $2,24($fp)
move $sp,$fp
lw $fp,20($sp)
addiu $sp,$sp,24
j $31
nop
weird(char*, int):
addiu $sp,$sp,-40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
sw $4,40($fp)
sw $5,44($fp)
sw $0,24($fp)
$L9:
lw $3,24($fp)
lw $2,44($fp)
nop
slt $2,$3,$2
beq $2,$0,$L6
nop
lw $2,24($fp)
lw $3,40($fp)
nop
addu $2,$3,$2
lb $3,0($2)
li $2,65 # 0x41
bne $3,$2,$L7
nop
lw $5,24($fp)
li $4,10 # 0xa
jal power(int, int)
nop
b $L8
nop
$L7:
lw $2,24($fp)
nop
addiu $2,$2,1
sw $2,24($fp)
b $L9
nop
$L6:
li $2,-1 # 0xffffffffffffffff
$L8:
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addiu $sp,$sp,40
j $31
nop
if you like the answer please provide a thumbs up.