Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a program in MIPS assembly language to convert an ASCII number string cont

ID: 3665459 • Letter: W

Question

Write a program in MIPS assembly language to convert an ASCII number string containing positive and negative integer decimal strings, to an integer. Your program should expect register $a0 to hold the address of a null-terminated string containing some combination of the digits 0 through 9. Your program should compute the integer value equivalent to this string of digits, then place the number in register $v0. If a non-digit character appears anywhere in the string, your program should stop with the value 1 in register $v0. For example, if register $a0 points to a sequence of three bytes 50ten, 52ten, 0ten (the nullterminated string “24”), then when the program stops, register $v0 should contain the value 24ten.

Explanation / Answer

Program in MIPS assembly language to convert an ASCII number

str2int: # convert string to integer

li $t6, 0x30 # $t6 = '0'

li $t7, 0x39 # $t7 = '9'

li $v0, 0 # initialize $v0 = 0

move $t0, $a0 # $t0 = pointer to string

lb $t1, ($t0) # load $t1 = digit character

LOOP:

blt $t1, $t6, NoDigit # char < ‘0’

bg t $t1, $t7, NoDigit # char > ‘9’

subu $t1, $t1, $t6 # convert char to integer

mul $v0, $v0, 10 # multiply by 10

add $v0, $v0, $t1 # $v0 = $v0 * 10 + digit

addiu $t0, $t0, 1 # point to next char

lb $t1, ($t0) # load $t1 = next digit

bne $t1, $0, LOOP # branch if not end of string

jr $ra # return integer value

NoDigit:

li $v0, -1 # return -1 in $v0

jr $ra

hexstr2int: # convert hex string to int

li $t4, 0x41 # $t4 = 'A'

li $t5, 0x46 # $t7 = 'F'

li $t6, 0x30 # $t6 = '0'

li $t7, 0x39 # $t7 = '9'

li $v0, 0 # initialize $v0 = 0

move $t0, $a0 # $t0 = pointer to string

lb $t1, ($t0) # load $t1 = digit character

LOOP:

blt $t1, $t6, NoDigit # char < ‘0’

bgt $t1, $t7, HEX # check if hex digit

subu $t1, $t1, $t6 # convert to integer

j Compute # jump to Compute integer

HEX:

blt $t1, $t4, NoDigit # char < ‘A’

bgt $t1, $t5, NoDigit # char > ‘F’

addiu $t1, $t1, -55 # convert: ‘A’=10,‘B’=11,etc

sll $v0, $v0, 4 # multiply by 16

add $v0, $v0, $t1 # $v0 = $v0 * 16 + digit

addiu $t0, $t0, 1 # point to next char

lb $t1, ($t0) # load $t1 = next digit

bne $t1, $0, LOOP # branch if not end of string

jr $ra # return integer value

NoDigit:

li $v0, -1 # return -1 in $v0

jr $ra

a.

str2int: # convert string to integer

li $t6, 0x30 # $t6 = '0'

li $t7, 0x39 # $t7 = '9'

li $v0, 0 # initialize $v0 = 0

move $t0, $a0 # $t0 = pointer to string

lb $t1, ($t0) # load $t1 = digit character

LOOP:

blt $t1, $t6, NoDigit # char < ‘0’

bg t $t1, $t7, NoDigit # char > ‘9’

subu $t1, $t1, $t6 # convert char to integer

mul $v0, $v0, 10 # multiply by 10

add $v0, $v0, $t1 # $v0 = $v0 * 10 + digit

addiu $t0, $t0, 1 # point to next char

lb $t1, ($t0) # load $t1 = next digit

bne $t1, $0, LOOP # branch if not end of string

jr $ra # return integer value

NoDigit:

li $v0, -1 # return -1 in $v0

jr $ra

b

hexstr2int: # convert hex string to int

li $t4, 0x41 # $t4 = 'A'

li $t5, 0x46 # $t7 = 'F'

li $t6, 0x30 # $t6 = '0'

li $t7, 0x39 # $t7 = '9'

li $v0, 0 # initialize $v0 = 0

move $t0, $a0 # $t0 = pointer to string

lb $t1, ($t0) # load $t1 = digit character

LOOP:

blt $t1, $t6, NoDigit # char < ‘0’

bgt $t1, $t7, HEX # check if hex digit

subu $t1, $t1, $t6 # convert to integer

j Compute # jump to Compute integer

HEX:

blt $t1, $t4, NoDigit # char < ‘A’

bgt $t1, $t5, NoDigit # char > ‘F’

addiu $t1, $t1, -55 # convert: ‘A’=10,‘B’=11,etc

sll $v0, $v0, 4 # multiply by 16

add $v0, $v0, $t1 # $v0 = $v0 * 16 + digit

addiu $t0, $t0, 1 # point to next char

lb $t1, ($t0) # load $t1 = next digit

bne $t1, $0, LOOP # branch if not end of string

jr $ra # return integer value

NoDigit:

li $v0, -1 # return -1 in $v0

jr $ra

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote