  | 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 può 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 calcola il valore esadecimale del byte di colore sulla base dei parametri forniti in ingresso e lo colloca
                
              direttamente in    Ram Video |  
		  | 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’. |  
		  | Poiché questa procedura si occupa di cambiare
           solo il codice di colore del carattere,
                il valore calcolato dall’algoritmo viene incrementato al fine
                di puntare sempre
           locazioni dispari, così che la locazione dell’attributo del 1° carattere in alto a sinistra,
          [1,1]  vale B8001H, quella del 2°
            alle coordinate [1,2] vale B8003H, e così via fino alla locazione del byte di colore dell’ultimo
            carattere in basso a destra, [25,80], che
           vale B8F9FH |  
		  | Naturalmente è presente anche l’algoritmo che calcola l’attributo a partire da
          ‘txt’ e ‘sfo’. |  
	 
	
        
        | 
        Codice Sorgente | 
          | 
        
        
          | 
        
          | 
        
          | 
         
        
        
        PROCEDURE
             ATTRchr(rig,col,txt,sfo:byte); 
             VAR  
             indirizzo:word;
             colore:byte; 
             BEGIN 
              
             indirizzo:=(col-1)*2+(rig-1)*160; 
             
         
               colore:sfo*16+txt; 
               asm 
                 PUSH   ES           
        ;Salvataggio dei registri coinvolti 
                 PUSH  DI           ; 
             
                  MOV   AX,0B800H    ;Punta la  locazione  desiderata in 
                 MOV   ES,AX       
             ;Ram  Video,   ES:DI = ES:indirizzo 
                 MOV   DI,indirizzo  ;(osserva
              che si punta una locazio- 
                 
             INC   DI          
              ;ne dispari, cioè il secondo byte) 
                 MOV   AL,colore   
              ;  
              
               MOV   ES:[DI],AL   ;Sposta 
              codice di Attributo in Ram 
                 POP   DI           ;Recupero  dei  registri  coinvolti 
                 POP   ES          
              ;
  
               end; 
             END;
              
              | 
         
   
      |