Libreria delle ProcedureGestione Caratteri

Entra nella Libreria GIOBE.TPU

 SALVAchr

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 salvare i 2 bytes associati a ciascun carattere 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 in Pagina 0, puntata da DS:DI, viene prelevata la coppia Ascii/Colore. Dopo aver creato il puntatore ES:SI alla corrispondente locazione della Pagina alternativa della Ram del Video provvede a trasferire i 2 bytes precedentemente estratti
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 SALVAchr(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           ;
    MOV   AX,0B800H    ;Punta la locazione desiderata nel-
    MOV   ES,AX 
       ;la Pagina0 Ram Video, cioè
    MOV   DI,
indirizzo ;   ES:DI = ES:indirizzo
    MOV   AX,ES:[DI]   ;Preleva la coppia di  bytes (Ascii
    PUSH  AX          
;e colore) associati al carattere
    MOV   CL,numPAG    ;
    MOV   CH,00H       ;Calcola il puntatore alla locazio-
   
MOV   AX,1000H     ;ne  di  destinazione  nella pagina
    MUL   CX           ;alternativa indicata da numPAG
   
MOV   SI,AX        ;
   
ADD   SI,indirizzo ;
   
POP   AX       
   
MOV   ES:[SI],AX   ;Sposta la coppia Carattere/Attri-
   
                    ;buto nella pagina alternativa
    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
bulletcreazione del puntatore ES:DI all'indirizzo logico del carattere in Pagina 0 (zona verde)
bulletassume la coppia di bytes (Ascii e attributo) dalla locazione desiderata in Pagina 0 (zona blu)
bulletcreazione del puntatore ES:SI all'indirizzo logico del carattere in Pagina alternativa (zona celeste)
bulletsposta la coppia di bytes associati al carattere, dalla Pagina 0 nella Pagina alternativa (zona rosa)
bulletrecupero dei registri coinvolti
    
Pagina Precedente Caratteri Pagina Successiva   SALVAchr Lezioni - Vai al DownLoad dei files DOC Torna al Menu "Caratteri"
Esempio Sorgente Mostra
16 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