dal 2015 - visita n. 575
SCACCHI3
SCACCHI3

 

SCACCHI3.ASM

;::::::::: 8086 - ESERCIZI SVOLTI - RstSv/014 ::::::::::::::::::::::::::::::::
;:                                                                          ::
;: SCACCHI3.ASM - 13/03/2002                                                ::
;:                                                                          ::
;: Stesso Problema di SCACCHI1.ASM                                          ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;: Soluzione C.                                                             ::
;: La Scacchiera viene generata stampando progressivamente un carattere per ::
;: volta tenendo conto della trama dei colori,  usando il video come un te- ::
;: laio per la tessitura.                                                   ::
;: Modificando il byte attributi di WordFill si può alterare il colore del- ::
;: le caselle,  tenendo presente che i codici ASCII  20h e 00h  generano un ::
;: carattere di solo sfondo,  mentre il codice  DBh  genera un carattere di ::
;: solo primo piano.                                                        ::
;: Nella stesura di questa soluzione si è voluto privilegiare la compattez- ::
;: za del codice risultante,  evitando tuttavia di far ricorso ad  artifici  ::
;: scorretti dal punta di vista della forma  e  della leggibilità;  si noti ::
;: che la routine JCLS viene chiamata, la prima volta,  ma eseguita sequen- ::
;: zialmente, la seconda volta: l'istruzione RET agisce normalmente la pri- ::
;: ma volta, mentre serve per il rientro al DOS la seconda volta.           ::
;: Codice risultante, dopo la compilazione, 45 byte.                        ::
;: Il ricorso a qualche  artificio "estremo"  potrebbe consentire di rosic- ::
;: chiare ancora qualche byte, ma a scapito della leggibilità e della gene- ::
;: ralità della soluzione.                                                  ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

                                      ; SEZIONE DICHIARATIVE
SegVideo  EQU     0B800h              ; Posizione Segmento Video
DimVideo  EQU     2000                ; Dimensione Area Video
WordFill  EQU     0720h               ; 07  attributi / 20  codice ASCII

                                      ; SEZIONE PROLOGO o INTESTAZIONE
CodeSeg   SEGMENT
          ASSUME  CS:CodeSeg, DS:CodeSeg
          ORG     100H

                                      ; 1) FASE DI INIZIALIZZAZIONE
Start:    MOV     AX,SegVideo         ;
          MOV     ES,AX               ; ES = Segmento Video
          CALL    JCLS                ; Pulizia Schermo e Inibizione Cursore
          MOV     BH,8                ; BH = Contatore Caratteri in Verticale

                                      ; 3) FASE DI CONTROLLO/ESECUZIONE
Ciclo1:   NOT     AH                  ; Inverte Colore
          MOV     BL,24               ; BL = Contatore Blocchi di 10 Caratteri
Ciclo2:   MOV     CL,10               ; CX = Contatore Caratteri del Blocco
          REPZ    STOSW               ; Scrive 10 Caratteri
          NOT     AH                  ; Inverte Colore
          DEC     BL                  ;
          JNZ     Ciclo2              ; Ricicla finchè BL=0
NewRiga:  DEC     BH                  ;
          JNZ     Ciclo1              ; Ricicla finchè BH=0

                                      ; 4) FASE DI USCITA
          SUB     AH,AH               ; Attesa Tasto
          INT     16H                 ;

                                      ; 5) FASE SOTTOPROGRAMMI
JCLS:     MOV     AX,WordFill         ; Attributi Colore + Codice ASCII
          SUB     DI,DI               ; DI Punta Inizio Video
          PUSH    DI                  ; Salvataggio DI
          MOV     CX,DimVideo         ; Dimensione Video
          REPZ    STOSW               ; Scrittura su RAM Video
          POP     DI                  ; Ripristino DI
          RET                         ; Rientro al chiamante o al DOS

                                      ; SEZIONE EPILOGO o CHIUSURA
CodeSeg   ENDS
          END     Start               ; Rinvio all'Istruzione di Start




Asm86
COPYBLK1
COPYBLK2
DISPMSG1
DISPMSG2
DISPMSG3
FILLBLK1
FILLBLK2
WAITKBD1
SOMDIF1
PASSWRD1
CLRSCR1
SCACCHI1
SCACCHI2
SCACCHI3
SCACCHI4
ALLCHAR1
ATTRIB1
CLRSCR2
TESTOCOM
ORDIN1
Funzioni Stringa
Tastiera DOS



Non é sufficiente che all'uomo venga insegnato un lavoro specializzato.
Può darsi che con quello egli divenga una specie di utile macchina, non una personalità armoniosamente sviluppata.
E' essenziale invece che lo studente impari a comprendere e a capire vivamente i valori. Egli deve acquistare un vivo senso del bello e del bene morale. Egli deve imparare a comprendere quali siano le forze motrici che agiscono sugli esseri umani, le loro illusioni e le loro sofferenze. Al fine di acquistare un giusto senso dei rapporti con i singoli individui e la comunità.
Albert Einstein

Valid CSS!
pagina generata in 0.001 secondi