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