# Sample SPIM Program # # Written by Pat Troy, 1/16/2004 .data array1: .word 0:100 length: .word 100 max: .word 0 prompt1: .asciiz "Enter ten integer numbers.\n" prompt2: .asciiz "The ten integers are:\n" prompt3: .asciiz "The ten values in hex are:\n" newline: .asciiz "\n" tab: .asciiz "\t" hexdigits: .asciiz "0123456789abcdef" hexword: .asciiz "00000000" hexdig: .asciiz "0" goodbye: .asciiz "Goodbye\n" dit: .asciiz "." dash: .asciiz "," .globl main .text main: # prompt for input li $v0, 4 la $a0, prompt1 syscall # set up the loop variables li $t0, 10 la $t1, array1 # Read in the integers loop1: li $v0, 5 syscall sw $v0, ($t1) # decrement loop counter and continue addi $t0, $t0, -1 addi $t1, $t1, 4 bgtz $t0, loop1 # display the number read in li $v0, 4 la $a0, prompt2 syscall # set up the loop variables li $t0, 10 la $t1, array1 # print out the integers # (first a tab, then the int, then a newline) loop2: li $v0, 4 la $a0, tab syscall li $v0, 1 lw $a0, ($t1) syscall li $v0, 4 la $a0, newline syscall # decrement loop counter and continue addi $t0, $t0, -1 addi $t1, $t1, 4 bgtz $t0, loop2 # print each number in hex li $v0, 4 la $a0, prompt3 syscall # set up the loop variables li $t0, 10 # loop3o counter la $t1, array1 # get the value and put it in $t2 loop3o: lw $t2, ($t1) # initialize values for the inner loop la $t6, hexdigits la $t7, hexword li $t3, 15 # the mask value sll $t3, $t3, 28 li $t4, 28 # loop3i counter and shift amount # mask off the correct 4 bits for a hex digit # and shift for bit positions 0-3 loop3i: and $t5, $t2, $t3 srl $t5, $t5, $t4 # get proper hex digit add $t5, $t5, $t6 lb $t8, ($t5) sb $t8, ($t7) # process loop values and branch srl $t3, $t3, 4 addi $t7, $t7, 1 addi $t4, $t4, -4 bgez $t4, loop3i # output the hex word li $v0, 4 la $a0, tab syscall li $v0, 4 la $a0, hexword syscall li $v0, 4 la $a0, newline syscall # process loop values and branch addi $t0, $t0, -1 addi $t1, $t1, 4 bgtz $t0, loop3o # end the program li $v0, 4 la $a0, goodbye syscall li $v0, 10 syscall