Guest User

Untitled

a guest
Jul 11th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. .data
  2. str: .ascii "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
  3. size: .word 52
  4.  
  5. .text
  6. .globl START
  7.  
  8. START:
  9. la $a0, str
  10. lw $a1, size
  11. #Verifica se existe algum não alfabético
  12. addi $s0, $a0, 0 #Ponteiro
  13. add $s1, $s0, $a1 #Final
  14.  
  15. addi $s4, $zero, 96 #96 = 'a' - 1
  16. addi $s5, $zero, 123 #123 = 'z' + 1
  17. addi $s6, $zero, 64 #64 = 'A' - 1
  18. addi $s7, $zero, 91 #91 = 'Z' + 1
  19. WHILE_CHECK:
  20. slt $t0, $s0, $s1
  21. beq $t0, $zero, END_WHILE_CHECK #Se chegou ao final, saia do loop
  22. lb $t0, 0($s0)
  23.  
  24. slt $t1, $s4, $t0 # 'a' <= c
  25. slt $t2, $t0, $s5 # c <= 'z'
  26. and $t3, $t1, $t2 # 'a' <= c <= 'z'
  27.  
  28. slt $t4, $s6, $t0 # 'A' <= c
  29. slt $t5, $t0, $s7 # c <= 'Z'
  30. and $t6, $t4, $t5 # 'A' <= c <= 'Z'
  31. or $t7, $t3, $t6 # Is alphabetic
  32.  
  33. addi $s0, $s0, 1 #Adianta o ponteiro em um byte
  34.  
  35. bne $t7, $zero, WHILE_CHECK #se alfabetico, repita
  36. addi $v1, $zero, 1
  37. j END
  38. END_WHILE_CHECK:
  39.  
  40. addi $sp, $sp, -104 #Reserva um espaço para 26 inteiros na pilha
  41. addi $s2, $sp, 0 #Inicio do array
  42. addi $s3, $sp, 104 #Final do array
  43. addi $t0, $s2, 0 #Ponteiro do array
  44. WHILE_ZERAR:
  45. slt $t1, $t0, $s3
  46. beq $t1, $zero, END_WHILE_ZERAR
  47. sw $zero, 0($t0)
  48. addi $t0, $t0, 4
  49. j WHILE_ZERAR
  50. END_WHILE_ZERAR:
  51.  
  52. #O array agora está zerado
  53.  
  54. addi $s0, $a0, 0
  55. WHILE_COUNT:
  56. slt $t0, $s0, $s1
  57. beq $t0, $zero, END_WHILE_COUNT
  58. lb $t0, 0($s0) # $t0 = c
  59.  
  60. slt $t1, $t0, $s7 #Verifica se é UPPER ou LOWER
  61. bne $t1, $zero, COUNT_IF_UPPER
  62. COUNT_IF_LOWER:
  63. addi $t2, $t0, -97 #$t2 = c - 'a'
  64. j COUNT_ENDIF_CASE
  65. COUNT_IF_UPPER:
  66. addi $t2, $t0, -65 #t2 = c - 'A'
  67. COUNT_ENDIF_CASE:
  68.  
  69. sll $t2, $t2, 2
  70. add $t3, $s2, $t2 #$t3 tem a posição que será incrementada
  71. lw $t4, 0($t3)
  72. addi $t4, $t4, 1
  73. sw $t4, 0($t3) #a[p]++
  74.  
  75. addi $s0, $s0, 1
  76. j WHILE_COUNT
  77. END_WHILE_COUNT:
  78.  
  79. slti $t0, $a1, 6
  80. bne $t0, $zero, IF_MUST_BE_UPPER
  81. IF_MUST_BE_LOWER:
  82. addi $s6, $zero, 97
  83. j ENDIF_MUST_BE_CASE
  84. IF_MUST_BE_UPPER:
  85. add $s6, $zero, 65
  86. ENDIF_MUST_BE_CASE:
  87.  
  88. addi $s0, $a0, 0 #Ponteiro para a string
  89. #$s2 é o ponteiro para o array
  90.  
  91. WHILE_COUNT_SORT:
  92. slt $t0, $s2, $s3
  93. beq $t0, $zero, END_WHILE_COUNT_SORT
  94. lw $t0, 0($s2)
  95. WHILE_COUNT_SORT_FILL:
  96. beq $t0, $zero, END_WHILE_COUNT_SORT_FILL
  97. sb $s6, 0($s0)
  98. addi $s0, $s0, 1
  99. addi $t0, $t0, -1
  100. j WHILE_COUNT_SORT_FILL
  101. END_WHILE_COUNT_SORT_FILL:
  102. addi $s6, $s6, 1
  103. addi $s2, $s2, 4
  104. j WHILE_COUNT_SORT
  105. END_WHILE_COUNT_SORT:
  106.  
  107. addi $sp, $sp, 104 #Restaura a pilha
  108.  
  109. END:
  110. .end START
Add Comment
Please, Sign In to add comment