|
 |
Programmare in Assembly |
Esercizio n° E005 4/4
[27 di 57] |
 |
Ho provato a stampare la cornice tarata
nell'angolo in alto a sinistra dello schermo, passando le coordinate 0,0 (MOV DL,0, MOV DH,0);
sorpresa: la struttura è sballata!!
non è per niente come la pensavo... Poichè il computer ha sempre
ragione devo aver fatto errore; osservando bene il codice della
procedura che consente la stampa dinamica della
cornice tarata (Poligono)
mi accorgo che la colonna di stampa non può essere
inferiore a 2. Puoi ripetere queste prove con le coordinate
DL=1,DH=0
(ancora
fuori range, ) e
DL=2,DH=0
(ora perfette), o con altri valori, per vedere che effetto fa. |
 | Nella logica di ottimizzare i programmi sorgente assembly
(e non solo assembly..) conviene sempre progettare pezzi
di codice piccoli e fini a se stessi; a
questa regola risponde la logica di questo progetto che definisce una
procedura interna
(Poligono) che chiama un'altra
procedura interna
(Cornice). |
 | L'esecuzione di una procedura
interna può modificare irreversibilmente
il contenuto dei registri che
utilizza:
 | se in ingresso
(cioè prima di chiamare la procedura) contengono
valori importanti, imperdibili, è
necessario e consigliato
salvare/recuperare
il loro valore nello/dallo
stack, un'area di memoria
ram di solito dedicata al processore |
 | questa tecnica si realizza con l'aiuto delle istruzioni
PUSH
reg16bit
e
POP
reg16bit,
ma non dimenticare che nello
stack finiscono sempre
word (16 bit o multipli di 16), per cui se desideri salvare il
valore (per esempio) di DL
devi comunque salvare (e recuperare)
DX, cioè il registro a 16 bit che lo
contiene. |
|
 | Se una
procedura interna utilizza
stringhe e/o
variabili ad essa
dedicate conviene definirle
subito sopra la sequenza delle sue istruzioni, evitando di aggiungerle
alle altre, di norma posizionate nella cosiddetta Area
dei dati del programma; in questo modo:
 | se fosse necessario trasformare la
procedura interna in
procedura da
aggiungere alla libreria Giobe.LIB dovranno essere incluse nel medesimo
modulo, cioè nel pezzo di codice assembly necessario per
definirla |
 | con questa tecnica sono certamente
appartenenti alla procedura che le utilizza e saranno
sempre e comunque
da essa reperite, proprio per la presenza del
segment override CS:,
da me appositamente imposto nell'uso delle variabili. |
|
 | La disponibilità di cornici tarate ci suggerisce il loro
utilizzo per le tabelle di puntamento necessarie
al gioco della
Battaglia Navale... |
 | Il prossimo esercizio si occuperà di progettare un desktop
adatto allo scopo. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|