**** UNIASM VERSION 1.06 **** **** Source file: mips_test_prog.asm 1 ; ELEC 5200 - MIPS CPU TEST PROGRAM 2 3 0000 org 00000000h 4 0000 0C000002 main: jal arith_test ; logic/shift test 5 0004 08000001 end: j end ; effectively halt machine 6 7 ; arith_test - arithmetic operation: D = A + B - C 8 ; all numbers are 32-bit 2's complement integers 9 10 arith_test: 11 0008 34020001 ori $2, $0, 1 ; loop counter = 2 in r2 12 000C 3C1D1000 lui $29, 1000h ; point to data segment 13 0010 37BD0060 ori $29, $29, 60h ; point to A 14 0014 8FA50000 a_loop: lw $5, 0($29) ; load A 15 0018 8FA60008 lw $6, 8($29) ; load B 16 001C 00C52820 add $5, $6, $5 ; A+B 17 0020 8FA70010 lw $7, 16($29) ; load C 18 0024 00A72822 sub $5, $5, $7 ; A+B-C 19 0028 AFA50018 sw $5, 24($29) ; store result at D 20 002C 03A62825 or $5, $29, $6 ; test logical OR 21 0030 00A72824 and $5, $5, $7 ; test logical AND 22 0034 00BD202A slt $4, $5, $29 ; test slt 23 0038 AFA50020 sw $5, 32($29) ; store logical result at E 24 003C 2042FFFF addi $2, $2, -1 ; loop counter 25 0040 28540000 slti $20, $2, 0 ; check loop counter 26 0044 23BD0004 addi $29, $29, 4 ; next data elements 27 0048 1280FFF2 beq $20, $0, a_loop ; branch 28 004C 03E00008 jr $31 ; return 29 30 ; Test Data - keep on word boundaries (all 32-bit words) 31 10000060 org 10000060h 32 10000060 00000005FFFFFFBF A: dd 5, -65 33 10000068 FFFFFFDE00000003 B: dd -34, 3 34 10000070 00000003FFFFFFBA C: dd 3, -70 35 10000078 0000000000000000 D: dd 0, 0 36 10000080 0000000000000000 E: dd 0, 0 37 10000088 end