* 1 *NGT equ SB Zero ; T = 0 - T, não pede emprestado se T for 0 * 2 *INV equ SB HFFFF; T = T\, não pede emprestado * 3 * 3FF0: * 4 *VarROM = 03FF0H ; Variaveis usadas pelo programa que está na ROM 3FF0: * 5 *OP0 = VarROM 3FF1: * 6 *OP1 = VarROM+1 3FF2: * 7 *Conta = VarROM+2 3FF3: * 8 *Apt = VarROM+3 3FF4: * 9 *Ret0 = VarROM+4 3FF5: * 10 *Ret1 = VarRom+5 3FF6: * 11 *Ret2 = VarRom+6 * 12 * 3FFC: * 13 *Conta1 = 3FFCH 3FFD: * 14 *Conta2 = 3FFDH * 15 * * 16 * INI 0 ; Começa no endereço 0 * 17 * 0000: 0000 * 18 * VAL 0, 1, 2, 3 ; Zero, Um, Dois e Tres 0001: 0001 0002: 0002 0003: 0003 0004: 0007 * 19 * VAL 7, 15, 8000H, 0FFFFH ; Sete, Quinze, H8000 e HFFFF 0005: 000F 0006: 8000 0007: FFFF * 20 * 0008: * 21 *Princ = Aqui ; Programa principal * 22 * CP Apt,Cadeia ; Apt é o parâmetro da rotina 0008: 005B *1 23 * LM Cadeia 0009: 7FF3 *1 24 * EM Apt * 25 * CHRT EscCad 000A: 8007 *1 26 * INV ; SB HFFFF: T = T\, não pede emprestado *1 27 * CHRTSNP EscCad 000B: 000D *2 28 * LM Aqui+2 ; instrução que realiza o retorno da rotina. 000C: C024 *2 29 * DNP EscCad 000D: C00E *2 30 * DNP Aqui+1 000E: * 31 *EspTec = Aqui 000E: 3FFF * 32 * LM ENT ; T = ENT 000F: 8000 * 33 * SB Zero ; T = 0 - ENT, pede emprestado se ENT nao for 0 0010: C00E * 34 * DNP EspTec ; Se nao pede emprestado ( ENT for 0 ), valta p/ EspTec 0011: 8000 * 35 * SB Zero ; T = 0 - ( 0 - ENT ) = ENT, pede emprestado 0012: 7FF0 * 36 * EM OP0 ; OP0 = ENT * 37 * CP ENT,Zero; ENT = 0 0013: 0000 *1 38 * LM Zero 0014: 7FFF *1 39 * EM ENT * 40 * CP SAI,OP0 ; Esvcreve o caracter lido 0015: 3FF0 *1 41 * LM OP0 0016: 7FFE *1 42 * EM SAI 0017: 0007 * 43 * LM HFFFF 0018: 7FFC * 44 * EM Conta1 ; Conta1 = 0FFFFH 0019: 7FFD * 45 * EM Conta2 ; Conta2 = 0FFFFH 001A: * 46 *Inicio = Aqui 001A: 0001 * 47 * LM Um ; T = 1 001B: BFFC * 48 * SB Conta1 ; T = Conta1 - 1, Pede emprestado se Conta1 era 0 001C: 7FFC * 49 * EM Conta1 ; Conta1 = T 001D: C01A * 50 * DNP Inicio ; Volta para inicio se não pede emprestado 001E: 0001 * 51 * LM Um ; T = 1 001F: BFFD * 52 * SB Conta2 ; T = Conta2 - 1, Pede emprestado se Conta2 era 0 0020: 7FFD * 53 * EM Conta2 ; Conta2 = T 0021: C01A * 54 * DNP Inicio ; Volta para inicio se não pede emprestado 0022: 8007 * 55 * INV ; SB HFFFF: T = T\, não pede emprestado 0023: C023 * 56 * DNP Aqui ; Se não pede emprestado, desvia para Aqui: Trava o processador * 57 * * 58 *RETSTZ macro * 59 * NGT ; SB 0: T = 0 - T, pede emprestado se T nao for 0 * 60 * RETSNP ; Retorna se nao pede emprestado ( T for 0 ) * 61 * NGT ; SB 0: T = 0 - ( 0 - T ) = T, pede emprestado * 62 * endm * 63 * * 64 * ROTINA EscCad,RET1 ; Rotina que escreve cadeia de caracteres. *1 65 *Retorno = RET1 0024: 7FF5 *1 66 * EM Retorno ; última instrução da rotina * 67 * CP Apt+1,Volta ; O endereço da cadeia deve estar em Apt! 0025: 002C *1 68 * LM Volta 0026: 7FF4 *1 69 * EM Apt+1 0027: * 70 *Escreve equ Aqui * 71 * EspSAI Apt ; Espera poder escrever, desvia para Apt *1 72 *Espera1 equ Aqui 0027: 3FFE *1 73 * LM SAI *1 74 * NGTDVZ Apt 0028: 8000 *2 75 * NGT ; SB 0: T = -T, não pede emprestado se T for 0. 0029: FFF3 *2 76 * DNP Apt *1 77 * INVDV Espera1 002A: 8007 *2 78 * INV ; SB HFFFF: T = T\, Não pede emprestado 002B: C027 *2 79 * DNP Espera1 002C: * 80 *Volta equ Aqui 002C: C02D * 81 * DNP Aqui+1 ; Volta para cá com o par de cacarteres * 82 * RETTZ ; retorna se o par de caracteres for zero. 002D: 8000 *1 83 * NGT ; SB 0: T = 0 - T, pede emprestado se T nao for 0 002E: FFF5 *1 84 * RETSNP ; Retorna se nao pede emprestado ( T for 0 ) 002F: 8000 *1 85 * NGT ; SB 0: T = 0 - ( 0 - T ) = T, pede emprestado 0030: 7FFE * 86 * EM SAI ; escreve o primeiro caracter do par 0031: 7FF0 * 87 * EM OP0 ; OP0 recebe o par de caracteres 0032: 0000 * 88 * LM Zero 0033: 7FF1 * 89 * EM Op1 ; OP1 recebe zero * 90 * CHRT DLED8 ; descloca OP1:OP0 para a esquerda 8 bits 0034: 8007 *1 91 * INV ; T = T\, não pede emprestado *1 92 * CHRTSNP DLED8 0035: 0037 *2 93 * LM Aqui+2 ; instrução que permite realizar o retorno da DLED8. 0036: C047 *2 94 * DNP DLED8 0037: C038 *2 95 * DNP Aqui+1 * 96 * EspSAI Esc1 ; Espera poder escrever, desvia para Esc1 * 97 *Espera2 equ Aqui 0038: 3FFE *1 98 * LM SAI *1 98 * NGTDVZ Esc1 0039: 8000 *2 100 * NGT ; SB 0: T = -T, não pede emprestado se T for 0. 003A: C03D *2 101 * DNP Esc1 *1 102 * INVDV Espera2 003B: 8007 *2 103 * INV ; SB 0: T = T\, Não pede emprestado 003C: C038 *2 104 * DNP Espera2 003D: * 105 *Esc1 equ Aqui 003D: 3FF1 * 106 * LM OP1 ; T = segundo caracter * 107 * RETTZ ; retorna se o segundo caracter do par for zero 003E: 8000 *1 108 * NGT ; SB 0: T = 0 - T, pede emprestado se T nao for 0 003F: FFF5 *1 109 * RETSNP ; Retorna se nao pede emprestado ( T for 0 ) 0040: 8000 *1 110 * NGT ; SB 0: T = 0 - ( 0 - T ) = T, pede emprestado 0041: 7FFE * 111 * EM SAI ; escreve o segundo caracter do par * 112 * SUC Apt ; T = Apt + 1, pede emprestado 0042: 0007 *1 113 * LM HFFFF 0043: BFF3 *1 114 * SB Apt 0044: 7FF3 * 115 * EM Apt ; 0045: 8007 * 116 * INV ; SB HFFFF: T = T\, não pede emprestado 0046: C027 * 117 * DNP Escreve ; volta para Escreve * 118 * * 119 * ROTINA DLED8,Ret2 ; Rotina que desloca OP0 e Op1 * 120 *Retorno = Ret2 ; para esquerda 8 bits. 0047: 7FF6 *1 121 * EM Retorno ; Ultima instrução da rotina 0048: 0004 * 122 * LM Sete ; T = 7 0049: * 123 *PrxDLE = Aqui 0049: 7FF2 * 124 * EM Conta ; Conta = T * 125 * DLED OP0,Op1 ; rola para a esquerda OP1:OP0 004A: 3FF0 *1 126 * LM OP0 ; T = OP0 004B: 8000 *1 127 * NGT ; SB 0: T = -OP0, não pede emprestado se T é 0 004C: C052 *1 128 * DNP DLE2 ; Desvia para DLE2 se OP0 é 0 004D: BFF0 *1 129 * SB OP0 ; T = OP0 - ( -OP0 ) = OP0*2, não pede emprestado se der vai um 004E: 7FF0 *1 130 * EM OP0 ; OP0 = T 004F: 0007 *1 131 * LM HFFFF ; T = 0FFFFH 0050: C052 *1 132 * DNP DLE2 ; Desvia para DLE2 se houve vai um 0051: 0000 *1 133 * LM Zero ; T = 0 *1 134 *DLE2 equ Aqui 0052: BFF1 *1 135 * SB Op1 ; T = Op1 - T 0053: 8000 *1 136 * NGT ; SB 0: T = T - Op1 0054: BFF1 *1 137 * SB Op1 ; T = Op1 - ( T - Op1 ) = Op1*2 - T 0055: 7FF1 *1 138 * EM Op1 ; Op1 = T * 139 * DDNZ Conta,PrxDLE ; T = Conta - 1, desvia para PrxDLE se conta não era 0 0056: 0001 *1 140 * LM Um 0057: BFF2 *1 141 * SB Conta 0058: C049 *1 142 * DNP PrxDLE * 143 * INVDV Retorno ; desvia para retorno. 0059: 8007 *1 144 * INV ; SB 0: T = T\, Não pede emprestado 005A: FFF6 *1 145 * DNP Retorno * 146 * 005B: * 147 *Cadeia equ Aqui 005B: 005C * 148 * VAL Aqui+1 005C: 0D07 * 149 * VALC BEL, CR, LF, 'Oi mundo ca', BS, '~o!', BEL, CR, LF 005D: 4F0A 005E: 2069 005F: 756D 0060: 646E 0061: 206F 0062: 6163 0063: 7E08 0064: 216F 0065: 0D07 0066: 090A * 150 * VALC Tab, Tab, 'Por favor tecle algo:', BEL, 0 0067: 5009 0068: 726F 0069: 6620 006A: 7661 006B: 726F 006C: 7420 006D: 6365 006E: 656C 006F: 6120 0070: 676C 0071: 3A6F 0072: 0007 * 151 * COMPPAR * 152 * * 153 * FIM