как вернуться к ветке оператора? - PullRequest
1 голос
/ 05 декабря 2011

У меня много проблем, когда я пытаюсь понять, как реализовать это в архитектуре Mips / Mars.

Я делаю игру на линкоре и сохраняю доску в виде массива, который может содержать 100 дюймов.

Мне нужно перебрать массив игрока и преобразовать информацию, хранящуюся в каждой «ячейке», в графические данные с целью отображения доски пользователю.

Мои проблемы связаны с тем, что отображаемые пользователю символы основаны на том, какие значения находятся в каждой ячейке массива.

Если значение равно 0 (пусто), выведите «[]», если 1 (угадано и пусто), напечатайте - «[O]», а если 2 (угадано и найдено), напечатайте - «[X]».

Так что, поскольку я перебираю каждую ячейку в массиве, мне нужно проверить значение и перейти к соответствующей функции печати. ​​

Моя проблема в том, что, если я перехожу на оператор print, как я могу вернуться туда, где был оператор ветвления?

Псевдокод:

Looping through array, 'ArrayCell' = value at current array location
branch if equal ArrayCell, 0, print empty
branch if equal ArrayCell, 1, print miss
branch if equal ArrayCell, 2, print hit
increment array

print empty:
print then jump back to loop
print miss:
print then jump back to loop
print hit:
print then jump back to loop

Как вы возвращаетесь к оператору ветки после печати, чтобы сохранить свое местоположение в массиве?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Вы действительно должны использовать вызовы функций для этого.

   Looping through array, 'ArrayCell' = value at current array location
    if equal ArrayCell, 0, JAL empty
    if equal ArrayCell, 1, JAL miss
    if equal ArrayCell, 2, JAL hit

   LBL_Increment:
    increment array

   loop


   empty:
    print " "
    JR $RA    // return to the instruction after the "JAL empty" instruction.
   miss:
    print "miss"
    JR $RA
   hit:
    print "hit"
    JR $RA
2 голосов
/ 05 декабря 2011

Поместите метку над оператором increment array и в конце print empty, print miss и print hit, j к метке.

Пример:

   Looping through array, 'ArrayCell' = value at current array location
    branch if equal ArrayCell, 0, print empty
    branch if equal ArrayCell, 1, print miss
    branch if equal ArrayCell, 2, print hit

   LBL_Increment:
    increment array

   loop


    print empty:
    print
    j LBL_Increment
    print miss:
    print
    j LBL_Increment
    print hit:
    print
    j LBL_Increment
...