Converts numbers in range 0 through 15 into ASCII-coded character '0' through 'F'
I see a few things that may help you improve your code.

Don't alter registers unless specified

The current code alters the $a0 register, which is appropriate to the problem, but the specification doesn't say that the register may be altered.  I'd suggest not altering passed in registers unless the specification says to.

Know your instruction set

The ble instruction can also work with a constant, so there's no real need to load a register with the value 9.  Also, it would be better to simply use a move instruction than the curious construct addi $t0,$zero,0x9.

Avoid nop instructions

I don't know of a reason that would require nop instructions where this code has them, so I'd recommend eliminating them.

Minimize register use

One of the most important things to keep track of in assembly language programming is register usage.  In this particular case, I'd suggest that there is no need to use more than a single register.  Here's how I'd do it:

hexasc:
andi $v0,$a0,0xf        # save only low 4 bits
addi $v0,$v0,0x30   # turn into ASCII
ble $v0,0x39,L2     # if it's &gt; ASCII '9'
addi $v0,$v0,7      #   add additional 7 for 'A'-'F'
L2:
jr $ra