为什么mips回文功能根据规格不起作用?

时间:2016-11-09 20:37:26

标签: string recursion assembly mips palindrome

我试图写完一个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:

1 个答案:

答案 0 :(得分:1)

问题在于:

Palin:

# HERE IS THE FUNCTION

li  $v0, 10  # These
    syscall  # lines

值10是退出程序的陷阱,因为您将其加载到寄存器$v0然后执行syscall,程序退出。删除那些违规行,你应该快乐。

HTH