Libreria delle ProcedureGestione Caratteri

Entra nella Libreria GIOBE.TPU

 RECUPchr

CODICE SORGENTE [3 di 4]  

    
bulletLa procedura è parzialmente scritta in linguaggio Assembly. E' probabile che il lettore, in questo momento, non sia in possesso delle conoscenze di base della programmazione a basso livello, per cui questa pagina può risultare incomprensibile; desidero fornirtela comunque, come stimolo per approfondire questa potente tecnica di programmazione (vedi Sezione Tutorial Assembly).
    
bulletIl compito della procedura è quello di recuperare in Pagina 0 i 2 bytes associati a ciascun carattere precedentemente salvati in una pagina alternativa in Ram Video
bullet Per calcolare l’indirizzo fisico del carattere desiderato viene usato un algoritmo in Pascal: poiché ciascuna colonna porta il contributo di 2 bytes e ciascuna riga, essendo composta da 80 colonne, contribuisce con 160 bytes, il valore desiderato è così facilmente ottenibile a partire dai parametri ‘rig’ e ‘col
bulletDalla locazione sorgente nella Pagina alternativa, dopo aver calcolato il corrispondente puntatore DS:SI, viene prelevata la coppia Ascii/Colore associata al carattere precedentemente salvato. I 2 bytes vengono quindi riportati in Pagina 0 con l'aiuto del puntatore ES:DI
bulletL’indirizzo fisico di ciascuna Pagina Video alternativa è logicamente distante 4096 bytes (4k) dal precedente, in esadecimale 1000H; è per questa ragione che, per localizzare la Pagina alternativa che ci interessa basta moltiplicare questo offset per il numero espresso dal parametro "numPAG")
bulletSe la Pagina 0 è localizzata all’indirizzo B800:0000H, la Pagina 1 comincerà a B800:1000H, la Pagina 2 a B800:2000H, e così via
    
Codice Sorgente   Mostra Effetto Esegui il Programma Scarica l'Esempio d'Applicazione
PROCEDURE RECUPchr (rig,col,numPAG:byte);
VAR indirizzo:word;
BEGIN
 
indirizzo:=(col-1)*2+(rig-1)*160; 
  asm
    PUSH  ES
          
    PUSH  DI           ;Salvataggio dei registri coinvolti
    PUSH  SI           ;
    PUSH  CX           ;
    PUSH  AX
    MOV   AX,0B800H    ;Prepara il Segmento ES per coprire
    MOV   ES,AX 
       ;le locazioni della Ram Video
    MOV   CL,numPAG    ;
    MOV   CH,00H       ;Calcola il puntatore alla locazio-
   
MOV   AX,1000H     ;ne sorgente nella pagina a lterna-
   
MUL   CX           ;tiva, indicata da numPAG
   
MOV   SI,AX        ;
   
ADD   SI,indirizzo ;
   
MOV   AX,ES:[SI]   ;Preleva la coppia Carattere/Attri-
                      
;buto dalla pagina alternativa
   
MOV   DI,indirizzo ;Punta la medesima posizione in Pa-
    MOV   ES:[DI],AX   ;gina0 e vi copia il carattere
    POP   AX  
         ;
    POP   CX  
         ;
    POP   SI           ;
    POP   DI
           ;Recupero  dei  registri  coinvolti
    POP   ES
           ;
  end;
END;
    
bulletIl codice sviluppa le seguenti parti:
bulletcalcolo dell’indirizzo del carattere desiderato, a partire dai parametri ‘rig’ e ‘col(in Pascal, zona marrone)
bulletsalvataggio dei registri coinvolti
bulletprepara il puntatore di Segmento ES per coprire la RamVideo (zona verde)
bulletcreazione del puntatore ES:SI all'indirizzo logico del carattere in Pagina alternativa (zona celeste)
bulletassume la coppia di bytes (Ascii e attributo) dalla locazione desiderata in Pagina 0 (zona rosa)
bulletprepara il puntatore di Offset DI in RamVideo all'indirizzo logico del carattere in Pagina 0 (zona blu)
bulletsposta la coppia di bytes associati al carattere, dalla Pagina alternativa nella Pagina 0 (zona blu)
bulletrecupero dei registri coinvolti
    
Pagina Precedente Caratteri Pagina Successiva   RECUPchr Lezioni - Vai al DownLoad dei files DOC Torna al Menu "Caratteri"
Esempio Sorgente Mostra
20 di 20

    

PASCAL  »

Libreria Giobe | Librerie Standard | Allegati | Applicazioni | Info | Download
PROCEDURE  »   Caratteri | Mouse | Tastiera | Tempo, Data & Ora
Box | Cornici | Cursore | Aree a Riga Intera | Aree a Schermo Totale
FUNZIONI  »   Caratteri | Mouse | Tastiera | Tempo, Data & Ora
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati