Write a MIPS assembly language program that prompts for a single digit hexadecimal number (i.e. a single character: 0-9, A-F) then prints out the decimal value of that digit. For example, if the user inputs B, the program prints out 11.
#include
/* int hextodec(char* c) * first (and only) argument is set in register a0. * return value is set in register v0. * function calling convention is ignored. */ .text .globl hextodec .align 2 .ent hextodec hextodec: lbu t0,0(a0) #load byte from argument li t1,0X30 li t2,0x39 andi t1,t1,0x000000ff #Cast to word for comparison. andi t2,t2,0x000000ff bltu t0,t1,ERROR #error if lower than 0x30 bgt t0,t2,dohex #if greater than 0x39, test for A -F addiu t0,t0,-0x30 #OK, char between 48 and 55. Subtract 48. b return dohex: li t1,0x41 li t2,0x46 andi t1,t1,0x000000ff #Cast to word for comparison. andi t2,t2,0x000000ff /*is byte is between 65 and 70?*/ bltu t0,t1,ERROR #error if lower than 0x41 bgt t0,t2,ERROR #error if greater than 0x46 ishex: addiu t0,t0,-0x37 #subtract 55 from hex char (\'A\'- \'F\') b return ERROR: addiu t0,zero,-1 #return -1. return: move v0,t0 #move return value to register v0 jr ra .end hextodec