@BASE equ $ ; 1. 4 INSTRUÇÕES: ; == = ========== ILM equ 0 + IEM equ 4000H + ISB equ 8000H + IDNP equ 0C000H + LM equ DW EM equ DW IEM SB equ DW ISB DNP equ DW IDNP ; 2. 6 DIRETIVAS: ; == = ========= INI equ org 2* ; 1. inicio IGU equ ; 2. igual VAL equ DW ; 3. valor VALC equ DB ; 4. valor de cadeia de caracteres COMPPAR equ even ; 5. completa o par de caracteres FIM equ END ; 6. fim do programa ; 3. 11 OPERANDOS: ; == == ========= Aqui equ <(( $ - @BASE ) / 2)> Zero equ 0 Um equ 1 Dois equ 2 Tres equ 3 Sete equ 4 Quinze equ 5 H8000 equ 6 HFFFF equ 7 SAI equ 3FFEH ; Saida ENT equ 3FFFH ; Entrada ; 4. MACROS BÁSICAS: ; == ====== ======= INV equ SB HFFFF; 1.Inverte: T = FFFF - T = T\, nunca pede emprestado NGT equ SB Zero ; 2.Negativa: T = 0 - T = -T, Não pede emprestado se T for 0 PARASNP equ DNP Aqui; 3.Para o processador se não pede emprestado CP macro D,F ; 4.Copia F para D: T = F, Pede emprestado não é alterado LM F EM D endm SM macro Op ; 5.Soma: T = T + OP, Não pede emprestado se T era 0 ou der vai um NGT ; T = -T SB Op ; T = OP - ( -T ) = OP + T endm ; Não pede emprestado se T era 0 ou der vai um SUC macro OP ; 6.Sucessor: T = OP + 1, não pede emprestado se deu 0. LM HFFFF SB OP endm PRED macro OP ; 7.Predecessor: T = OP - 1, pede emprestado se OP era 0. LM Um SB OP endm NGTSB macro OP ; 8.Negativo da subtração: T = T - OP, não pede emprestado se der 0. SB OP ; T = OP - T NGT ; T = T - OP, não pede emprestado se T for zero endm INVDV macro Alvo ; 9.Inverte e desvia: ; T = T\, Não pede emprestado e desvia para Alvo INV ; T = T\, Não pede emprestado DNP Alvo endm NGTDVZ macro Alvo ; 10.Negativa e desvia se for zero: ; T = -T, Não pede emprestado se T for 0, Desvia se T for 0 NGT ; T = -T, não pede emprestado se T for 0. DNP Alvo endm ZRPEDE macro ; 11.Zera o pede emprestado: Preserva o T e zera o pede emprestado INV INV endm DV macro Alvo ; 12.Desvia: Preserva o T, não pede emprestado e desvia. INV INV DNP Alvo endm DDNZ macro OP,Alvo ; 13.Decrementa OP e desvia se não der zero: ; T = OP - 1, pede emprestado se OP era 0, desvia se OP não era 0. LM Um SB OP DNP Alvo endm DLE macro OP ; 14.Desloca para a esquerda: ; T = OP * 2, não pede emprestado se OP era 0 ou der vai um LM OP ; T = OP; NGT ; T = -OP; SB OP ; T = OP - ( -OP ) = OP * 2, endm ; não pede emprestado se OP era 0 ou der vai um DLED macro OP0,OP1 ; 15.Desloca para a esquerda duas palavras: Local DLE1 ; OP0 = OP0*2, OP1 = OP1*2 + vai, pede emprestado indefinido. LM OP0 ; T = OP0 NGT ; T = -OP0, não pede emprestado se T é 0 DNP DLE1 ; Desvia para DLE1 se OP0 é 0 SB OP0 ; T = OP0 - ( -OP0 ) = OP0*2, não pede emprestado se der vai um EM OP0 ; OP0 = T LM HFFFF ; T = 0FFFFH DNP DLE1 ; Desvia para DLE1 se houve vai um LM Zero ; T = 0 DLE1 equ Aqui SB OP1 ; T = OP1 - T NGT ; T = T - OP1 SB OP1 ; T = OP1 - ( T - OP1 ) = OP1*2 - T EM OP1 ; OP1 = T endm TROCA macro OP0,OP1,TMP ; 16.Troca os valores de OP0 e OP1 usando variavel TMP LM OP0 ; T recebe o valor original de OP0, não altera o pede EM TMP ; TMP = OP0 LM OP1 EM OP0 ; OP0 = OP1 LM TMP EM OP1 ; OP1 = TMP endm ; LM OP0 ; T = OP0 ; SB OP1 ; T = OP1 - OP0 ; EM OP0 ; OP0 = OP1 - OP0 ; SB OP1 ; T = OP1 - ( OP1 - OP0 ) = OP0 ; EM OP1 ; OP1 = OP0 ; NGT ; T = -OP0 ; SB OP0 ; T = ( OP1 - OP0 ) - ( -OP0 ) = OP1 ; EM OP0 ; OP0 = OP1 ; endm CHRTSNP macro Rotina ; 17.Chama rotina se não pede emprestado local InstRet ; As rotinas recebem no registrador T o código da LM InstRet ; instrução que permite realizar o retorno da rotina. DNP Rotina InstRet igu Aqui DNP Aqui+1 endm CHRT macro Rotina ; 18: Chama rotina INV ; T = T\, não pede emprestado CHRTSNP Rotina endm Rotina macro Nome,VR ; 19.Declaração de rotina: Nome equ Aqui ; VR é a variavel que guarda a instrução de retorno ou Retorno = VR ; o endereço da posição de memória seguinte à ocupada pela EM Retorno ; última instrução da rotina endm RETSNP equ DNP Retorno ; 20.Retorna de rotina se não pede emprestado EspSAI macro Final ; 21.Espera o final da última operação de saída. local Espera ; quando chegar ao final, desvia para Final Espera equ Aqui LM SAI NGTDVZ Final INVDV Espera endm EspENT macro ; 22.Espera o final da operação de entrada. local Espera ; retorna em T o caracter lido Espera equ Aqui LM ENT NGTDVZ Espera NGT endm REPETE macro CT,Opera; 23.Repete T+1 vezes uma operação local Denovo ; CT é a variável usada como contador Denovo equ Aqui ; Opera é a operação a ser repetida EM CT Opera DDNZ CT,Denovo endm ; 5. 7 ASCII ESPECIAIS: ; == = ===== ========= Bel = 7 BS = 8 Tab = 9 LF = 0AH FF = 0CH CR = 0DH BR = 20H