Advertisement
Electgpl

8051 - Busca el Max el Min y sus direcciones

Jun 19th, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;-------------------------------------------------------------------------------------
  2. ;Programa que busca en una tabla de 200 registros, el valor máximo y el mínimo
  3. ;una vez encontrados, guarda el valor con su dirección en la tabla.            
  4. ;Archivo: calcMaxMin.s03
  5. ;Fecha de realización: 19/06/2017
  6. ;Autor: Sebastian Caccavallo - electgpl.blogspot.com.ar
  7. ;Modificación:
  8. ;-------------------------------------------------------------------------------------    
  9.             ORG     0000H           ;Dirección del origen del programa
  10.             JMP     SETUP           ;Salta al Inicio del programa    
  11. ;            
  12. CONT        EQU     50H             ;Reserva de dirección para el contador
  13. VALMAX      EQU     51H             ;Reserva de dirección para el valor máximo
  14. VALMIN      EQU     52H             ;Reserva de dirección para el valor mínimo
  15. DIRMAX      EQU     53H             ;Reserva de dirección para la dirección máxima
  16. DIRMIN      EQU     54H             ;Reserva de dirección para la dirección mínima
  17. ;                                  
  18. SETUP:      MOV     VALMAX,#0D      ;Variable de Valor Máximo inicial
  19.             MOV     VALMIN,#255D    ;Variable de Valor Mínimo inicial
  20.             MOV     DIRMAX,#0D      ;Variable donde se guardara la dirección
  21.             MOV     DIRMIN,#0D      ;Variable donde se guardara la dirección
  22. ;
  23. LOOP:       CALL    CARGA           ;Carga contador y puntero
  24.             CALL    BUSCMAX         ;Llama a la subrutina para buscar el máximo
  25.             CALL    CARGA           ;Carga contador y puntero
  26.             CALL    BUSCMIN         ;Llama a la subrutina para buscar el mínimo
  27.             SJMP    LOOP            ;Realiza el loop infinito  
  28. ;  
  29. CARGA:      MOV     R0,#60H         ;Cargamos el puntero de origen para la tabla  
  30.             MOV     CONT,#20D       ;Cargamos el contador con la cantidad de iteraciones
  31.             RET                     ;Retorno de la subrutina
  32. ;          
  33. BUSCMAX:    MOV     A,@R0           ;Cargamos el Acumulador con el valor apuntado por R0
  34.             SUBB    A,VALMAX        ;Calculamos A - VALMAX
  35.             JC      CARRY0          ;Si JC=1 (es menor), salta a Carry
  36.             MOV     VALMAX,@R0      ;Si JC=0 (es mayor), lo guarda en VALMAX
  37.             MOV     DIRMAX,R0       ;Al mismo tiempo guarda la dirección en DIRMAX
  38. CARRY0:     INC     R0              ;Incrementa valor del puntero en la tabla
  39.             DJNZ    CONT,BUSCMAX    ;Realiza las iteraciones preestablecidas
  40.             RET                     ;Retorno de la subrutina  
  41. ;
  42. BUSCMIN:    MOV     A,@R0           ;Cargamos el Acumulador con el valor apuntado por R0
  43.             SUBB    A,VALMIN        ;Calculamos A - VALMIN
  44.             JNC     CARRY1          ;Si JC=0 (es mayor), salta a Carry
  45.             MOV     VALMIN,@R0      ;Si JC=1 (es menor), lo guarda en VALMIN
  46.             MOV     DIRMIN,R0       ;Al mismo tiempo guarda la dirección en DIRMIN
  47. CARRY1:     INC     R0              ;Incrementa valor del puntero en la tabla
  48.             DJNZ    CONT,BUSCMIN    ;Realiza las iteraciones preestablecidas
  49.             RET                     ;Retorno de la subrutina
  50. ;
  51.             END                     ;Fin del programa
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement