所以基本上,我必须在不知道大小的情况下将字符串翻转到位。 所以我编写代码来查找大小,然后从两边替换字符串中的字符,直到我们到达中间,我们就完成了。但是,我的代码没有输出,我的大脑现在正在沸腾 有人可以帮忙吗
# a program to reverse a string in memory (without allocating additional memory)
.data
string: .asciiz "CMPS 255"
.text
#find the length of the string
li $s0, 0 #max index
li $s1, 0 #initial index
findNull:lb $t0,string($s0)
beq $t0,$zero,foundNull
add $s0,$s0,1
j findNull
foundNull:
beq $s0, $s1, done
lb $t1, string($s0) #right value
lb $t2, string($s1) #left value
sb $t1, string($s1) #switched
sb $t2, string($s0) #switched
addi $s1, $s1, 1
subi $s0, $s0, 1
j foundNull
done:
la $a0,string
li $v0, 4
syscall
答案 0 :(得分:0)
所以,我花了一点时间为这个算法写了一些伪代码...... 我按照上次的确切步骤,但这次我的工作更有条理,这是我最后的答案。我希望有人找到它是有帮助的
.data
string: .asciiz "hello"
.text
la $a1, string
li $t9,0 #counter for the size
loop:
lb $a2, ($a1)
beq $a2, $zero, found
addi $a1, $a1, 1
add $t9, $t9, 1
j loop
found: #its time to reverse
sub $t9, $t9, 1 #max index
li $t8 , 0 #staring index
looptwo:
beq $t8, $t9, done
lb $t1, string($t8) #left most
lb $t2, string($t9)#right most
sb $t1, string($t9)
sb $t2, string($t8)
add $t8, $t8 , 1
sub $t9, $t9 , 1
j looptwo
done:
li $v0 , 4
la $a0, string
syscall