**** 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
