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.