|
 |
Programmare in Assembly |
Esercizio n° E004 3/6
[20 di 57] |
 | La stampa di una cornice di dimensioni prefissate è
piuttosto facile; è necessario anzitutto decidere la sua altezza e la sua
larghezza. |
 | Il programma del nostro esempio deve provvedere alla
creazione
di una cornice in grado di ospitare 10x10 caratteri. |
 | Ciò impone subito una considerazione,
solo apparentemente scontata: la
dimensione effettiva della cornice deve essere di 12x12, perchè
ovviamente anche i caratteri ascii usati per racchiudere l'area vogliono il
loro posto.. |
 | La prima cosa da fare è, dunque, definire le stringhe
necessarie per
costruire la cornice: naturalmente sarebbe un'inutile
spreco prevederne 12,
dato che quelle centrali sono identiche tra loro. |
 | Basterà definire le 2 stringhe esterne (Corn00
e Corn02) e quella dell'elemento
centrale (Corn01),
tutte rigorosamente lunghe 12
caratteri: |
 | Poichè la
Macro
M_msgC stampa
ciascuna stringa nel punto
che noi desideriamo, sembra sufficiente:
 |
fissare le 12 coppie di coordinate, tenendo
costante la
colonna e scegliendo per la riga una
sequenza di 12 valori consecutivi |
 | scrivere 12 righe di programma, ciascuna con una
Macro
M_msgC chiamata a gestire una delle 12 coppie di coordinate |
|
 | Naturalmente vale la
regola
secondo cui "quando una parte di programma appare più
di una volta c'è qualcosa che non va... (cioè può
sempre essere ottimizzarla)" |
 | Anche esteticamente da fastidio dover scrivere 10
volte l'elemento centrale (Corn01) su
altrettante righe consecutive, tra le stringhe delle prime
2 (Corn00
e Corn02), per cui conviene affidare
questo compito ad un ciclo
(loop) predisposto per fare 10 giri... |
 | Ma nasce subito il problema: come
cambiare la riga dentro il ciclo? E' proprio questo il concetto che
ti voglio spiegare: bisogna rendere dinamico
il valore numerico della riga di stampa, e ciò si può
fare solo affidandosi ad una variabile
locale o ad un registro. |
 |
In tutte le strutture delle mie
librerie ho scelto di affidare ai registri
DH
(per la riga) e DL
(per la colonna) le informazioni
dinamiche legate alla posizione
di stampa corrente, cioè alle coordinate del carattere che sta per
essere scritto. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|