PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (aprile 2009) SUBTTL** EsE006.ASM - Esercizi PALESTRA ASSEMBLY ESPERTI - by ing. G.OBER ;/---------------------------------------------------------------------------\ ;| NOME : EsE006.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : aprile 2009 | ;| DESCRIZIONE : Esercizio nø 0006 | ;| Progetto del desktop per il gioco "BATTAGLIA NAVALE" | ;\---------------------------------------------------------------------------/ ; 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 BIOchr1:NEAR EXTRN BIObeep:NEAR EXTRN BIOSmsg:NEAR ; DICHIARAZIONI (VARIABILI) PER I PROGRAMMI ESTERNI: PUBLIC ATTRIB ;Attributo di colore ; DICHIARAZIONI (PROCEDURE) PER I PROGRAMMI ESTERNI: PUBLIC EsE006 ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP EsE006 ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 0FH Frase01 DB "Battaglia Navale",00H Frase02 DB "Premi un tasto per terminare",00H Frase03 DB "TUTORIAL ASSEMBLY ~ESPERTI~ --- Copyright" DB " www.Giobe2000.it --- aprile 2009",00H ;AREA DESTINATA ALLE PROCEDURE DEL PROGRAMMA ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Cornice **** NB: Š la stessa dell'Esercizio EsE004.ASM *** | ;| DESCRIZIONE : Provvede alla stampa di una cornice di dimensioni fisse,| ;| 12x12, nella posizione di stampa corrente passata, in | ;| ingresso, nei registri DH (riga) e DL (colonna). | ;\---------------------------------------------------------------------------/ Corn00 DB "ÚÄÄÄÄÄÄÄÄÄÄ¿",00H ; Corn01 DB "³úúúúúúúúúú³",00H ; Variabili locali, proprie della procedura Corn02 DB "ÀÄÄÄÄÄÄÄÄÄÄÙ",00H ; ;---------------------------------------------------------------------------- Cornice: M_msgC Corn00,DH,DL,0EH; INC DH ; "ÚÄÄÄÄÄÄÄÄÄÄ¿" MOV CX,10 ; Provvede alla stampa xxx02: M_msgC Corn01,DH,DL,0EH; "³úúúúúúúúúú³" della cornice 12*12, INC DH ; contenente 100 puntini LOOP xxx02 ; "ÀÄÄÄÄÄÄÄÄÄÄÙ" M_msgC Corn02,DH,DL,0EH; RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Poligono | ;| DESCRIZIONE : Aggiunge la taratura alla Cornice dinamica di dimensioni | ;| fisse, progettata nella precedente esercitazione | ;\---------------------------------------------------------------------------/ Asse_X DB " 0123456789 ",00H ;---------------------------------------------------------------------------- Poligono: M_msgC Asse_X,DH,DL,0FH;Stampa la taratura in alto, "123456789" PUSH DX ; INC DH ; CALL Cornice ; Stampa la cornice nel punto giusto POP DX ; M_COLOR 0FH ; SUB DL,2 ; ADD DH,2 ; MOV CX,10 ; MOV AL,"A" ; Aggiunge la taratura verticale Poli_1: M_CURSOR DH,DL ; CALL BIOchr1 ; INC AL ; INC DH ; LOOP Poli_1 ; RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Desktop | ;| DESCRIZIONE : Stampa tutta l'immagine del piano di presentazione del gioco| ;\---------------------------------------------------------------------------/ Desktop:CALL BIOScls ;Provvede comunque alla cancellazione del video, ;posizionando il cursore alla riga 0, colonna 0 CALL VIA_cur ;Rende il cursore invisibile ; Provvede a stampare una riga intera di spazi, M_COLOR 1FH ; (80 caratteri " "), nel colore predisposto da MOV CX,80 ; M_COLOR nella variabile ATTRIB; poichŠ si MOV AL," " ; desidera marcare la prima riga in alto non Š xxx00: CALL BIOchr1 ; necessario posizionare il cursore con M_CURSOR LOOP xxx00 ; poichŠ siamo reduci da un ClearScreen che ha ; fissato d'ufficio la posizione di stampa sulla ; riga0,colonna0 M_CURSOR 23,0 ; Provvede a colorare completamente la penultima MOV CX,80 ; riga (stampa 80 spazi) poichŠ n‚ il colore n‚ xxx01: CALL BIOchr1 ; il carattere sono cambiati le 2 istruzioni che LOOP xxx01 ; mancano non sono necessarie. E' invece neces- ; sario posizionare il cursore con M_CURSOR M_msgC Frase01, 0,32,1FH; "Battaglia Navale" M_msgC Frase02,23,26,1FH; "Premi un tasto per terminare" M_msgC Frase03,24,1,04H ; Stampa il copyright RET ;***************************************************************************** ; ---------------------------------------------- EsE006 proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- CALL DeskTop ;Impostazione della pagina interattiva MOV DL,20 ; Stampa una "Cornice" tarata nella posizione MOV DH, 6 ; DH=riga=6, DL=colonna=20 CALL Poligono ; MOV DL,50 ; Stampa una "Cornice" tarata nella posizione MOV DH, 6 ; DH=riga=6, DL=colonna=50 CALL Poligono ; CALL KEYwait ;Aspetta la pressione di un tasto qualunque 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 ; EsE006 ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare