FUNCTEST: //Testing functionality of instructions as well as harder data-dependences LHB R7, 0x07 LLB R7, 0xEF //R7 contains 0x07EF LHB R3, 0xCA LLB R3, 0xF5 //R3 contains 0xCAF5 LHB R14, 0x00 LLB R14, 0x04 //DS contains 0x0004 OR R1, R7, R3 //R1 contains 0xCFFF ADD R2, R1, R3 //R2 contains 0x9AF4, result is negative SW R2, 4 //Storing 0x9AF4 LW R4, 4 //Reading it back out immediately NOT R6, R2 //R6 contains 0x650B AND R5, R4, R6 //R5 contains 0x0000 XOR R9, R1, R6 //R9 contains 0xAAF4 VADD R11, R9, R2 //R11 contains 0x44E8 SW R11, 6 LW R12, 6 //R12 contains 0x44E8 SLL R10, R12, 4 //R10 contains 0x4E80 SRA R8, R10, 8 //R8 contains 0x004E SUB R13, R12, R8 //R13 contains 0x449A SW R13, 8 LHB R13, 0x00 LLB R13, 0x01 //R13 contains 1 LHB R10, 0x00 LLB R10, 0x0A //R10 contains 0x000A LOOPSIMPLE: //Simple Loop to test Branch SUB R10, R10, R13 //decrementing R10 by 1 B 100, LOOPSIMPLE //Loop until we hit 0 LHARD: //More robust cache testing LLB R10, 0x01 LHB R10, 0x00 //R10 contains 1, so we can use later LW R1, 4 //R1 contains 0x9AF4 LW R2, 6 //R2 contains 0x44E8 LW R3, 8 //R3 contains 0x449A LLB R4, 0x36 LHB R4, 0x44 //R4 contains 0x4436 SUB R5, R3, R4 //R5 contains 0x0064 (100 in decimal) LOOPHARD: //Loops 100 times ADD R13, R13, R10 //incrementing R13 by 1 B 011, LHARD //A branch that is never taken SUB R5, R5, R10 //decrementing R5 by 1 B 100, LOOPHARD OUT: LLB R13, 0x02 LHB R13, 0x00 //R13 contains 0x0002 CALL LTEST B 111, LHARD //If CALL doesn't work, you will go back to the LHARD and be in an infinite loop LTEST: ADD R10, R4, R10 //R10 contains 0x4437 CALL LNEXT //I realize the first CALL's return (LTEST) will be overwritten LLB R2, 0x15 LHB R2, 0x00 //R2 contains 0x0015 CALL LAST LNEXT: LLB R1, 0xCE LHB R1, 0x0E //R1 contains 0x0ECE RET LAST: LLB R3, 0x01 LHB R3, 0xC0 //R3 contains 0xC001 if R1 - R3 contains "ECE IS COOL" (where IS = 15 and COOL = C001), congrats!