Advertisement
dlarubia

Questão1-relatorioCompilacao.txt

Sep 18th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.46 KB | None | 0 0
  1. Compilação (assembly) do texto:
  2. Em 19/09/2019
  3.  
  4. 1 ; Programa para o primeiro trabalho de progrmação no Simus
  5. 2 ; Alunos: Daniel La Rubia Rolim
  6. 3 ; Leonardo Ventura
  7. 4 ; Maria Eduarda Lucena
  8. 5 ;
  9. 6 ; Grupo B
  10. 7 ;-------------------------------------------------------------
  11. 8
  12. 9 ; Como nosso acumulador tem apenas 8 bits, precisaremos de 4 leituras
  13. 10 ; para lermos todos os 4 bits passados
  14. 11
  15. 12 ORG 400
  16. 13 0190 00 ZEROS: DB 0 ; define um byte para contar a quantidade de zeros
  17. 14 0191 00 UNS: DB 0 ; define um byte para contar a quantidade de uns
  18. 15 0192 00 LIDOS: DB 0 ; quantidade de bytes lidos
  19. 16 0193 00 BLIDOS: DB 0 ; quantidade de bits lidos
  20. 17 0194 00 CURRENT: DB 0 ; numero sendo tratado atualmente
  21. 18
  22. 19 ORG 200
  23. 20 00C8 ContaUnsZeros: ; rotina que irá receber 32 bits na pilha
  24. 21 ; e um operando no acumulador dizendo o que contar
  25. 22
  26. 23 00C8 46 00 XOR #0 ; testa se acumulador é zero
  27. 24 00CA A0 03 01 JZ ZERO ; desvia se for zero
  28. 25
  29. 26 00CD UM: ; rotina para contar uns
  30. 27 00CD 22 00 LDA #0
  31. 28 00CF 10 93 01 STA BLIDOS ; colocando 0 na quantidade de bits lidos
  32. 29 00D2 E4 POP ; salva primeiro byte no acumulador
  33. 30 00D3 10 94 01 STA CURRENT ; salva numero que vai ser analisado
  34. 31 00D6 UMLEBIT:
  35. 32 00D6 20 94 01 LDA CURRENT ; carrega numero que vai ser analisado
  36. 33 00D9 74 SHR ; faz shift para direita (se for 1, vai acender carry)
  37. 34 00DA 10 94 01 STA CURRENT ; salva numero depois do shift
  38. 35 00DD B0 39 01 JC INCUM ; incrementa o contador UNS se tiver carry
  39. 36 00E0 UMINCRET:
  40. 37 00E0 22 01 LDA #1
  41. 38 00E2 30 93 01 ADD BLIDOS ; incrementa 1 em BLIDOS, salva no acc
  42. 39 00E5 10 93 01 STA BLIDOS ; salva em BLIDOS
  43. 40 00E8 22 08 LDA #8 ; carrega 8 no acumulador
  44. 41 00EA 44 93 01 XOR BLIDOS ; compara 8 com B_LIDOS para acender as flags
  45. 42 00ED A4 D6 00 JNZ UMLEBIT ; se BLIDOS nao for igual a 8, ainda tem bits para ler
  46. 43 ; caso contrario, vai para comparação de bytes lidos
  47. 44 00F0 22 01 LDA #1 ; carrega 1 no acumulador
  48. 45 00F2 30 92 01 ADD LIDOS ; soma com LIDOS, salva no acc
  49. 46 00F5 10 92 01 STA LIDOS ; incrementa 1 em LIDOS
  50. 47 00F8 22 04 LDA #4 ; 32 bits em bytes
  51. 48 00FA 44 92 01 XOR LIDOS ; compara 4 com a quantidade de bytes lidos
  52. 49 00FD A0 4F 01 JZ FIM ; se lidos == 4, acaba o programa
  53. 50 0100 80 CD 00 JMP UM ; lê proximo byte
  54. 51
  55. 52
  56. 53 0103 ZERO: ; rotina para contar zeros
  57. 54 0103 22 00 LDA #0
  58. 55 0105 10 93 01 STA BLIDOS ; colocando 0 na quantidade de bits lidos
  59. 56 0108 E4 POP ; salva primeiro byte no acumulador
  60. 57 0109 10 94 01 STA CURRENT ; salva numero que vai ser analisado
  61. 58 010C ZEROLEBIT:
  62. 59 010C 20 94 01 LDA CURRENT ; carrega numero que vai ser analisado
  63. 60 010F 74 SHR ; faz shift para direita (se for 0, não vai acender carry)
  64. 61 0110 10 94 01 STA CURRENT ; salva numero depois do shift
  65. 62 0113 B4 44 01 JNC INCZERO ; incrementa o contador ZEROS se não tiver carry
  66. 63 0116 ZINCRET:
  67. 64 0116 22 01 LDA #1
  68. 65 0118 30 93 01 ADD BLIDOS ; incrementa 1 em BLIDOS
  69. 66 011B 10 93 01 STA BLIDOS ; salva em BLIDOS
  70. 67 011E 22 08 LDA #8 ; carrega 8 no acumulador
  71. 68 0120 44 93 01 XOR BLIDOS ; compara 8 com B_LIDOS para acender as flags
  72. 69 0123 A4 0C 01 JNZ ZEROLEBIT ; se B_LIDOS nao for igual a 8, ainda tem bits para ler
  73. 70 ; caso contrario, vai para comparação de bytes lidos
  74. 71 0126 22 01 LDA #1 ; carrega 1 no acc
  75. 72 0128 30 92 01 ADD LIDOS ; soma 1 a LIDOS
  76. 73 012B 10 92 01 STA LIDOS ; salva em LIDOS: incrementa 1 em LIDOS
  77. 74 012E 22 04 LDA #4 ; 32 bits em bytes
  78. 75 0130 44 92 01 XOR LIDOS ; compara 4 com a quantidade de bytes lidos
  79. 76 0133 A0 4F 01 JZ FIM ; se lidos == 4, acaba o programa
  80. 77 0136 80 03 01 JMP ZERO ; lê proximo byte
  81. 78
  82. 79 0139 INCUM: ; rotina para incrementar contador UNS
  83. 80 0139 22 01 LDA #1
  84. 81 013B 30 91 01 ADD UNS
  85. 82 013E 10 91 01 STA UNS
  86. 83 0141 80 E0 00 JMP UMINCRET
  87. 84
  88. 85 0144 INCZERO: ; rotina para incrementar contador ZEROS
  89. 86 0144 22 01 LDA #1
  90. 87 0146 30 90 01 ADD ZEROS
  91. 88 0149 10 90 01 STA ZEROS
  92. 89 014C 80 16 01 JMP ZINCRET
  93. 90
  94. 91 014F FIM:
  95. 92 014F FC HLT
  96. 93 END 0
  97. 94
  98. 95
  99. 96 ORG 100
  100. 97 0064 0066 P: DW A
  101. 98 0066 FE FE FF ... A: DB 254, 254, 255, 255
  102. 99
  103. 100 ORG 0
  104. 101 0000 MAIN:
  105. 102 0000 22 00 LDA #0 ; quero calcular quantidade de 1
  106. 103 0002 24 64 00 LDS P ; aponta sp pra P
  107. 104 0005 80 C8 00 JMP ContaUnsZeros ; pula pra rotina
  108.  
  109. Listagem da tabela de símbolos
  110.  
  111. Símbolo Linha Endereço
  112. A 97 0066
  113. BLIDOS 15 0193
  114. ContaUnsZeros 19 00C8
  115. CURRENT 16 0194
  116. FIM 90 014F
  117. INCUM 78 0139
  118. INCZERO 84 0144
  119. LIDOS 14 0192
  120. MAIN 100 0000
  121. P 96 0064
  122. UM 25 00CD
  123. UMINCRET 35 00E0
  124. UMLEBIT 30 00D6
  125. UNS 13 0191
  126. ZERO 52 0103
  127. ZEROLEBIT 57 010C
  128. ZEROS 12 0190
  129. ZINCRET 62 0116
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement