In: Computer Science
Convert the following C function to the corresponding MIPS
assembly procedure:
int count(int a[], int n, int x)
{
int res = 0;
int i = 0;
int j = 0;
int loc[];
for(i = 0; i != n; i++)
if(a[i] == x) {
res = res + 1;
loc [j] = i;
j = j+1}
return res, loc;
}
Note: In the question, size of array 'loc[]' is not defined, so i assumed arrary size 5 i.e.'loc[5]'. count: .frame $fp,48,$31 # vars= 32, regs= 1/0, args= 0, gp= 8 .mask 0x40000000,-4 .fmask 0x00000000,0 .set noreorder .set nomacro addiu $sp,$sp,-48 sw $fp,44($sp) move $fp,$sp sw $4,48($fp) sw $5,52($fp) movz $31,$31,$0 sw $6,56($fp) sw $0,8($fp) sw $0,12($fp) sw $0,16($fp) sw $0,12($fp) b $L2 nop $L4: lw $2,12($fp) nop sll $2,$2,2 lw $3,48($fp) nop addu $2,$3,$2 lw $3,0($2) lw $2,56($fp) nop bne $3,$2,$L3 nop lw $2,8($fp) nop addiu $2,$2,1 sw $2,8($fp) lw $2,16($fp) nop sll $2,$2,2 addiu $3,$fp,8 addu $2,$3,$2 lw $3,12($fp) nop sw $3,12($2) lw $2,16($fp) nop addiu $2,$2,1 sw $2,16($fp) $L3: lw $2,12($fp) nop addiu $2,$2,1 sw $2,12($fp) $L2: lw $3,12($fp) lw $2,52($fp) nop bne $3,$2,$L4 nop move $2,$0 move $sp,$fp lw $fp,44($sp) addiu $sp,$sp,48 j $31 nop .set macro .set reorder .end count .size count, .-count .ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609"