Skip to content

Instantly share code, notes, and snippets.

@guiocavalcanti
Created June 18, 2013 23:47
Show Gist options
  • Save guiocavalcanti/5810551 to your computer and use it in GitHub Desktop.
Save guiocavalcanti/5810551 to your computer and use it in GitHub Desktop.
.data
entrada: .asciiz "acd"
nextline: .asciiz "\n"
.text
main:
addi $t0, $zero, 0 # Inicializa contador ($t0) com 0, just in case.
change_case:
lb $t1, entrada($t0) # Armazena caractere em $t1
beq $t1, 0, sort # Sai do loop change_case se entrada[$t0] for 0
addi $t2, $t1, -97 # Vai para not_in_range se for menor que 97
bltz $t2, not_in_range
addi $t2, $t1, -122 # Vai para not_in_range se for maior do que 122
bgtz $t2, not_in_range
j in_range
not_in_range:
li $v1, 1
j exit
in_range:
sub $t1, $t1, 32 # Subtrai 32 do valor do caractere atual (A - 32 = a)
sb $t1, entrada($t0) # Armazena caractere convertido no mesmo local da memória
addi $t0, $t0, 1 # incrementa contador $t0
j change_case # nova interação do change_case
sort:
j exit
swap: # Realiza swap entre os elementos com offset em $a0 e $a1
lb $t1, entrada($a0)
lb $t2, entrada($a1)
sb $t1, entrada($a1)
sb $t2, entrada($a0)
jr $ra
print_and_exit:
li $v0, 4 # Faz chamada de print_string do sistema
la $a0, entrada
syscall
j exit
exit:
li $v0,10 # Chamada do sistema para terminar o programa
syscall
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment