я пытаюсь реализовать переключатель случай в трудоемкости, используя таблицу переходов как массив меток для перехода:Реализовать кожух переключателя в MIPS
.data
JumpTable:
.word L0, L1, L2, L3
.text
.globl main
main:
la $t4, JumpTable # address of JumpTable
sll $t1, $s5, 2 # s5 is value of the variable witch we want to switch on it.
add $t1, $t1, $t4
lw $t0, 0($t1)
jr $t0
L0:
...
L1:
...
L2:
...
L3:
...
мой вопрос, есть ли способ сделать это для не последовательные переменные? (например, 1,4,19,40)
В этом случае единственный способ сравнить-и-jump –
u предполагает, что нет возможности сделать это с помощью таблицы прыжка? – Branky
да, попробуйте выполнить компиляцию с C и посмотрите на разборку, не все случаи могут использоваться с таблицей переходов. Конечно, вы можете использовать неиспользуемые случаи с адресом для перехода, чтобы вырваться из корпуса, но он будет потреблять память, и не все случаи могут использовать это. Например, как вы можете сделать таблицу перехода для коммутатора с 0, 1, 10000000, 500000000 случаями? –