Reversing a string in MIPS Assembly
23,304
there was a small error in indexing...and instead of re writing on top of the old one i used new memory space called reverse...
stringreverse:
add $t0,$a0,$zero #starting address
add $t1,$zero,$zero
add $t3,$zero,$zero #i = 0
addi $t2,$a1,-2 #j = length-1
loop:
add $t5,$t0,$t2
lb $t6,0($t5) #the lb string[j]
sb $t6,reverse($t3)
addi $t2,$t2,-1 #j--
addi $t3,$t3,+1 #i++
slt $t7,$t2,$t1
beqz $t7,loop
Author by
Admin
Updated on September 26, 2020Comments
-
Admin over 3 years
I'm trying to prompt the user for the length of a string, allocate space for that string, then print it out in reverse.
For the life of me, I can't figure out why this isn't working..
Sample Output: (spim) run Please enter an integer: 7 string (spim)
Now the length of "string" should be 6 right? + the null terminating character which should make it 7. Can anyone spot where I'm going wrong with my approach?
.data nl: .asciiz "\n" inputPrompt: .asciiz "Please enter an integer:\n" theString: .space 32 theInteger: .word 1 .text main: la $a0, inputPrompt #load address a0 with prompt li $v0, 4 #load system call, print string into v0 syscall li $v0, 5 #load system call, read int into v0 syscall sw $v0, theInteger #store saved int into $t0 li $v0, 8 #load system call, read string with mem address la $a0, theString #load address of reserved string space lw $a1, theInteger #load address of saved int length for string syscall lw $t0, theInteger add $a1,$zero,$t0 #pass lenght of string jal stringreverse #reverse the string stringreverse: add $t0,$a0,$zero #starting address add $t1,$zero,$zero #i = 0 addi $t2,$a1,-1 #j = length-1 loop: add $t3,$t0,$t1 lb $t4,0($t3) #the lb string[i] add $t5,$t0,$t2 lb $t6,0($t5) #the lb string[j] sb $t4,0($t5) #string[j] = string[i] sb $t6,0($t3) #string[i] = string[j] addi $t1,$t1,1 #i++ addi $t2,$t2,-1 #j-- slt $t6,$t2,$t1 beqz $t6,loop exit: li $v1, 4 #system call to print reversed string la $a2, 0($a1) syscall li $v0, 10 syscall # Exit program