.text .globl convert convert: # # procedure to convert string to integer # # $a0 has address of string # $v0 set to integer (if valid) # $v1 set to 0 if valid, -1 if invalid, -2 if overflow # # YOUR CODE GOES HERE li $v0, 0 # REPLACE THIS li $v1, 0 # REPLACE THIS jr $ra # IF YOU NEED VARIABLES YOU CAN PUT THEM HERE .data # .word 0 # # YOU SHOULD NOT NEED TO CHANGE ANYTHING BELOW # # test/demo of procedure to convert a string to an integer # .text .globl main main: # # opening linkage (save return address) # addi $sp, $sp, -4 sw $ra, 0($sp) # # prompt for and get user input (string) # la $a0, prompt li $v0, 4 # print string syscall la $a0, input la $a1, 1000 li $v0, 8 # read string syscall # # remove trailing '\n' # register usage: # $s0 points to character in input # $s1 has '\n' addi $s0, $a0, 0 li $s1, '\n' loop1: lb $t0, 0($s0) beq $t0, $s1, loop1end addi $s0, $s0, 1 j loop1 loop1end: sb $zero, 0($s0) # # call convert and print results # la $a0, input jal convert # register usage: # $s1 saves $v0 (output result) # $s2 saves $v1 (error result) addi $s1, $v0, 0 addi $s2, $v1, 0 # print header info la $a0, header_echo li $v0, 4 # print string syscall la $a0, input li $v0, 4 # print string syscall la $a0, nl li $v0, 4 # print string syscall # print result bne $s2, $zero, error la $a0, header_result li $v0, 4 # print string syscall addi $a0, $s1, 0 li $v0, 1 # print integer syscall la $a0, nl li $v0, 4 # print string syscall j end error: la $a0, header_error li $v0, 4 # print string syscall addi $a0, $s2, 0 li $v0, 1 # print integer syscall la $a0, nl li $v0, 4 # print string syscall end: # # closing linkage (get return address and restore stack pointer) # lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra .end main # # area for variables and constants # .data prompt: .asciiz "Enter a line of text:\n" header_echo: .asciiz "Input " header_result: .asciiz "Result " header_error: .asciiz "Error " nl: .asciiz "\n" input: .space 1000