MIPS — доступ и изменение массива символов

#arrays #char #mips #tic-tac-toe

#массивы #char #mips #крестики-нолики

Вопрос:

Я работаю над игрой в крестики-нолики для домашнего задания в MIPS.

Итак, у меня есть массив символов, настроенный следующим образом:

 boardArray:
    .align 2
    .byte '_', '_', '_', '_', '_', '_', '_', '_', '_', '-'
  

Я пытаюсь получить доступ следующим образом:

 sll $t1,$t1,2           # multiply the index by 4
add $t2,$t4,$t1      # add the values of the address and the offset; store in $t2
lw $t3,($t2)            # store the contents of $t2 in $t3
  

С заменой последней строки на:

 sw $s1,($t2)            # store the value of $s1 in $t2
  

Для изменения значения в массиве. Однако, похоже, это не работает. У меня есть игрок, который вводит значение строки и столбца, затем пытается проверить эту позицию (доступ к массиву), чтобы увидеть, открыта ли она (если она открыта, это ‘_’). Если он открыт, то он заменяется на «X» или «O» в зависимости от текущего игрока. Я загрузил всю программу здесь. Пожалуйста, извините, насколько это ужасно, мы с assembly не друзья.

Ответ №1:

w In lw / sw означает word , что это единица из 4 байт в MIPS. Элементы в вашем boardArray — это байты, а не слова.

У вас есть несколько альтернатив: либо сделайте свой массив массивом слов; или используйте lbu / sb вместо lw / sw и пропустите масштабирование индекса.