Advertisement
dlarubia

Questão1.asm

Sep 18th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.90 KB | None | 0 0
  1. ; Programa para o primeiro trabalho de progrmação no Simus
  2. ; Alunos: Daniel La Rubia Rolim
  3. ; Leonardo Ventura
  4. ; Maria Eduarda Lucena
  5. ;
  6. ; Grupo B
  7. ;-------------------------------------------------------------
  8.  
  9. ; Como nosso acumulador tem apenas 8 bits, precisaremos de 4 leituras
  10. ; para lermos todos os 4 bits passados
  11.  
  12. ORG 400
  13. ZEROS: DB 0 ; define um byte para contar a quantidade de zeros
  14. UNS: DB 0 ; define um byte para contar a quantidade de uns
  15. LIDOS: DB 0 ; quantidade de bytes lidos
  16. BLIDOS: DB 0 ; quantidade de bits lidos
  17. CURRENT: DB 0 ; numero sendo tratado atualmente
  18.  
  19. ORG 200
  20. ContaUnsZeros: ; rotina que irá receber 32 bits na pilha
  21. ; e um operando no acumulador dizendo o que contar
  22.  
  23. XOR #0 ; testa se acumulador é zero
  24. JZ ZERO ; desvia se for zero
  25.  
  26. UM: ; rotina para contar uns
  27. LDA #0
  28. STA BLIDOS ; colocando 0 na quantidade de bits lidos
  29. POP ; salva primeiro byte no acumulador
  30. STA CURRENT ; salva numero que vai ser analisado
  31. UMLEBIT:
  32. LDA CURRENT ; carrega numero que vai ser analisado
  33. SHR ; faz shift para direita (se for 1, vai acender carry)
  34. STA CURRENT ; salva numero depois do shift
  35. JC INCUM ; incrementa o contador UNS se tiver carry
  36. UMINCRET:
  37. LDA #1
  38. ADD BLIDOS ; incrementa 1 em BLIDOS, salva no acc
  39. STA BLIDOS ; salva em BLIDOS
  40. LDA #8 ; carrega 8 no acumulador
  41. XOR BLIDOS ; compara 8 com B_LIDOS para acender as flags
  42. JNZ UMLEBIT ; se BLIDOS nao for igual a 8, ainda tem bits para ler
  43. ; caso contrario, vai para comparação de bytes lidos
  44. LDA #1 ; carrega 1 no acumulador
  45. ADD LIDOS ; soma com LIDOS, salva no acc
  46. STA LIDOS ; incrementa 1 em LIDOS
  47. LDA #4 ; 32 bits em bytes
  48. XOR LIDOS ; compara 4 com a quantidade de bytes lidos
  49. JZ FIM ; se lidos == 4, acaba o programa
  50. JMP UM ; lê proximo byte
  51.  
  52.  
  53. ZERO: ; rotina para contar zeros
  54. LDA #0
  55. STA BLIDOS ; colocando 0 na quantidade de bits lidos
  56. POP ; salva primeiro byte no acumulador
  57. STA CURRENT ; salva numero que vai ser analisado
  58. ZEROLEBIT:
  59. LDA CURRENT ; carrega numero que vai ser analisado
  60. SHR ; faz shift para direita (se for 0, não vai acender carry)
  61. STA CURRENT ; salva numero depois do shift
  62. JNC INCZERO ; incrementa o contador ZEROS se não tiver carry
  63. ZINCRET:
  64. LDA #1
  65. ADD BLIDOS ; incrementa 1 em BLIDOS
  66. STA BLIDOS ; salva em BLIDOS
  67. LDA #8 ; carrega 8 no acumulador
  68. XOR BLIDOS ; compara 8 com B_LIDOS para acender as flags
  69. JNZ ZEROLEBIT ; se B_LIDOS nao for igual a 8, ainda tem bits para ler
  70. ; caso contrario, vai para comparação de bytes lidos
  71. LDA #1 ; carrega 1 no acc
  72. ADD LIDOS ; soma 1 a LIDOS
  73. STA LIDOS ; salva em LIDOS: incrementa 1 em LIDOS
  74. LDA #4 ; 32 bits em bytes
  75. XOR LIDOS ; compara 4 com a quantidade de bytes lidos
  76. JZ FIM ; se lidos == 4, acaba o programa
  77. JMP ZERO ; lê proximo byte
  78.  
  79. INCUM: ; rotina para incrementar contador UNS
  80. LDA #1
  81. ADD UNS
  82. STA UNS
  83. JMP UMINCRET
  84.  
  85. INCZERO: ; rotina para incrementar contador ZEROS
  86. LDA #1
  87. ADD ZEROS
  88. STA ZEROS
  89. JMP ZINCRET
  90.  
  91. FIM:
  92. HLT
  93. END 0
  94.  
  95.  
  96. ORG 100
  97. P: DW A
  98. A: DB 254, 254, 255, 255
  99.  
  100. ORG 0
  101. MAIN:
  102. LDA #0 ; quero calcular quantidade de 1
  103. LDS P ; aponta sp pra P
  104. JMP ContaUnsZeros ; pula pra rotina
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement