Sezione |
Indirizzi Base
Registri Interni
|
Palestra Livello Apprendisti Livello Esperti |
Programmare in Assembly |
Esercizio n° A017 5/6 [90 di 157] |
|
|
||
Gestione Numeri Binari -
Conversione da byte a 2 caratteri Ascii EXAD - Progetto di Byt2Asc Stampa 256 numeri esadecimali a 8 bit in sequenza ordinata |
||
Analisi del Main Loop - Struttura di una matrice di dati |
|
Non rimane che affrontare il main Loop dell'esercizio EsA017.ASM; come hai visto nell'immagine di presentazione (ed eseguendo la versione compilata) la coppia di caratteri ascii associata a ciascun byte viene stampata su 16 righe da 16 colonne ciascuna. | |
L'aspetto è quello di una matrice di dati.... Ma come fare a realizzare questa particolare stampa? | |
Pensaci un po' e poi leggi qui sotto la soluzione... |
|
Bisogna ragionare con tranquillità:
|
|
La messa a video di una matrice di dati si realizza, in codice assembly, con 2 cicli annidati, cioè uno dentro l'altro. |
|
Data per spiegata la fase iniziale (Desktop) e finale (rientro al DOS) ti propongo la mia soluzione: |
|
|
Esercizio |
NB: se il testo nell'Area
ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|
La prima istruzione fissa il colore delle 256 stringhe; la seconda predispone il byte da convertire, affidandolo ad AL e inizializzandolo a 00H (MOV AL,00H). |
|
La cosa da non sottovalutare è la dinamicità della posizione di stampa di ciascuna delle 256 quaterne: perchè funzioni il gioco del ciclo dentro il ciclo la gestione del punto di stampa deve essere affidata a valori variabili (se fossero costanti ci stamperemmo addosso..). | |
Per questa ragione la seconda cosa da fare è affidare la posizione di stampa ai (consueti) registri DH e DL, fissando in essi il valore iniziale, MOV DH,6 (riga) e MOV DL,5 (colonna). |
|
A questo punto tutto è pronto per partire; bisogna creare i 2 cicli annidati predisponendo i rispettivi contatori, prima quello esterno e poi quello interno. | |
Nel nostro esempio sono entrambi caricati a 16 (MOV CX,16); ma vediamoli in dettaglio... |
|
Il loop esterno
eseguirà 16 volte le istruzioni contenute tra
xxx00
e LOOP xxx00,
con questo compito:
|
|
Il
loop interno eseguirà 16 volte le istruzioni contenute tra
xxx01
e LOOP xxx01,
con questo compito:
|
|
Ecco, tutto è compiuto.. |
|
Palestra Apprendisti | Esercizio n° A017 5/6 | |||||||
90 di 157 |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|