我正在尝试将我在C++
中编写的函数转换为MIPS
。该函数测试char数组是否为回文结构,字符串中的字符串是对称的(例如:“heeh”和“gtrertg”是回文,“嘿”不是)。在MIPS
中,字符串将通过$a0
传递,返回值应在$v0
中传递。这是我的C++
代码:
#include <iostream>
using namespace std;
int palindrome(char s[])
{
int j;
j = 0;
int i;
i = -1;
//finding length of string...
while(s[i+1] != '\0')
{
i++;
}
//while the two opposite chars are equal...
while(s[j] == s[i])
{
//if the chars are at the same index...
if(i == j)
{
//palindrome
return 1;
}
//if the left index passes the right index...
if(j > i)
{
//palindrome
return 1;
}
//increment left index
j++;
//decrement right index
i--;
}
//not palindrome
return 0;
}
我已经测试了我的C++
代码,它运行得很好。这是我的MIPS
代码:
#$a0 contains the address of the string
.data
.text
.globl palindrome
palindrome:
li $t0, 0 #j = 0
li $t1, -1 #i = -1
addi $t2, $a0, 0 #a[0]
L1:
addi $t2, $t2, 1 #a[i + 1]
addi $t1, $t1, 1 #i++
bne $t2, $zero, L1 #exit loop when '\0' is found
add $t2, $a0, $t0 #a[j]
add $t3, $a0, $t1 #a[i]
L2A:
bne $t1, $t0, If2 #if i does not equal j jump to next if
j Return1 #jump to Return1 label
If2:
ble $t1, $t0, L2B #if j<= i, skip if statement
j Return1 #jump to Return1 label
L2B:
addi $t0, $t0, 1 #j++
addi $t1, $t1, -1 #i--
beq $t2, $t3, L2A #exit loop when a[j] != a[i]
Return1:
addi $v0, $zero, 1 #return 1
j Exit
Return0:
addi $v0, $zero, 0 #return 0
j Exit
Exit:
jr $ra #return
在检查\0
字符时确定字符串的大小时,我的第一个循环中出现错误。有人可以帮忙吗?另外,我必须将字符串的字符转换为相同的大小写。我是否需要在开始时使用另一个循环来检查它们的int ASCII表示并根据具体情况将其递增或递减一定数量?如果您发现任何其他错误,包括常规错误,请指出它们。测试palindrome文件的文件已经过错误检查并按预期工作。