Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- str: .ascii "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
- size: .word 52
- .text
- .globl START
- START:
- la $a0, str
- lw $a1, size
- #Verifica se existe algum não alfabético
- addi $s0, $a0, 0 #Ponteiro
- add $s1, $s0, $a1 #Final
- addi $s4, $zero, 96 #96 = 'a' - 1
- addi $s5, $zero, 123 #123 = 'z' + 1
- addi $s6, $zero, 64 #64 = 'A' - 1
- addi $s7, $zero, 91 #91 = 'Z' + 1
- WHILE_CHECK:
- slt $t0, $s0, $s1
- beq $t0, $zero, END_WHILE_CHECK #Se chegou ao final, saia do loop
- lb $t0, 0($s0)
- slt $t1, $s4, $t0 # 'a' <= c
- slt $t2, $t0, $s5 # c <= 'z'
- and $t3, $t1, $t2 # 'a' <= c <= 'z'
- slt $t4, $s6, $t0 # 'A' <= c
- slt $t5, $t0, $s7 # c <= 'Z'
- and $t6, $t4, $t5 # 'A' <= c <= 'Z'
- or $t7, $t3, $t6 # Is alphabetic
- addi $s0, $s0, 1 #Adianta o ponteiro em um byte
- bne $t7, $zero, WHILE_CHECK #se alfabetico, repita
- addi $v1, $zero, 1
- j END
- END_WHILE_CHECK:
- addi $sp, $sp, -104 #Reserva um espaço para 26 inteiros na pilha
- addi $s2, $sp, 0 #Inicio do array
- addi $s3, $sp, 104 #Final do array
- addi $t0, $s2, 0 #Ponteiro do array
- WHILE_ZERAR:
- slt $t1, $t0, $s3
- beq $t1, $zero, END_WHILE_ZERAR
- sw $zero, 0($t0)
- addi $t0, $t0, 4
- j WHILE_ZERAR
- END_WHILE_ZERAR:
- #O array agora está zerado
- addi $s0, $a0, 0
- WHILE_COUNT:
- slt $t0, $s0, $s1
- beq $t0, $zero, END_WHILE_COUNT
- lb $t0, 0($s0) # $t0 = c
- slt $t1, $t0, $s7 #Verifica se é UPPER ou LOWER
- bne $t1, $zero, COUNT_IF_UPPER
- COUNT_IF_LOWER:
- addi $t2, $t0, -97 #$t2 = c - 'a'
- j COUNT_ENDIF_CASE
- COUNT_IF_UPPER:
- addi $t2, $t0, -65 #t2 = c - 'A'
- COUNT_ENDIF_CASE:
- sll $t2, $t2, 2
- add $t3, $s2, $t2 #$t3 tem a posição que será incrementada
- lw $t4, 0($t3)
- addi $t4, $t4, 1
- sw $t4, 0($t3) #a[p]++
- addi $s0, $s0, 1
- j WHILE_COUNT
- END_WHILE_COUNT:
- slti $t0, $a1, 6
- bne $t0, $zero, IF_MUST_BE_UPPER
- IF_MUST_BE_LOWER:
- addi $s6, $zero, 97
- j ENDIF_MUST_BE_CASE
- IF_MUST_BE_UPPER:
- add $s6, $zero, 65
- ENDIF_MUST_BE_CASE:
- addi $s0, $a0, 0 #Ponteiro para a string
- #$s2 é o ponteiro para o array
- WHILE_COUNT_SORT:
- slt $t0, $s2, $s3
- beq $t0, $zero, END_WHILE_COUNT_SORT
- lw $t0, 0($s2)
- WHILE_COUNT_SORT_FILL:
- beq $t0, $zero, END_WHILE_COUNT_SORT_FILL
- sb $s6, 0($s0)
- addi $s0, $s0, 1
- addi $t0, $t0, -1
- j WHILE_COUNT_SORT_FILL
- END_WHILE_COUNT_SORT_FILL:
- addi $s6, $s6, 1
- addi $s2, $s2, 4
- j WHILE_COUNT_SORT
- END_WHILE_COUNT_SORT:
- addi $sp, $sp, 104 #Restaura a pilha
- END:
- .end START
Add Comment
Please, Sign In to add comment