Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Controllo Luci - ACC_LUCI.asm

ACC_LUCI.asm

Caricato da: Totipianurese
Scarica il programma completo

  1. TITLE   8086 Code Template (for EXE file)
  2. ;       AUTHOR          Salvatore Ciotola
  3. ;       DATE            3/02/2009
  4. ;       VERSION         1.00
  5. ;       FILE            Accensione_luci_sensore
  6.  
  7. ; Directive to make EXE output:
  8.        #MAKE_EXE#
  9. ACQ     MACRO                       ; DICHIARAZIONE MACRO 'ACQ'
  10. ;************************************    
  11.          LEA    DX, MSG             ;
  12.          MOV    AH, 9               ;codice per far tornar a capo ad ogni inserimento
  13.          INT    21H                 ;
  14.          MOV    AH, 01h             ;
  15.          INT    21h                 ;ACQUISIZIONE 'A'
  16.          AND    AL, 0Fh             ;AGGIUSTO IL NIBBLE DI ZONA ASCII
  17.          SHL    AL, 1               ;SHIFTO A SINITRA
  18.          MOV    BL, AL              ;SALVO IL VALORE IN BL
  19.          INT    21h                 ;ACQUISIZIONE 'B'
  20.          AND    AL, 0Fh             ;AGGIUSTO IL NIBBLE DI ZONA ASCII
  21.          ADD    BL, AL              ;LA SEQUENZA DATA IN IN-PUT STA IN --> BL              
  22. ;************************************
  23.         ENDM                        ; FINE MACRO
  24.                                  
  25. DSEG    SEGMENT 'DATA'
  26.  
  27. MSG    DB ,0AH, 0DH,'$'
  28. MSG1   DB ,0AH, 0DH,'LUCE SPENTA $',0AH, 0DH,
  29. MSG2   DB ,0AH, 0DH,'LUCE ACCESA $',0AH, 0DH,
  30.  
  31. DSEG    ENDS
  32.  
  33. SSEG    SEGMENT STACK   'STACK'
  34.         DW      100h    DUP(?)
  35. SSEG    ENDS
  36.  
  37. CSEG    SEGMENT 'CODE'
  38.  
  39. ;*******************************************
  40.  
  41. START   PROC    FAR
  42.  
  43. ; Store return address to OS:
  44.     PUSH    DS
  45.     MOV     AX, 0
  46.     PUSH    AX
  47.  
  48. ; set segment registers:
  49.     MOV     AX, DSEG
  50.     MOV     DS, AX
  51.     MOV     ES, AX
  52. ;MY CODE *************************************
  53.           MOV      CL, 0
  54.           LEA      DX, MSG1      ;*  CARICA IN DX 'MSG1'
  55.           MOV      AH, 9         ; *        
  56.           INT      21H           ;*  STAMPA 'LUCE SPENTA' (MSG1)  
  57. INIZIO:   ACQ                    ; ACQ = CHIAMATA A MACRO
  58.           CMP      BL, 0         ; IF BL = 00
  59.           JE       LABEL
  60.           JMP      INIZIO
  61.          
  62. LABEL:    ACQ                    ; IN LABEL: E' STATO INSERITO PRECEDENTEMENTE '00'
  63.           CMP      BL, 1         ; IF  BL = 01
  64.           JE       LABEL1        ; SALTA SE BL = 01
  65.           CMP      BL, 00        ; IF  BL = 00
  66.           JE       LABEL
  67.           CMP      BL, 2         ; IF    BL = 10
  68.           JE       APP_S_US      ; SALTO APPOGGIO
  69.           JMP      INIZIO
  70.          
  71. LABEL1:   ACQ                    ; IN LABEL1 GIA E' STATO INSERITO PRECEDENTEMENTE '01'
  72.           CMP      BL, 3         ; IF  BL = 11
  73.           JE       LABEL2
  74.           CMP      BL, 1         ; IF  BL = 01
  75.           JE       LABEL1
  76.           CMP      BL, 0         ; IF  BL = 00
  77.           JE       LABEL
  78.           JMP      INIZIO
  79.          
  80. APP_SALTO:
  81.           JMP      LABEL          ;SALTO DI APPOGGIO DATO CHE IL SALTO DIRETTO E' TROPPO LUNGO
  82.          
  83. LABEL2:  ACQ                      ; IN LABEL2: E' STATO INSERITO PRECEDENTEMENTE '11'
  84.          CMP       BL, 2          ; IF  BL = 10
  85.          JE        LABEL3
  86.          CMP       BL, 3          ; IF  BL = 11
  87.          JE        LABEL2
  88.          CMP       BL, 1          ; IF  BL = 01
  89.          JE        LABEL1
  90.          CMP       BL, 00         ; IF  BL = 00
  91.          JE        APP_SALTO    
  92.          JMP       INIZIO                
  93.                    
  94. APP_S_US:
  95.          JMP       LABEL5         ; SALTO DI APPOGGIO
  96.          
  97.          
  98. LABEL3:  ACQ                      ; IN LABEL3: E' STATO INSERITO PRECEDENTEMENTE '10'
  99.          CMP       BL, 0          ; IF  BL = 00
  100.          JE        CONTA_RET
  101.          CMP       BL, 2          ; IF  BL = 10
  102.          JE        LABEL3
  103.          CMP       BL, 3          ; IF  BL = 11
  104.          JE        LABEL2
  105.          JMP       INIZIO
  106.          
  107. CONTA_RET:
  108.          INC       CL             ; INCREMENTA DI '1' SE E' AVVENUTA LA SEQUENZA DI ENTRATA
  109.          CMP       CL, 0          ; CONFRONTA CL CON '0' ZERO
  110.          JG        STAM_L_A       ; SE CL>0 SALTA A STAM_L_A
  111. STAM_L_S:LEA       DX, MSG1       ; CARICA LA SCRITTA DI 'MSG1'
  112.          MOV       AH, 9          ;    
  113.          INT       21H            ; STAMPA LA SCRITTA DI 'MSG1'
  114.          JMP       LABEL                
  115.                
  116. LABEL5:  ACQ                      ; IN LABEL5: E' STATO INSERITO PRECEDENTEMENTE '10'
  117.          CMP       BL, 3          ; IF  BL = 11
  118.          JE        LABEL6
  119.          CMP       BL, 2          ; IF  BL = 10
  120.          JE        LABEL5
  121.          CMP       BL, 0          ; IF  BL = 00
  122.          JE        APP_LABEL      ; SALTO DI APPOGGIO
  123.          JMP       INIZIO
  124.          
  125. STAM_L_A:
  126.          LEA       DX, MSG2       ; CARICA IL MESSAGGIO 'MSG2'
  127.          MOV       AH, 9          ;    
  128.          INT       21H            ; STAMPA LA SCRITTA DI 'MSG2'
  129.          JMP       LABEL          ; SALTO ALLA CONDIZIONE 00
  130.                  
  131. APP_LABEL:
  132.          JMP      LABEL           ; SALTO DI APPOGGIO
  133.          
  134. LABEL6:  ACQ                      ; IN LABEL6: E' STATO INSERITO PRECEDENTEMENTE '11'
  135.          CMP      BL, 1           ; IF  BL = 01
  136.          JE       LABEL7
  137.          CMP      BL, 3           ; IF  BL = 11
  138.          JE       LABEL6
  139.          CMP      BL, 2           ; IF  BL = 10
  140.          JE       LABEL5
  141.          CMP      BL, 0           ; IF  BL = 00
  142.          JE       APP_LABEL
  143.          JMP      INIZIO
  144.                                
  145. LABEL7:  ACQ                      ; IN LABEL7: E' STATO INSERITO PRECEDENTEMENTE '01'
  146.          CMP      BL, 0           ; IF  BL = 00
  147.          JE       DECR_RET
  148.          CMP      BL, 1           ; IF  BL = 01
  149.          JE       LABEL7
  150.          CMP      BL, 3           ; IF  BL = 00
  151.          JE       LABEL6
  152.          JMP      INIZIO
  153.                                                          
  154. DECR_RET:
  155.          DEC      CL              ; DECREMENTA DI '1' CL SE E' AVVENUTA LA SEQUENZA DI USCITA
  156.          CMP      CL, 0           ; CONFRONTA CL CON '0'
  157.          JG       STAM_L_A        ; SE CL>0 SALTA A STAM_L_A
  158.          JMP      STAM_L_S        ; ALTRIMENTI SALTA A STAM_L_S
  159.                            
  160. ; return to operating system:                       ;DA LABEL1 A LABEL 3: SEQUENZA DI ENTRATA
  161.     RET                                             ;DA LABEL5 A LABEL 7: SEQUENZA DI USCITA
  162. START   ENDP                                        ;
  163.                                                     ; JE & JG =  SALTI CONDIZIONATI RELATIVI
  164. ;*******************************************        ; JMP = SALTO INCONDIZIONATO
  165.  
  166. CSEG    ENDS
  167.  
  168.         END    START    ; set entry point.