我试图写完一个mips回文功能,"向后读取同样向前"而我的功能根本不起作用。这伤害了我的大脑,非常感谢任何帮助。谢谢!
回文的递归定义如下: 设字符串S表示为S = S1 S2 ... SN,其中N是字符串的长度。
S is a palindrome
if N = 0 or N = 1 or
if N 2 and S1 = SN and the substring (S2 .. SN-1) is a palindrome.
功能培林($ a0,$ a1) 前提条件:
$ a0保存正在测试的字符串(或子字符串)中第一个字节的地址,而$ a1保存字符串(或子字符串)的长度
后置条件:
如果给定的字符串(或子字符串)是回文,则在寄存器$ v0中返回1(true);否则,在$ v0中返回0(false)。
.data
prompt1: .asciiz "Enter length of string to be read: "
prompt2: .asciiz "Enter the string "
ItIs: .asciiz "\nThe string IS a palindrome!"
IsNot: .asciiz "\nThe string is NOT a palindrome!"
string: .asciiz ""
.text
.globl main
main:
la $a0, prompt1
li $v0, 4
syscall
li $v0, 5
syscall
move $a1, $v0
la $a0, prompt2
li $v0, 4
syscall
addi $a1, $a1, 1
la $a0, string
li $v0, 8
syscall
addi $a1, $a1, -1
jal Palin
bne $v0, $zero, label1
la $a0, IsNot
j label2
label1:
la $a0, ItIs
label2:
li $v0, 4
syscall
li $v0 10
syscall
nop
Palin:
# HERE IS THE FUNCTION
li $v0, 10
syscall
addu $ra, $zero, $s7 #restore $ra since the function calles
#another function
jr $ra
add $zero, $zero, $zero
add $zero, $zero, $zero
EndPalin:
答案 0 :(得分:1)
问题在于:
Palin:
# HERE IS THE FUNCTION
li $v0, 10 # These
syscall # lines
值10是退出程序的陷阱,因为您将其加载到寄存器$v0
然后执行syscall
,程序退出。删除那些违规行,你应该快乐。
HTH