Tôi đang cố gắng nhắc người dùng cho độ dài của một chuỗi, phân bổ không gian cho chuỗi đó, sau đó in ra ngược lại.Đảo ngược một chuỗi trong MIPS Assembly
Đối với cuộc sống của tôi, tôi không thể hiểu tại sao điều này không hoạt động ..
Sample Output:
(spim) run
Please enter an integer:
7
string
(spim)
Bây giờ theo chiều dài của "chuỗi" nên 6 phải không? + Ký tự kết thúc null mà nên làm cho nó 7. Có thể bất cứ ai phát hiện ra nơi tôi đang đi sai với cách tiếp cận của tôi?
.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
Các bạn đã thử bước qua mã trong trình gỡ lỗi? Có vẻ như bạn giả sử địa chỉ của chuỗi trong '$ a0' bị bỏ lại sau khi syscall 8 trả về, bạn có chắc chắn đó là trường hợp không? – user786653
[Trình mô phỏng MARS MIPS] (http://courses.missouristate.edu/KenVollmar/MARS/) hoạt động kỳ diệu để gỡ lỗi lắp ráp – Msonic