Advertisement
rcaldeco7

Reavaluacio practic IO 2013-14 RUBEN

Jul 10th, 2014
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Ruben Calderon Corchado - NIUB: 16257463
  2. ; Re-avaluacio practica juliol /14
  3. ; Nota: En aquest arxiu s'han obviat els accents i dieresi de manera expresa per evitar
  4. ;   incompatibilitats de codificacio.
  5.  
  6. .data 50h
  7.     nombres: db 0,0     ; Aqui es guardaran els dos operands           
  8.     diferencia: db 0        ; Aqui es guarda la diferencia en cas de ser positiva
  9.     diferenciapos: db 0 ; Aqui es guarda la diferencia en cas de ser negativa
  10. .org 100h
  11.     lxi h, E000h    ; HL controlaran la sortida per pantalla
  12.     lxi b,nombres   ; B controlara el vector amb els operands  
  13. loop:
  14.     jmp loop    ; Bucle infinit a l'espera de interrupcions de teclat
  15.  
  16. primer:     ; subrutina que imprimeix el primer nombre i el signe '-'
  17.     inx b       ; incrementem b
  18.     inx h       ; incrementem h per apuntar a la seguent posicio a la pantalla
  19.     mvi a,2Dh   ; carreguem el signe - a l'Acumulador
  20.     mov M,a ; l'imprimim per pantalla
  21.     inx h       ; incrementem h de nou per apuntar a la següent posicio a la pantalla
  22.     jmp loop    ; saltem al bucle infinit per esperar a la següent interrupcio
  23.  
  24. segon:      ; subrutina que imprimeix el segon operand i el signe '='
  25.     inx b       ; incrementem b
  26.     inx h       ; incrementem h per apuntar a la següent posicio a la pantalla
  27.     mvi a,3Dh   ; carreguem el signe = a l'Acumulador
  28.     mov M,a ; l'imprimim per pantalla
  29.     inx h       ; incrementem h per apuntar a la seguent posicio a la pantalla
  30.     call resultat   ; Truquem a 'resultat' per obtenir la diferencia dels 2 nombres
  31.     ret
  32.  
  33. nombre:
  34.     sui 30h ; li restem 30h per obtenir el valor real - no el seu codi ASCII -
  35.     stax b  ; el guardem al vector dels operands
  36.     ret
  37.  
  38. resultat:
  39.     lxi b,nombres   ;Inicialitzo BC per apuntar a la primera posicio de nombres
  40.     inx b           ; incremento BC per apuntar a la segona posicio del vector
  41.     ldax b      ; carrego el segon valor de 'nombres' a l'Acumulador
  42.     mov d,a     ; el moc a D
  43.     dcx b           ; decremento b per apuntar a la posicio anterior
  44.     ldax b      ; carrego el segon valor de 'nombres' a l'Acumulador
  45.     sub d           ; li resto D
  46.     sta diferencia  ; guardo la diferencia
  47.     cm ca1      ; si la diferencia es menor que 0 treurem el seu Ca2
  48.     adi 30h     ; Si no, li sumem 30h per obtenir el seu codi ASCII
  49.     mov M,a     ; i l'imprimim per pantalla
  50.     inx h           ; incrementem HL per apuntar a la següent posicio a la pantalla
  51.     ret
  52.  
  53. ca1:
  54.     mvi d,FFh       ; mascara per obtenir el Ca1 del nombre negatiu
  55.     xra d           ; fem un XOR amb FF per obtenir el Ca1
  56.     adi 1           ; li sumem 1 per obtenir el seu Ca2
  57.     sta diferenciapos   ; guardem el resultat a memoria
  58.     mvi a,2Dh       ; Carreguem el signe '-'
  59.     mov M,a     ; i l'imprimim per pantalla
  60.     inx h           ; incrementem H per anar a la següent posicio
  61.     lda diferenciapos   ; carreguem el valor absolut que hem guardat abans
  62.     adi 30h     ; li sumem 30h per obtenir el seu codi ASCII
  63.     mov M,a     ; i ho imprimim per pantalla
  64.     lxi h,E000h     ; tornem a començar
  65.     jmp loop
  66.    
  67.    
  68.    
  69. .org 24h
  70.     in 00h ; Guardem en A el valor ASCII de la tecla pitjada
  71.    
  72.     cpi 3Dh ; el comparem amb el signe '='
  73.     jz segon    ; si es el signe = anem a la subrutina segon   
  74.     cpi 2Dh     ; el comparem amb el signe '-'
  75.     jz primer   ; si es el signe -, anem a la subrutina primer
  76.     mov M,a ; si es un nombre l'imprimim per pantalla
  77.     call nombre ; trucada a la subrutina nombre per guardar el seu valor real
  78.    
  79.     cpi 0       ; Aquesta comparacio evita que no s'incrementi la posicio      
  80.     jz notecla  ; on apunten HL
  81. notecla:
  82.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement