------------------------------------------------------------------------------------------------------------------------------------- -- Exemplo de um arquivo de entrada de dados. -- -- Um comentario tem inicio com '--' ou apos a coluna 20 -- -- A primeira coluna contem o endereco de um dado e a segunda coluna a instrucao. -- -- Tome cuidado com nas instrucoes que ocupam duas posicoes de memoria consecutivas como: 'LDmS,mm', 'Jump,mm' -- Nestes casos, nao esqueca de reservar uma posicao de memoria logo apos a instrucao para que o dado seja armazenado. -- -- Dados num endereco podem ser identificados na forma: Endereco H#valor. Note: somente na base hexadecimal e' permitida -- ------------------------------------------------------------------------------------------------------------------------------------- -- Programa exemplo: soma de valores de 16 bits -- Chamada da subrotina: -- Posicoes de memoria: A0 = dado_a_H (8 bits mais significativos) A1 = dado_a_L (8 bits menos significativos) -- Posicoes de memoria: A2 = dado_b_H (8 bits mais significativos) A3 = dado_b_L (8 bits menos significativos) -- Posicoes de memoria: AE = resultado (8 bits mais significativos) AF = resultado (8 bits menos significativos) -- -- Pseudo-codigo: -- Trasfere dado_b_H para rascunho, posicao A4 -- Soma: posicao AF <= dado_a_L + dado_b_L -- Se Carry: posicao A4 <= posicao A4 +1 -- Soma: posicao AE <= posicao A4 + dado_b_H -- -- Posicoes de memoria empregadas: -- A0 dado_a_H (8 bits mais significativos) -- A1 dado_a_L (8 bits menos significativos) -- A2 dado_b_H (8 bits mais significativos) -- A3 dado_b_L (8 bits menos significativos) -- AD rascunho -- AE resultado (8 bits mais significativos) -- AF resultado (8 bits menos significativos) ------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------- -- Prepara o ponteiro da pilha e pagina dos registradores ------------------------------------------------------------------------------------------------------- 00 LDmS,FF -- Sp <= FF (inicia o ponteiro de pilha com valor FF) 01 02 LDmP,A -- Pg <= A (inicia o registrador de pagina com valor A) 03 Call,0A (chama subrotina de soma) 04 05 Halt -- (fim do programa) ------------------------------------------------------------------------------------------------------- -- Subrotina de Soma de dois numeros de 16 bits ------------------------------------------------------------------------------------------------------- -- Transfere dado_b_H para posicao de rascunho A4 0A LDdA,2 -- Acc <= [A2] (Acc <= dado_b_H) 0B STdA,4 -- [A4] <= Acc ([A4] <= dado_b_H) -- Soma entre dado_a_L e dado_b_L 0C LDdA,1 0D ADdA,3 0E STdA,F -- ([AF] <= dado_a_L + dado_b_L) -- Se Carry, posicao A4 (que contem dado_b_H) e' incrementada 0F JP_C,20 10 -- Soma entre dado_a_H e dado_b_H e Carry 11 LDdA,0 12 ADdA,4 13 STdA,E -- ([AE] <= dado_a_H + dado_b_H + Carry) 14 Retn -- (Fim da subrotina) -- Incremento de dado_b_H devido ao Carry 20 LDmA,01 -- Acc <= 01 (Valor do Carry a ser adcionado a dado_b_H) 21 22 ADdA,4 -- (([A4] <= dado_b_H + Carry) 23 STdA,4 24 Jump,11 -- (Retorna a operacao de soma) ------------------------------------------------------------------------------------------------------------ -- Exemplos de dados para soma -- (+8191) + (+255) = (+12286) -- (1FFF + 0FFF) = 2FFE A0 H#1F -- dado_a_H (8 bits mais significativos) A1 H#FF -- dado_a_L (8 bits menos significativos) A2 H#0F -- dado_b_H (8 bits mais significativos) A3 H#FF -- dado_b_L (8 bits menos significativo -- (+255) + (+20487) = (+20742) -- (00FF + 5007) = 5106 -- A0 H#00 -- dado_a_H (8 bits mais significativos) -- A1 H#FF -- dado_a_L (8 bits menos significativos) -- A2 H#50 -- dado_b_H (8 bits mais significativos) -- A3 H#07 -- dado_b_L (8 bits menos significativos) -- (0) + (0) = (0) -- (0000 + 0000) = 0000 -- A0 H#F0 -- dado_a_H (8 bits mais significativos) -- A1 H#01 -- dado_a_L (8 bits menos significativos) -- A2 H#0F -- dado_b_H (8 bits mais significativos) -- A3 H#FF -- dado_b_L (8 bits menos significativos) -- (-4095) + (+4095) = (0) -- (F001 + 0FFF) = 0000 -- A0 H#F0 -- dado_a_H (8 bits mais significativos) -- A1 H#01 -- dado_a_L (8 bits menos significativos) -- A2 H#0F -- dado_b_H (8 bits mais significativos) -- A3 H#FF -- dado_b_L (8 bits menos significativos) -- (-1) + (-1) = (-2) -- (FFFF + FFFF) = FFFE -- A0 H#FF -- dado_a_H (8 bits mais significativos) -- A1 H#FF -- dado_a_L (8 bits menos significativos) -- A2 H#FF -- dado_b_H (8 bits mais significativos) -- A3 H#FF -- dado_b_L (8 bits menos significativos) -- (-1) + (+1) = (0) -- (FFFF + 0001) = 0000 -- A0 H#FF -- dado_a_H (8 bits mais significativos) -- A1 H#FF -- dado_a_L (8 bits menos significativos) -- A2 H#00 -- dado_b_H (8 bits mais significativos) -- A3 H#01 -- dado_b_L (8 bits menos significativos) -- (22166) + (-26779) = (-4643) -- (5678 + 9765) = EDDD -- A0 H#56 -- dado_a_H (8 bits mais significativos) -- A1 H#78 -- dado_a_L (8 bits menos significativos) -- A2 H#97 -- dado_b_H (8 bits mais significativos) -- A3 H#65 -- dado_b_L (8 bits menos significativos) -- -- (5007 + 00FF)=5106 -- A0 H#50 -- dado_a_H (8 bits mais significativos) -- A1 H#07 -- dado_a_L (8 bits menos significativos) -- A2 H#00 -- dado_b_H (8 bits mais significativos) -- A3 H#FF -- dado_b_L (8 bits menos significativos) -- (+4095) + (+1) = 4096 -- (0FFF + 0001)= 1000 -- A0 H#0F -- dado_a_H (8 bits mais significativos) -- A1 H#FF -- dado_a_L (8 bits menos significativos) -- A2 H#00 -- dado_b_H (8 bits mais significativos) -- A3 H#01 -- dado_b_L (8 bits menos significativos) -- (0) + (0) = (0) -- (0000 + 0000) = 0000 -- A0 H#00 -- dado_a_H (8 bits mais significativos) -- A1 H#00 -- dado_a_L (8 bits menos significativos) -- A2 H#00 -- dado_b_H (8 bits mais significativos) -- A3 H#00 -- dado_b_L (8 bits menos significativos)