Guest User

Untitled

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