Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<Iregdef.h>
- .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