|  | La 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 pụ risultare
            incomprensibile; desidero fornirtela comunque, come stimolo per approfondire questa potente tecnica di programmazione
          (vedi Sezione 
            
  
  Tutorial Assembly). 
    |  | La procedura accede  direttamente
              alla  Ram Video [per saperne di più consulta 
          la
   Scheda nella Sezione
                  Dentro il Computer]. |  |  | La procedura consente di
                  stampare  un’area quadrangolare riempita con il medesimo carattere e con lo stesso attributo di colore, sostituendo in
                   Ram Video i bytes relativi ai caratteri originali,
                   che sono dunque perduti. |  |  | Le
                   dimensioni (alto,
                  largo) del Box, in funzione dei parametri passati alla
                  procedura, sono calcolate in Pascal. |  |  | Anche
                  la stampa dei bytes viene gestita in Pascal da un ciclo Repeat
                  .. Until, all'interno del quale l’indirizzo fisico 
                  corrente è calcolato a partire
                dai parametri ‘ri’ e ‘co’.sulla
                  base del fatto che ciascuna colonna
                porta il contributo di 2 bytes  e
                ciascuna riga, essendo composta da
                80 colonne, contribuisce con 160 bytes. |  
        
        | Codice Sorgente |  |  |  |  |  
        | PROCEDURE
             Box1(ri,co,ri1,co1,txt,sfo:byte;carat:char); VAR  
             indirizzo,n,alto,largo:word;
 BEGIN
 n:=0;
 alto:=ri1-ri+1;
 largo:=co1-co+1;
 REPEAT
 indirizzo:=(co-1)*2+(ri-1+n)*160;
 n:=n+1;
 asm
 PUSH  ES
 PUSH  DI           ;Salvataggio dei registri coinvolti
 PUSH  BX           ;
 PUSH  CX           ;
 MOV   AX,0B800H    
        ;Punta la  locazione  desiderata in
 MOV   ES,AX       
             ;Ram  Video,   ES:DI = ES:indirizzo
 MOV   DI,indirizzo  ;
 MOV   AL,carat
 MOV   BH,sfo
 SHL   BH,1         ;
 SHL   BH,1        
             ;
 SHL   BH,1        
             ;Converte
             i  valori  dei  parametri
 SHL   BH,1        
             ;nel
             byte esadecimale corrisponden-
 MOV   BL,txt      
             ;te,
             lasciato in AH
 OR    BH,BL       
             ;
 MOV   AH,BH       
             ;
 MOV   CX,largo
 @@1:MOV   ES:[DI],AX
             
         
        ;Sposta
              Ascii/Attributo in Ram
 INC   DI          
             ;
 LOOP  @@1         
             ;
 POP   CX
 POP   BX           ;Recupero  dei  registri  coinvolti
 POP   DI          
             ;
 POP   ES          
              ;
 end;
 UNTIL
  n=alto;
 END;
 |  |