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_03__.ASM (INT 10H, Funzione 03H)| ;| AUTORE : Giorgio OBER | ;| VERSIONE : maggio 2003 | ;| DESCRIZIONE : Assume la posizione corrente del Cursore e le sue dimensioni| ;| mostrandone il valore, con l'aiuto di Procedure di Libreria.| ;\---------------------------------------------------------------------------/ ; 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 RIP_cur:NEAR EXTRN KEYwait:NEAR EXTRN BIOScls:NEAR EXTRN BIOSmsg:NEAR EXTRN Byt2Asc:NEAR EXTRN Byt2Dec: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_03__ ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 0FH Testo1 DB " La posizione attuale del cursore Š fissa sulla riga xxH ( ), " DB "colonna xxH ( ) ",00H Testo2 DB " La dimensione attuale del cursore va dalla linea xxH ( ) alla" DB " linea xxH ( ) ",00H COORD DB 00H ;Riga Corrente del Cursore DB 00H ;Colonna Corrente del Cursore DIMENS DB 00H ;Linea di scansione Iniziale DB 00H ;Linea di scansione Finale ;***************************************************************************** ; ---------------------------------------------- B10_03__ proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- CALL BIOScls ;Pulisce lo schermo e inizializza il segmento M_msgC Testo1,10, 0,1FH; M_msgC Testo2,11, 0,5FH; MOV BH,00H;Pagina ; MOV DH,20 ;Riga ; Fissa la posizione di stampa alla riga DH = 20 MOV DL,40 ;Colonna; e alla colonna DL = 40 in pagina BH (pagina0) MOV AH,02H ; INT 10H ; ; Funzione BIOS che fornisce la posizione attua- ; le del cursore hardware nella pagina video ; corrente, lasciando in uscita le coordinate di ; stampa in DH (riga) e DL (colonna); in CH/CL ; sono rese disponibili anche le dimensioni cor- MOV BH,00H; Pagina; renti del cursore (CH=linea di partenza, in MOV AH,03H ; alto e CL=linea finale, in basso); per ogni INT 10H ; pagina video, indicata in ingresso in BH, pu• ; essere predisposto e mantenuto un cursore di- ; verso, indipendentemente dalla pagina attual- ; mente in atto (il numero di pagine dipende ; dall'adattatore disponibile) MOV CS:[DIMENS],CH; MOV CS:[DIMENS+1],CL; Salva i dati appena assunti in QUATTRO varia- MOV CS:[COORD],DH ; bili del programma MOV CS:[COORD+1],DL; M_COLOR 1EH ; Colore del primo messaggio (Giallo su Blu) M_CURSOR 10,53 ; Stampa il numero esadecimale a 8 bit MOV AL,CS:[COORD] ; corrispondente alla riga della posizione di CALL Byt2Asc ; stampa corrente M_CURSOR 10,58 ; Stampa il numero decimale a 8 bit MOV AL,CS:[COORD] ; corrispondente alla riga della posizione di CALL Byt2Dec ; stampa corrente M_CURSOR 10,71 ; Stampa il numero esadecimale a 8 bit MOV AL,CS:[COORD+1]; corrispondente alla colonna della posizione di CALL Byt2Asc ; stampa corrente M_CURSOR 10,76 ; Stampa il numero decimale a 8 bit MOV AL,CS:[COORD+1]; corrispondente alla colonna della posizione di CALL Byt2Dec ; stampa corrente M_COLOR 5EH ; Colore del primo messaggio (Giallo su Magenta) M_CURSOR 11,50 ; Stampa il numero esadecimale a 8 bit MOV AL,CS:[DIMENS]; corrispondente alla linea iniziale del cursore CALL Byt2Asc ; M_CURSOR 11,55 ; Stampa il numero decimale a 8 bit MOV AL,CS:[DIMENS]; corrispondente alla linea iniziale del cursore CALL Byt2Dec ; M_CURSOR 11,71 ; Stampa il numero esadecimale a 8 bit MOV AL,CS:[DIMENS+1]; corrispondente alla linea finale del cursore CALL Byt2Asc ; M_CURSOR 11,76 ; Stampa il numero decimale a 8 bit MOV AL,CS:[DIMENS+1]; corrispondente alla linea finale del cursore CALL Byt2Dec ; M_CURSOR 20,40 ; Fissa la posizione di stampa alla riga DH = 20 ; e alla colonna DL = 40 in pagina BH (pagina0) CALL KEYwait ; Rimane in attesa della pressione di un tasto 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_03__ ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare