EE457 - Summer 2026 Computer Systems Organization

C to MIPS Conversion Practice Set 3

Full MIPS solutions are provided below so you can blank out fields as needed.

Assumptions:

1) Function f1

C code:

/* ptr: $a0, i: $a1, val: $a2 */
void f1(char *ptr, int i, unsigned val)
{
    int tmp = val * 16;
    ptr[i] = (ptr[i] & tmp) - 3;
}

MIPS solution:

f1:
    ____      $t0, $a2, ____
    add       $t1, $a0, $a1
    ____      $t2, 0($t1)
    and       $t2, $t2, ____
    addi      $t2, $t2, -3
    ____      ____, ____
    jr        $ra

2) Function f2

C code:

/* data: $a0, val: $a1 */
void f2(int *data, int val)
{
    if (val >= 0) {
        data[val] = 0x1234fedc;
    } 
    data[1] = data[val] + 1;
}

MIPS solution:

f2:
    ____      $t0, ____, $zero
    ____      $t0, $zero, L_skip
    ____      $t1, $a1, ____
    add       $t1, $a0, $t1
    ____      $t2, ____
    ____      $t2, $t2, 0xfedc
    sw        $t2, ____
L_skip:
    sll       $t1, $a1, ____
    add       $t1, $a0, $t1
    lw        $t3, ____
    addi      $t3, $t3, 1
    sw        $t3, ____
    jr        $ra

f1 Solutions

f1:
    sll       $t0, $a2, 4
    add       $t1, $a0, $a1
    lb        $t2, 0($t1)
    and       $t2, $t2, $t0
    addi      $t2, $t2, -3
    sb        $t2, 0($t1)
    jr        $ra

f2 Solutions

f2:
    slt       $t0, $a1, $zero
    bne       $t0, $zero, L_skip
    sll       $t1, $a1, 2
    add       $t1, $a0, $t1
    lui       $t2, 0x1234
    ori       $t2, $t2, 0xfedc
    sw        $t2, 0($t1)
L_skip:
    sll       $t1, $a1, 2
    add       $t1, $a0, $t1
    lw        $t3, 0($t1)
    addi      $t3, $t3, 1
    sw        $t3, 4($a0)
    jr        $ra