Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;---------------------------------------------------
- ; Programa para o primeiro trabalho de programação no SimuS
- ; Alunos: Daniel La Rubia Rolim
- ; Leonardo Ventura
- ; Maria Eduarda Lucena
- ;Grupo B
- ;---------------------------------------------------
- ;Digita a palavra no console e de ENTER!
- ORG 00300h
- TAM_SENTENCA: DB 0
- CONTADOR: DB 0
- PTR: DW 0
- PTR_VAR: DW 0
- PC: DW 0
- ACC: DW 0
- ;constantes de hardware
- CLEARB EQU 3
- BANNER EQU 2
- ;constantes de trap
- CONSOLEW EQU 2
- ;Sentenca palindromo
- PALINDROMO_POSITIVO: STR " - É PALINDROMO. ACC = "
- DB 0
- ;Sentenca nao palindromo
- PALINDROMO_NEGATIVO: STR " - NÃO É PALINDROMO. ACC = "
- DB 0
- DB 0
- SENTENCA: STR " "
- ORG 0
- INICIO:
- ;Trap pra digitar a sentenca
- LDA #3
- TRAP SENTENCA
- LDA #03
- PUSH
- LDA #SENTENCA
- PUSH
- JSR ROTINA
- ;Pula pra impressao
- JMP IMPRIME
- HLT
- ;Coloca o endereco de retorno na pilha
- FIM:
- LDA #1
- STA ACC
- LDA PC+1
- PUSH
- LDA PC
- PUSH
- RET
- ;Salva o endereco da proxima instrucao no PC
- ;e pego o endereco da sentenca, guardando em PTR_VAR e PTR
- ROTINA:
- POP
- STA PC
- POP
- STA PC+1
- POP
- STA PTR
- STA PTR_VAR
- POP
- STA PTR+1
- STA PTR_VAR+1
- LDA @PTR
- OR #0
- JZ FIM
- JMP COUNT
- RETURN:
- LDA PTR_VAR
- STA PTR
- LDA PTR_VAR
- ADD TAM_SENTENCA
- SUB #1
- STA PTR_VAR
- ;Pula pra verificacar espaco em branco e pontuacoes
- JMP VERIFICA
- LDA PC+1
- PUSH
- LDA PC
- PUSH
- RET
- ;Conta o tamanho da sentenca
- COUNT:
- LDA @PTR
- OR #0
- JZ RETURN
- LDA TAM_SENTENCA
- ADD #1
- STA TAM_SENTENCA
- LDA PTR
- ADD #1
- STA PTR
- JMP COUNT
- ;Verificacao de espaco em branco e pontuacoes
- VERIFICA:
- RETURN_1:
- LDA @PTR_VAR
- SUB #020h ;verifica se é espaco em branco
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #021h ;verifica se é exclamação
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #022h ;verifica se é aspas dupla
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #023h ;verifica se é tralha
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #024h ;verifica se é $
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #025h ;verifica se é %
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #026h ;verifica se é &
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #027h ;verifica se é aspas simples
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #028h ;verifica se é (
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #029h ;verifica se é )
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #02Ah ;verifica se é *
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #02Bh ;verifica se é +
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #02Ch ;verifica se é ,
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #02Dh ;verifica se é -
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #02Eh ;verifica se é .
- JZ PULA_PTR_VAR
- LDA @PTR_VAR
- SUB #02Fh ;verifica se é /
- JZ PULA_PTR_VAR
- RETURN_2:
- LDA @PTR
- SUB #020h ;verifica se é espaco em branco
- JZ PULA_PTR
- LDA @PTR
- SUB #021h ;verifica se é exclamação
- JZ PULA_PTR
- LDA @PTR
- SUB #022h ;verifica se é aspas dupla
- JZ PULA_PTR
- LDA @PTR
- SUB #023h ;verifica se é tralha
- JZ PULA_PTR
- LDA @PTR
- SUB #024h ;verifica se é $
- JZ PULA_PTR
- LDA @PTR
- SUB #025h ;verifica se é %
- JZ PULA_PTR
- LDA @PTR
- SUB #026h ;verifica se é &
- JZ PULA_PTR
- LDA @PTR
- SUB #027h ;verifica se é aspas simples
- JZ PULA_PTR
- LDA @PTR
- SUB #028h ;verifica se é (
- JZ PULA_PTR
- LDA @PTR
- SUB #029h ;verifica se é )
- JZ PULA_PTR
- LDA @PTR
- SUB #02Ah ;verifica se é *
- JZ PULA_PTR
- LDA @PTR
- SUB #02Bh ;verifica se é +
- JZ PULA_PTR
- LDA @PTR
- SUB #02Ch ;verifica se é ,
- JZ PULA_PTR
- LDA @PTR
- SUB #02Dh ;verifica se é -
- JZ PULA_PTR
- LDA @PTR
- SUB #02Eh ;verifica se é .
- JZ PULA_PTR
- LDA @PTR
- SUB #02Fh ;verifica se é \
- JZ PULA_PTR
- JMP LOOP
- ;Loop que percorre a sentenca de tras pra frente
- LOOP:
- LDA TAM_SENTENCA
- ADD #0
- JZ FIM_2
- LDA TAM_SENTENCA
- SUB #1 ;Subtrai 1 posicao, voltando na sentenca
- STA TAM_SENTENCA
- LDA @PTR_VAR
- SUB @PTR
- JNZ FIM
- LDA PTR_VAR
- SUB #1
- STA PTR_VAR
- LDA PTR
- ADD #1
- STA PTR
- LDA TAM_SENTENCA
- ADD #0
- JZ FIM_2
- JMP VERIFICA
- FIM_1:
- LDA #0
- STA ACC
- LDA PC+1
- PUSH
- LDA PC
- PUSH
- RET
- FIM_2:
- LDA @PTR_VAR
- SUB @PTR
- JZ FIM_1
- LDA #1
- STA ACC
- LDA PC+1
- PUSH
- LDA PC
- PUSH
- RET
- PULA_PTR_VAR:
- LDA PTR_VAR
- SUB #1
- STA PTR_VAR
- LDA TAM_SENTENCA
- SUB #1
- STA TAM_SENTENCA
- JMP RETURN_1
- PULA_PTR:
- LDA PTR
- ADD #1
- STA PTR
- JMP RETURN_2
- ;Impressao
- IMPRIME:
- LDA PTR_VAR
- ADD #1
- STA PTR_VAR
- ;Loop da imprissao no console
- LOOP2:
- LDA @PTR_VAR
- OR #0
- JZ FINAL
- LDA #CONSOLEW
- TRAP @PTR_VAR
- LDA PTR_VAR
- ADD #1
- STA PTR_VAR
- JMP LOOP2
- FINAL:
- LDA ACC
- JZ FINAL_POSITIVO ;Caso positivo, pula pra impressao
- LDA #4
- TRAP PALINDROMO_NEGATIVO ;Caso negativo
- LDA ACC
- ADD #030H
- STA CONTADOR
- LDA #CONSOLEW
- TRAP CONTADOR
- HLT
- ;Impressao do caso palindromo
- FINAL_POSITIVO :
- LDA #4
- TRAP PALINDROMO_POSITIVO
- LDA ACC
- ADD #030H
- STA CONTADOR
- LDA #CONSOLEW
- TRAP CONTADOR
- HLT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement