PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (maggio 2003) SUBTTL ** TUTORIAL ASSEMBLY -- www.giobe2000.it -- by ing. Giorgio OBER ;/---------------------------------------------------------------------------\ ;| NOME : B10_01__.ASM (INT 10H, Funzione 01H)| ;| AUTORE : Giorgio OBER | ;| VERSIONE : maggio 2003 | ;| DESCRIZIONE : Verifica l'effetto della funzione creando in sequenza un| ;| cursore di diverse dimensioni, da 0 a 16 linee si scansione,| ;| da una dimensione minima (CH=15/CL=15) ad una massima (CH=00| ;| /CL=15) con cursore CRESCENTE dal basso verso l'alto. | ;| Da notare che il tentativo opposto, con cursore DECRESCENTE| ;| dall'alto verso il basso, da una dimensione massima (CH=00/| ;| CL=15) ad una minima (CH=00/CL=00), non produce l'effetto| ;| desiderato (vedi Funzione 12H/BL=34H dell'INT 10H VIDEO). | ;\---------------------------------------------------------------------------/ ; MACRO UTILIZZATE DAL PROGRAMMA: include c:\arch-lab\bin\GIOBE.MAC ; 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 CambiaCol:NEAR EXTRN SET_cur:NEAR EXTRN VIA_cur:NEAR EXTRN RIP_cur:NEAR EXTRN KEYwait:NEAR EXTRN BIOScls:NEAR EXTRN BIOSmsg:NEAR EXTRN Byt2Asc:NEAR PUBLIC ATTRIB ;Attributo di colore ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP B10_01__ ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- Testo1 DB "Riga di partenza H, Riga d'arrivo H ",00H ATTRIB DB 1FH ;Attributo di Colore ;AREA DESTINATA ALLE PROCEDURE DEL PROGRAMMA ;/---------------------------------------------------------------------------\ ;| PROCEDURE : StampaC | ;| DESCRIZIONE : Mostra la dimensione corrente del cursore assunta dai valori| ;| forniti in ingresso in CH (numero corrente della Start_line)| ;| e in CL (numero corrente della End_line), aggiornata non| ;| appena viene premuto un tasto qualunque | ;\---------------------------------------------------------------------------/ StampaC:M_CURSOR 13,34 ; MOV AL,CH ; Stampa il numero corrente della Start_line CALL Byt2Asc ; M_CURSOR 13,53 ; MOV AL,CL ; Stampa il numero corrente della End_line CALL Byt2Asc ; M_CURSOR 13,57 ; Fissa la posizione di stampa del Cursore ; CALL SET_cur ; CALL KEYwait ; Rimane in attesa della pressione di un tasto RET ; ;***************************************************************************** ; ---------------------------------------------- B10_01__ proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- CALL BIOScls ; --------------------------------------------- M_msgC Testo1,13,17,0FH; Organizza il piano di presentazione M_COLOR 0EH ; --------------------------------------------- ; FASE del CURSORE CRESCENTE ; --------------------------------------------- ; Inizializza un contatore per permettere la vi- MOV CX,16 ; sualizzazione, nella posizione di stampa cor- XXX00: PUSH CX ; rente, del cursore, da una dimensione minima DEC CL ; (CH=15, CL=15) ad una massima (CH=00, CL=15) ; con cursore CRESCENTE dal basso verso l'alto ; Funzione BIOS che fissa la dimensione del cur- ; sore lampeggiante, prodotto dall'hardware del MOV CH,CL;Start_line; video SOLO nei modi testo tracciando una o pi— MOV CL,15;End_line; linee di Pixel nello spazio riservato al ca- PUSH CX ; rattere che sta per essere scritto. La linea MOV AH,01H ; di partenza (in alto) Š specificata in CH con INT 10H ; un numero a partire da 00H; quella finale (in POP CX ; basso) posta in CL, assumere il valore massimo ; 07 per la CGA, 13 per la EGA e 15 per la VGA ; Mostra la dimensione corrente del cursore, CALL StampaC ; assunta da CH (Start_line) e CL (End_line), ed ; aspetta la pressione di tasto qualunque POP CX ; Prosegue stampando un Cursore sempre pi— LOOP XXX00 ; grande ; --------------------------------------------- ; FASE del CURSORE DECRESCENTE ; --------------------------------------------- ; Inizializza un contatore per permettere la vi- MOV CX,16 ; sualizzazione, nella posizione di stampa cor- XXX01: PUSH CX ; rente, del cursore, da una dimensione massima ; (CH=00, CL=15) ad una minima (CH=00, CL=00) ; con cursore DECRESCENTE dall'alto in il basso ; Funzione BIOS che fissa la dimensione del cur- ; sore lampeggiante, prodotto dall'hardware del ; video SOLO nei modi testo tracciando una o pi— MOV CH,0;Start_line; linee di Pixel nello spazio riservato al ca- DEC CL ;End_line; rattere che sta per essere scritto. La linea MOV AH,01H ; di partenza (in alto) Š specificata in CH con INT 10H ; un numero a partire da 00H; quella finale (in ; basso) posta in CL, assumere il valore massimo ; 07 per la CGA, 13 per la EGA e 15 per la VGA ; Mostra la dimensione corrente del cursore, CALL StampaC ; assunta da CH (Start_line) e CL (End_line), ed ; aspetta la pressione di tasto qualunque POP CX ; Prosegue stampando un Cursore sempre pi— LOOP XXX01 ; piccolo PUSH AX ; Torna al DOS con la memoria liberata e con la CALL RIP_cur ; chiusura di tutti i file; cede il controllo MOV DH,23 ; al processo padre (generalmente COMMAND.COM); MOV DL,0 ; il valore posto eventualmente in AL prima di CALL SET_cur ; uscire pu• essere testato in uscita con la POP AX ; funzione 4DH o mediante la lettura della MOV AH,4CH ; variabile DOS "ERRORLEVEL" INT 21H ; B10_01__ ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare