मैं उपयोगकर्ता को एक स्ट्रिंग की लंबाई के लिए संकेत देने की कोशिश कर रहा हूं, उस स्ट्रिंग के लिए स्थान आवंटित करें, फिर इसे विपरीत में प्रिंट करें।एमआईपीएस असेंबली में एक स्ट्रिंग को रिवर्स करना
मुझे के जीवन के लिए, मैं क्यों यह काम नहीं कर रहा को समझ नहीं सकता ..
Sample Output:
(spim) run
Please enter an integer:
7
string
(spim)
अब "स्ट्रिंग" की लंबाई 6 सही होना चाहिए? + शून्य समापन चरित्र जो इसे बनाना चाहिए 7. क्या कोई भी इस स्थान पर जा सकता है कि मैं अपने दृष्टिकोण के साथ गलत कहां जा रहा हूं?
.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
आप के माध्यम से कदम की कोशिश की है डीबगर में कोड? ऐसा लगता है कि आप मानते हैं कि '$ a0' में स्ट्रिंग का पता syscall 8 रिटर्न के बाद छूटा नहीं गया है, क्या आप निश्चित हैं कि यह मामला है? – user786653
[मार्स एमआईपीएस सिम्युलेटर] (http://courses.missouristate.edu/KenVollmar/MARS/) डिबगिंग असेंबली के लिए चमत्कार करता है – Msonic