В этом цикле сканируется строка, и для каждого символа, если он равен одной из этих букв, выполняется определенная процедура:
switch:
add $t1, $zero, $t2
add $t1, $t1, $s2 # $s2 is the address of a string
lb $t0, 0($t1)
blt $t0, 0x41, done
bgt $t0, 0x45, done
beq $t0, 0x41, algoA # These are the jump at the procedure
beq $t0, 0x42, algoB # The parameter in input are setted
beq $t0, 0x43, algoC # Before that SWITCH
beq $t0, 0x44, algoD
beq $t0, 0x45, algoE
endSwitch:
add $t2, $t2, 1
beq $t2, $s1, done
j switch
done:
Для школьного проекта мне нужно, чтобы каждая метка "Algo" былапроцедура.
Сначала определяются входные параметры.
Я не знаю, как с помощью команды jr $ra
вернуть процедуру из цикла в этот цикл переключения.
Я думаю, что, возможно, я должен добавить в регистр $ra
адрес метки endSwitch:
.
Я не уверен, что это правильно.
Здесь псевдо-код:
while x <= len(string)
switch string[x]
case A: algoA(); x++;
case B: algoB(); x++;
case C: algoC(); x++;
case D: algoD(); x++;
case E: algoE(); x++;
default: x = len(string);