# Computes the first few fibonacci numbers and stores them in registers addiu $1, $0, 1 # 1 andi $2, $1, -1 # 1 sllv $3, $2, $1 # 2 or $4, $3, $2 # 3 xori $5, $4, 6 # 5 sll $6, $3, 2 # 8 addu $7, $5, $6 # 13 = 0xd ori $8, $6, -32 # (short)~(10111) = 0xffe8 lui $9, -1 addu $8, $8, $9 # 0xffffffe8 nor $8, $8, $3 # 21 = 0x15 lui $9, 34952 # 0x888800000 srl $9, $9, 24 srlv $9, $9, $3 # 34 = 0x22 andi $10, $9, 32 # 32 sll $10, $10, 1 # 64 addiu $11, $0, 9 subu $10, $10, $11 # 55 = 0x37 lui $11, 1 sll $11, $11, 15 srav $11, $11, $5 sra $11, $11, 1 srl $11, $11, 25 xori $11, $11, 38 # 87 - 0x59 # jump/branch testing begin: addiu $30, $0, 0 j bottom top: addiu $20, $0, 13 addiu $21, $0, -13 # jump and link (part1) # We simulate a jump and link by putting (address_of_jump+4) into $31, then jumping. # The return call will do jump-to-register $31. addiu $31, $0, 8 addiu $31, $31, PC j jal_part2 addiu $31, $0, 0 # okay # forward slide beq $20, $21, error bne $20, $7, error bgtz $21, error bgtz $0, error blez $20, error blez $21, back_slide4 j error # backwards slide back_slide0: beq $20, $7, done back_slide1: bne $20, $21, back_slide0 back_slide2: bgtz $20, back_slide1 back_slide3: blez $0, back_slide2 back_slide4: blez $21, back_slide3 # jump and link (part2) jal_part2: addiu $29, $0, 0x1234 jr $31 j error bottom: addiu $30, $30, 1 beq $1, $2, top error: addiu $30, $0, -1000 # error done: # a = (int *)0x100; # s = 20; # for (c = 5; c > 0; c--) { # *(a++) = s++; # } # a = (void *)0x100; # s = 0; # for (c = 5; c > 0; c--) { # s += *(a++); # } addiu $24, $0, 128 # stack = 0x80 addiu $25, $0, 256 # a = 0x100 addiu $26, $0, 10 # s = 10 addiu $27, $0, 5 # c = 5 sw $25, 0($24) sw $26, -4($24) sw $27, -8($24) j loop_test loop_top: sw $26, 0($25) addiu $25, $25, 4 addiu $26, $26, 1 addiu $27, $27, -1 loop_test: bgtz $27, loop_top loop_end: lw $25, 0($24) or $26, $0, $0 lw $27, -8($24) j loop_test2 loop_top2: lw $28, 0($25) addiu $25, $25, 4 addu $26, $26, $28 addiu $27, $27, -1 loop_test2: bgtz $27, loop_top2 loop_end2: # 26 should be 10+11+12+13+14 = 56 = 0x3c