.psx .create "./build/exercise_3.bin", 0x80010000 ; Entry Point of Code .org 0x80010000 ; Constant declaration BASE_ADDR equ 0x0000 ; Symbol Alias Table ; Instructions ; Load load_imm equ li ; dst_reg, immeidate value ; Store store_word equ sw ; src_reg, dst_address ; Addition add_s equ add ; dst_reg, reg_a, reg_b (signed) add_u equ add ; dst_reg, reg_a, reg_b (unsigned) add_si equ addi ; dst_reg, src_reg, immediate value (signed) add_ui equ addiu ; dst_reg, src_reg, immediate value (unsigned) ; Subtraction sub_s equ sub ; sub_u equ subu ; ; Branch branch_equal equ beq ; reg, value(reg, immediate), dst_label branch_gt_equal equ bge ; reg, value(reg, immediate), dst_label branch_lt equ blt ; reg, value(reg, immediate), dst_label ; Registers ; Temporaries, may be changed by subroutines rtemp_0 equ $t0 rtemp_1 equ $t1 rtemp_2 equ $t2 ; /* C code: */ ; main() { ; int num; // Assume num is loaded in $t0 ; int den; // Assume den is loaded in $t1 ; int res; // Assume res is loaded in $t2 ; num = 27; // Or any other number that we want ; den = 3; // Or any other number that we want ; res = 0; ; while (num >= den) { ; num -= den; ; res++; ; } ; } main: ; TODO: ; 1. Initialize $t0 to 27 (or any other value) ; 2. Initialize $t1 to 3 (or any other value) ; 3. Initialize $t2 (res) with 0 ; 4. While ($t0 >= $t1) { ; 5. Subtract $t0-$t1 and store it back into $t0 ; 6. Increment $t2 ; 7. } ; Attempt: move rtemp_2, $zero load_imm rtemp_0, 27 load_imm rtemp_1, 3 // load_imm rtemp_2, 0 loop: :: branch_lt rtemp_0, rtemp_1, loop_break :: nop ; loop if < rtemp_0, rtemp_1 { sub_s rtemp_0, rtemp_0, rtemp_1 ; -= rtemp_0, rtemp_1 add_si rtemp_2, rtemp_2, 1 ; ++ rtemp_2 j loop :: loop_break: ; } .close