Получение данных из массива (кажется, не получается заставить его работать) - PullRequest
0 голосов
/ 18 февраля 2019

В настоящее время я работаю над функцией палиндрома в MIPS, которая принимает массив символов и возвращает 0, если это не палиндром, иначе 1. У меня все вроде бы работает, за исключением части, где я нахожу данные по индексу iи array.length-i-1.Если бы кто-то мог направить меня в правильном направлении, я был бы очень благодарен.

Вот код Java, из которого я ухожу:

int Palindrome(char[] s) {
    for(int i = 0; i < (s.length / 2); i++) {
        if(s[i] != s[s.length - 1 - i])
            return 0;
    }
    return 1;
}

Вот функция Палиндрома:

palindrome:
# Get length of array and store it in $t1
addi $sp, $sp, -8
sw $ra, 0($sp)
sw $a0, 4($sp)
li $t1, 0

lengthWhile:
lw $t2, 0($a0)
beq $t2, $zero, startPalindrome
addi $t1, $t1, 1
addi $a0, $a0, 4
j lengthWhile

startPalindrome:
div $t2, $t1, 2       # Stores a.length / 2 into $t2
add $t3, $t3, $zero   # i value (0 - (a.length/2 - 1))
add $t4, $t4, $t1
subi $t4, $t4, 1      # a.length-1

# $t1 = a.length
# $t2 = a.length / 2
# $t3 = i
# $t4 = a.length - 1

palLoop:
bge $t3, $t2, exitLoop
sub $t4, $t4, $t3 # Puts a.length-1-i into $t4

sll $t5, $t3, 2
add $t6, $a0, $t5
lw $s1, 0($t6)

sll $s3, $t4, 2
add $t7, $a0, $s3
lw $s2, 0($t7)

bne $s1, $s2, return0

# Increase i and start loop again
addi $t3, $t3, 1
j palLoop

return0:
li $v0, 0
jr $ra  

exitLoop:
li $v0, 1
jr $ra  

Вот главное:

.data
charArray: .word 'a', 'b', 'c', 'd', 'c', 'w', 'a'

.text
main:

 # Palindrom Function
 la $a0, charArray
 jal palindrome
 move $a0, $v0
 li $v0, 1
 syscall

 # Exit Program
 li $v0, 10
 syscall

Заранее спасибо за любую помощь.(Чтобы указать, у меня возникли проблемы с PalLoop).

1 Ответ

0 голосов
/ 18 февраля 2019

Не является частью вашего вопроса, но charArray: .word 'a', 'b', 'c', 'd', 'c', 'w', 'a' - это массив слов, содержащий чатартерзначение, а не массив символов.

Похоже, что это будет работать, когда вы везде используете массив слов, однако не будет работать, если вы используете правильный массив символов.

добавьте $ t3, $ t3, $ ноль равен t3 = t3 + 0 - что такое t3 до этого?

добавить $ t4, $ t4, $ t1 - тот же комментарий

sub $ t4, $ t4, $ t3# Помещает a.length-1-i в $ t4 - перезапишет a.length-1 (t4), поэтому во 2-й раз в цикле будет неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...