#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
и пропустите масштабирование индекса.