Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Ruben Calderon Corchado - NIUB: 16257463
- ; Re-avaluacio practica juliol /14
- ; Nota: En aquest arxiu s'han obviat els accents i dieresi de manera expresa per evitar
- ; incompatibilitats de codificacio.
- .data 50h
- nombres: db 0,0 ; Aqui es guardaran els dos operands
- diferencia: db 0 ; Aqui es guarda la diferencia en cas de ser positiva
- diferenciapos: db 0 ; Aqui es guarda la diferencia en cas de ser negativa
- .org 100h
- lxi h, E000h ; HL controlaran la sortida per pantalla
- lxi b,nombres ; B controlara el vector amb els operands
- loop:
- jmp loop ; Bucle infinit a l'espera de interrupcions de teclat
- primer: ; subrutina que imprimeix el primer nombre i el signe '-'
- inx b ; incrementem b
- inx h ; incrementem h per apuntar a la seguent posicio a la pantalla
- mvi a,2Dh ; carreguem el signe - a l'Acumulador
- mov M,a ; l'imprimim per pantalla
- inx h ; incrementem h de nou per apuntar a la següent posicio a la pantalla
- jmp loop ; saltem al bucle infinit per esperar a la següent interrupcio
- segon: ; subrutina que imprimeix el segon operand i el signe '='
- inx b ; incrementem b
- inx h ; incrementem h per apuntar a la següent posicio a la pantalla
- mvi a,3Dh ; carreguem el signe = a l'Acumulador
- mov M,a ; l'imprimim per pantalla
- inx h ; incrementem h per apuntar a la seguent posicio a la pantalla
- call resultat ; Truquem a 'resultat' per obtenir la diferencia dels 2 nombres
- ret
- nombre:
- sui 30h ; li restem 30h per obtenir el valor real - no el seu codi ASCII -
- stax b ; el guardem al vector dels operands
- ret
- resultat:
- lxi b,nombres ;Inicialitzo BC per apuntar a la primera posicio de nombres
- inx b ; incremento BC per apuntar a la segona posicio del vector
- ldax b ; carrego el segon valor de 'nombres' a l'Acumulador
- mov d,a ; el moc a D
- dcx b ; decremento b per apuntar a la posicio anterior
- ldax b ; carrego el segon valor de 'nombres' a l'Acumulador
- sub d ; li resto D
- sta diferencia ; guardo la diferencia
- cm ca1 ; si la diferencia es menor que 0 treurem el seu Ca2
- adi 30h ; Si no, li sumem 30h per obtenir el seu codi ASCII
- mov M,a ; i l'imprimim per pantalla
- inx h ; incrementem HL per apuntar a la següent posicio a la pantalla
- ret
- ca1:
- mvi d,FFh ; mascara per obtenir el Ca1 del nombre negatiu
- xra d ; fem un XOR amb FF per obtenir el Ca1
- adi 1 ; li sumem 1 per obtenir el seu Ca2
- sta diferenciapos ; guardem el resultat a memoria
- mvi a,2Dh ; Carreguem el signe '-'
- mov M,a ; i l'imprimim per pantalla
- inx h ; incrementem H per anar a la següent posicio
- lda diferenciapos ; carreguem el valor absolut que hem guardat abans
- adi 30h ; li sumem 30h per obtenir el seu codi ASCII
- mov M,a ; i ho imprimim per pantalla
- lxi h,E000h ; tornem a començar
- jmp loop
- .org 24h
- in 00h ; Guardem en A el valor ASCII de la tecla pitjada
- cpi 3Dh ; el comparem amb el signe '='
- jz segon ; si es el signe = anem a la subrutina segon
- cpi 2Dh ; el comparem amb el signe '-'
- jz primer ; si es el signe -, anem a la subrutina primer
- mov M,a ; si es un nombre l'imprimim per pantalla
- call nombre ; trucada a la subrutina nombre per guardar el seu valor real
- cpi 0 ; Aquesta comparacio evita que no s'incrementi la posicio
- jz notecla ; on apunten HL
- notecla:
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement