Я пытаюсь переключить простой пользовательский текст из нижнего регистра в верхний и наоборот. Пример: «Hello» после запуска становится «hELLO», по существу переключая регистры. В настоящее время программа преобразует только нижний регистр в верхний. Мой вопрос в том, как можно реализовать переход с верхнего регистра на нижний на основе того, что уже написано. Прости меня, если я делаю что-то не так. Я довольно новичок в этом. Это то, что у меня есть на данный момент:
.data
promp: .asciiz "Enter string: "
str: .space 81
toogle_msg: .asciiz "The result is "
.text
.globl main
main:
li $v0,4 # syscall code to print
la $a0,promp # promp message tag
syscall # print promp
li $v0, 8 #syscall code to read string
li $a1, 81 # space for string
la $a0, str # str message tag
syscall # print
li $v0, 4
li $t0, 0
loop:
lb $t1, str($t0)
beq $t1, 0, exit # go to exit if $t1=0
blt $t1, 'a', case # go to case if $t1>a
bgt $t1, 'z', case # go to case if $t1<z
sub $t1, $t1, 32 # subtract 32 and save in $t1
sb $t1, str($t0)
case:
addi $t0, $t0, 1
j loop # go to loop
exit:
li $v0,4 # syscall code to print
la $a0,toogle_msg # toogle message tag
syscall # print toggle_msg
li $v0, 4 # syscall code to print
la $a0, str # str message tag
syscall # print str
li $v0, 10 # syscall code to exit
syscall # exit
xor
с0x20
— это обычный способ перевернуть регистр. Вам нужна только одна подпрограмма и одна условная ветвь без знака, чтобы проверить, является ли байт буквенным, а затем XOR. Или сделайте его безветвящимся с помощьюsub
+sltu
/shl
/xor
, чтобы вы использовали xor с 0x20 или 0 для неалфавитного. См. Как получить доступ к массиву символов и изменить строчные буквы на прописные и наоборот для версии x86 с большим количеством текста, который объясняет алгоритм проверки/исключения. - person Peter Cordes   schedule 26.11.2018