Верхний цикл тестирования, который инициализирует n регистров в сборке MIPS - PullRequest
1 голос
/ 19 сентября 2011

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

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

Например, если я установлю $ t0 на 3, я хочу, чтобы цикл выполнялся 3 раза и запрашивал ввод для $ t1, $ t2 и $ t3.Я знаю, как выполнить подсказку ввода, мне просто нужна помощь в разработке цикла, который выполнит это.Любые советы о том, с чего начать или какие операции мне нужно использовать?

Это в основном то, что я имею до сих пор ...

li $t2, 1
next1:
beq $t2, $s1, next2
    # loop code
addi $t2, $t2, 1    
j next1

next2:

1 Ответ

2 голосов
/ 19 сентября 2011

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

Вы можете использовать эквивалент оператора switch:

sll $a0, 2  # $a0 = 8 * $a0
# set one of $t0,$t1,...,t7 to the value of $a1 as selected by the value of $a0
b $a0(SW)
nop           # branch delay slot
DONE:
...
# switch cases start here. Each case uses 2 instructions
SW:
b DONE        # case 0
mov $t0, $a1  # branch delay slot
b DONE
mov $t1, $a1
...
b DONE
mov $t7, $a1
# end of switch cases

Вместо этого вы можете использовать самоизменяющийся код, но это не рекомендуется.

...