| 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] |
| Il compito della procedura è quello di
riportare
in Pagina 0 una immagine precedentemente salvata
in
Ram Video |
| Viene anzitutto creato il puntatore ES:SI
alla prima locazione della Pagina alternativa della Ram del Video
da cui estrarre i 2000 bytes associati alle coppie Ascii/Colore di ciascuno dei
caratteri precedentemente
salvati, riportandoli in Pagina 0,
con l'aiuto del puntatore DS:DI. |
| L’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").
Se 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 |
|
|
|
|
PROCEDURE
Recup (numPAG:byte);
BEGIN
asm
PUSH ES
PUSH DS
PUSH DI ;Salvataggio dei registri coinvolti
PUSH
SI ;
PUSH CX ;
CLD
MOV AX,0B800H ;Copre
la Ram Video con i 2
MOV ES,AX
;segmenti puntati da ES e DS
MOV DS,AX
;
MOV CL,numPAG
;
MOV CH,00H
;Fissa
il puntatore alla prima lo-
MOV AX,1000H
;cazione
sorgente nella pagina
MUL CX
;alternativa
indicata da numPAG
MOV SI,AX
;
MOV DI,0000H
;Fissa
il puntatore alla prima lo-
;cazione destinazione
in Pagina 0
MOV CX,2000
;Copia
l'intera pagina di caratteri
REP
MOVSW
;dalla pagina alternativa
POP CX
;
POP SI
;
POP DI
;Recupero dei registri coinvolti
POP DS
;
POP ES
;
end;
END;
|
|