# Program to read numbers until a zero, printing each in hexadecimal ret: .word 0 # space for return address s: .space 8 .asciiz \n tr: .asciiz 0123456789ABCDEF main: sw $ra,ret # save return address ml1: syscall 5 # read number beqz $v0,exit # if number is 0, exit add $a0,$v0,$0 # copy number to arg register bal itohex # convert to hex in s[] add $a0,$0,s # prepare to print s[] syscall 4 # print the string b ml1 # repeat exit: add $v0,$0,$0 # zero exit status lw $ra,ret # restore return address syscall 10 # return from main itohex: add $t2,$0,s # $t2 = &s[0] (used as end test) add $t0,$t2,7 # $t0 = &s[7] (k) loop: and $t1,$a0,0xF # $t1 = I & 0xF lb $t1,tr($t1) # $t1 = tr[I&0xF] sb $t1,0($t0) # s[k] = $t1 sla $a0,$a0,-4 # I = I >> 4 add $t0,$t0,-1 # k-- sub $a1,$t0,$t2 # -->loop if k>=0 bgez $a1,loop # -->loop if k>=0 b $ra # return .end main