/* * Calculadora.asm * * Created: 10/01/2017 12:27:17 * Author: Javier */ .include "m164Pde.inc" .de au!r16 #$eino varia%les a usar en el &ro'rama .de num1r17 .de num2r1( .de %otonr1) .de %otonhr20 .de ante24 .de numero22 .de conta2+ .de tem&or2, .de au!226 .de multi2) .de suma2( .de resta27 .dse' -A: .-3 1# es&acio reservado &ara el numero %inario en hi'h 5 lo -A: .-3 1 -C$0: .-3 1 # miles -C$1: .-3 1 # centenas -C$2: .-3 1 # decenas -C$+: .-3 1 # unidades $80: .-3 1 # e9uivalente en 7 se' de las decenas $81: .-3 1 #es&acio reservado &ara cada di'ito en el dis&la5 $82: .-3 1 $8+: .-3 1 tecla: .-3 1 # a tecla &resionada .cse' .or' 0!00 0!00 #donde #donde em&ie em&iea a el &ro' &ro'rama rama en la direc direccio cion n 0!00 0!00 inici inicio: o: #eti #eti9ue 9ueta ta &ar &ara a conoc conocer er el el inic inicio io del del &ro &ro'ra 'rama ma o la %ase %ase del del mismo mismo ldi au!;0%011111111 out ddra;au! // Coni'uro el &uerto A com au! out &orta;au! ldi au!;0%00000000 out ddr%;au! //&uerto - como entrada com au! out &ort%;au! ser au! // el res'itro r16 se car'o con ceros out ddrc;au! //&uerto C se coni'uro como salida PAA < C3< com au! out &ortc;au! ldi au!;0%00001111 out ddrd;au! // &uerto $ como entrada com au! out &ortd;au! /*************8AA3= < P> >P<***********/ in au!;mcucr andi au!;0%11101111 out mcucr;au! /*********************************************/
ldi out ldi out
au!;hi'h?ramend@ s&h;au! #inicialio el &untero de la ram hi'h au!;lo?ramend@ s&l;au! # nicialio el &untero de la ram lo
clr %oton #se &rocede a lim&iar los re'istros &ara 9ue no e!ista nin'un contenido %asura en los mismos clr %otonh clr au! clr num1 clr num2 otronum: # eti9ueta otronum ldi ante;16 #car'a indirecta en au! num: sts -A;%oton sts %inarioh;%otonh CA --C$ # AB A A >3A > CD3 $ -A A -C$ CA -C$7<8B3< # AB A A >3A > CD3 >DA3 7 <8B3< CA -A$$
3A > A=A -A$ call teclado lds au!;tecla c&i au!;16 #com&aracion inmediata %re9 otronum # si no se &resiona una tecla c&i au!;10 #com&aracion inmediata %re9 multi&licar # si se &resiona la tecla de multi&licar c&i au!;1+ #com&aracion inmediata %re9 sumar # si se &resiona la tecla de sumar c&i au!;14#com&aracion inmediata %re9 restar # si se &resiona la tecla de restar c&i au!;12#com&aracion inmediata %re9 %orrar # si se &resiona la tecla %orrar c&i au!;11#com&aracion inmediata %re9 res&uesta # si se &resiona la tecla de i'ual c&i au!;17#com&aracion inmediata %rsh num # cual9uier numero ma5or c& au!;ante#com&aracion entre re'istros au! 5 ante %rne dierente # si es la &rimera ve 9ue se &resiona un n� mero rEm& num #salto incondicional a num %orrar: # se %orra todo clr %oton clr %otonh clr num1 clr num2 clr numero rEm& num#salto incondicional a num dierente: # se 'uarda el nummero &resionado mov ante;au! ldi au!;10 c&i numero;1 %re9 lao2 mul num1;au! add 0;ante mov au!;0 c&i au!;100 %rsh num
mov %oton;0 mov num1;0 rEm& num#salto incondicional a num lao2: # se 'uarda el se'undo numero &resionado mul num2;au! add 0;ante mov au!;0 c&i au!;100 %rsh num mov %oton;0 mov num2;%oton rEm& num#salto incondicional a num multi&licar: # se multi&lican los dos n� meros in'resados ldi numero;1 clr %oton # lim&io varios re'istros &ara cum&lir ciertas condiciones clr tem&o ldi tem&o;120 rEm& num #salto incondicional a num sumar: # se suman los dos n� meros in'resados ldi numero;1 clr %oton# lim&io varios re'istros &ara cum&lir ciertas condiciones clr tem&o ldi tem&o;122 rEm& num#salto incondicional a num restar: # se suman los dos n� meros in'resados ldi numero;1 clr %oton# lim&io varios re'istros &ara cum&lir ciertas condiciones clr tem&o ldi tem&o;124 rEm& num #salto incondicional a num res&uesta:# a9ui com&aramos los re'istros &ara continuar con la res&ectiva o&eracion se'un lo 9ue se &resione en nuestra calculadora c&i tem&o;120#com&aramos inmediatamente %re9 o&eracion#si es i'ual salta hacia o&eracion caso contrario continua con la si'uiente instruccion c&i tem&o;122# com&aramos inmediatamente %re9 o&eracion1#si es i'ual salta hacia o&eracion caso contrario continua con la si'uiente instruccion c&i tem&o;124#com&aramos inmediatamente %re9 o&eracion2#si es i'ual salta hacia o&eracion caso contrario continua con la si'uiente instruccion o&eracion: # 3A > CD3 $ -A A -C$ CA -C$7<8B3< # AB A A >3A > CD3 >DA3 7 <8B3< CA -A$$3A > A=A -A$ call teclado#llamo a la rutina del teclado lds au!;tecla
c&i au!;12 %re9 %orrar1 rEm& i'ual1 o&eracion1: # 3A > CD3 $ -A A -C$ CA -C$7<8B3< # AB A A >3A > CD3 >DA3 7 <8B3< CA -A$$3A > A=A -A$ call teclado#llamo a la rutina del teclado lds au!;tecla c&i au!;12 %re9 %orrar1 rEm& i'ual2 %orrar1: rEm& %orrar
o&eracion2: mov ante;au!#movemos los valores a otro re'istro su% num1;num2#resta am%os re'istros clr num2#lim&ia el re'istro mov 0;num1#mueve el re'istro &ara acilitar su transormacion mov 1;num2#mueve el re'istro &ara acilitar su transormacion i'ual+: sts -A;0 sts %inarioh;1 CA --C$ # AB A A >3A > CD3 $ -A A -C$ CA -C$7<8B3< # AB A A >3A > CD3 >DA3 7 <8B3< CA -A$$
3A > A=A -A$ call teclado#llamo a la rutina del teclado lds au!;tecla c&i au!;12 %re9 %orrar1 rEm& i'ual+
/**********P8ABA > CD3 > >B -A -C$ ABACA A <AB***************/ # >B 3 > <3A 8>A$A$ -A -A #< $83< < 8>A$A� $<$ -C$0 A<3A -C$+ --C$: &ush r16 &ush r17 &ush r1( &ush r1) &ush r20 &ush r21 &ush !l
&ush !h &ush l &ush h #
/************P8ABA PAA C3A >DA3 7 <8B3<****/ -C$7<8B3<: P>< 16 P>< 17 /*******************PAA A< >$A$<********/ $ I;?-C$0@ $ I;8?-C$0@ $ 16;I // ->DA3 $ A< >$A$< ldi h;hi'h?ta%laGG1@ // a&unto a la direccion alta de la ta%la ldi l;lo?ta%laGG1@ // a&unto a la direccion %aEa de la ta%al add l;16 // u%ico el numero %uscado clr 16 // deEo vacio el re'istro l&m 16; // co&io el valor de la ta%la en el re'istro /* AA $- DA A A <AB*/ $ I;?$80@
$ I;8?$80@ <3 I;16 /**************************************************/ /*******************PAA A< $CA<********/ $ I;?-C$1@ $ I;8?-C$1@ $ 16;I // ->DA3 $ A< $CA< ldi h;hi'h?ta%laGG1@ // a&unto a la direccion alta de la ta%la ldi l;lo?ta%laGG1@ // a&unto a la direccion %aEa de la ta%al add l;16 // u%ico el numero %uscado clr 16 // deEo vacio el re'istro l&m 16; // co&io el valor de la ta%la en el re'istro /* AA $- DA A A <AB*/ $ I;?$81@ $ I;8?$81@ <3 I;16 /**************************************************/ /*******************PAA A< C3A<********/ $ I;?-C$2@ $ I;8?-C$2@ $ 16;I // ->DA3 $ A< C3A< ldi h;hi'h?ta%laGG1@ // a&unto a la direccion alta de la ta%la ldi l;lo?ta%laGG1@ // a&unto a la direccion %aEa de la ta%al add l;16 // u%ico el numero %uscado clr 16 // deEo vacio el re'istro l&m 16; // co&io el valor de la ta%la en el re'istro /* AA $- DA A A <AB*/ $ I;?$82@ $ I;8?$82@ <3 I;16 /**************************************************/ /*******************PAA < B<********/ $ I;?-C$+@ $ I;8?-C$+@ $ 16;I // ->DA3 $ < B< ldi h;hi'h?ta%laGG1@ // a&unto a la direccion alta de la ta%la ldi l;lo?ta%laGG1@ // a&unto a la direccion %aEa de la ta%al add l;16 // u%ico el numero %uscado clr 16 // deEo vacio el re'istro l&m 16; // co&io el valor de la ta%la en el re'istro /* AA $- DA A A <AB*/ $ I;?$8+@ $ I;8?$8+@ <3 I;16 /**************************************************/ PP 17 PP 16 3 ta%la: #'edc%a 'edc%a .d% 0%10111111;0%10000110 #0;1 .d% 0%11011011;0%11001111 #2;+ .d% 0%11100110;0%11101101 #4;,
.d% 0%11111101;0%10000111 #6;7 .d% 0%11111111;0%11101111 #(;) -A$$< 16 P>< 17 P>< 20 /***************D PB A< >$A$<*******/ $ I;?$80@ $ I;8?$80@ $ 16;I >3 P3A;16 $ 17;0-11110111 >3 P3C;17 # AC3D PB $
3 P3C;17 # APA8 3$< < $
3 P3A;16 $ 17;0-11111011 >3 P3C;17 # AC3D <8>$ $
3 P3C;17 # APA8 3$< < $
3 P3A;16 $ 17;0-11111101 >3 P3C;17 # AC3D 3C $
3 P3C;17 # APA8 3$< < $
3 P3A;16 $ 17;0-11111110 >3 P3C;17 # AC3D C>A3 $
3 P3C;17 # APA8 3$< < $
$A: $
20;2,,
1: $C 20 P P - 1 3
3CA$: &ush r16 in r16;sre' &ush r16 &ush r17 ldi r17;16 ldi r16;0%11111110# ten'o 9ue correr un cero en el las ilas &ara ver 9ue a&lasto out &ortd;r16 s%is &ind;4# al a&lastar si coinciden &or el %arrido se &one un cero en el &in 4 si es ldi r17;1 s%is &ind;, ldi r17;2 s%is &ind;6 ldi r17;+ s%is &ind;7 ldi r17;( ldi out s%is ldi s%is ldi s%is ldi s%is ldi
r16;0%11111101 &ortd;r16 &ind;4 r17;4 &ind;, r17;, &ind;6 r17;6 &ind;7 r17;10
ldi out s%is ldi s%is ldi s%is ldi s%is ldi
r16;0%1111011 &ortd;r16 &ind;4 r17;7 &ind;, r17;( &ind;6 r17;) &ind;7 r17;14
ldi out s%is ldi s%is ldi s%is ldi s%is ldi
r16;0%11110111 &ortd;r16 &ind;4 r17;12 &ind;, r17;0 &ind;6 r17;11 &ind;7 r17;1+
sts tecla;r17 &o& r17 &o& r16 out sre';r16 &o& r16 ret