PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (aprile 2009) SUBTTL** EsA007.ASM - Esercizi PALESTRA ASSEMBLY APPRENDISTI - by ing. G.OBER ;/---------------------------------------------------------------------------\ ;| NOME : EsA007.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : aprile 2009 | ;| DESCRIZIONE : Esercizio nø 0007 | ;| Pulisce lo schermo e stampa 10 caratteri a colori a partire | ;| da un punto preciso dello schermo. | ;| (usa in parte le procedure della Libreria Giobe.LIB). | ;\---------------------------------------------------------------------------/ ; LIBRERIA UTILIZZATA DAL PROGRAMMA [opzione WinASM altrimenti non necessaria] includelib c:\arch-lab\bin\GIOBE.LIB ;PROCEDURE ESTERNE UTILIZZATE dal PROGRAMMA [NEAR, dalla LIBRERIA ~GIOBE.LIB~] ;----------------------------------------------------------------------------- EXTRN BIOScls:NEAR EXTRN KEYwait:NEAR ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ;Inizio Standard del Segmento di CODICE ASSUME CS:_prog,DS:_prog ;Associazione Standard per i Segmenti ORG 0100H ;Indirizzo d'Inizio standard dell'eseguibile COM INIZIO: ;Indirizzo della prima istruzione da compilare JMP EsA007 ;Istruzione Standard che salta le (eventuali) ;variabili del programma e punta il Main Program ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 1FH ;Attributo di colore: Bianco brillante su Blu ;***************************************************************************** ; ---------------------------------------------- EsA007 proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- ; Provvede alla cancellazione del video, CALL BIOScls ; posizionando il cursore alla riga0, colonna0, ; in alto a sinistra MOV BH,00H ; Predispone la stampa in Pagina video 0 MOV DH,12 ; Predispone la posizione di stampa su riga 12 MOV DL,39 ; Predispone la posizione di stampa su colonna 39 MOV AH,02H ; Fissa la posizione del cursore INT 10H MOV CX,10 ; Carica il contatore a 10 xxx00: PUSH CX ; Mette al sicuro il valore corrente del Contatore MOV AH,03H ; Legge la posizione del cursore MOV BH,00H ; page 0 INT 10H ; PUSH DX ; Salva la posizione di stampa corrente MOV BH,00H ; Predispone la stampa in Pagina video 0 MOV CX,0001 ; Predispone la stampa di un solo carattere MOV AH,09H ; Provvede alla stampa del carattere Ascii "A" MOV BL,CS:[ATTRIB]; con il codice di attributo di colore predispo- MOV AL,'A' ; sto nella variabile locale di nome ATTRIB, INT 10H ; nella posizione di stampa corrente POP DX INC DL ; Incrementa la colonna CMP DL,80 ; Controlla se colonna>80 JNZ xxx01 MOV DL,00 ; Prima colonna INC DH ; Riga sucessiva CMP DH,25 ; Controlla se riga>25 JNZ xxx01 MOV DH,00 xxx01: MOV BH,00H ; Predispone la stampa in Pagina video 0 MOV AH,02H ; Fissa la posizione del cursore INT 10H POP CX ; Recupera il valore corrente del Contatore LOOP xxx00 ; Aggiorna il contatore e ripete finch‚ serve... CALL KeyWait ; Rimane in attesa della pressione di un tasto ; qualunque (lasciando il suo valore in AL) MOV AH,4CH ; Pone fine al processo (eseguibile) in atto INT 21H ; tornando al prompt del DOS nel modo migliore EsA007 ENDP ; Chiusura Standard della Procedura "MainProgram" _prog ENDS ; Chiusura Standard del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare