Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Palestra Livello Apprendisti Livello Esperti

Home » Programma il Computer » Tutorial Assembly

Palestra Assembly - Home Page

  Programmare in Assembly

Esercizio n° A017 5/6 [90 di 157] 

               

Analisi del Codice · Progetto procedura Byt2Asc · Analisi di una Matrice di Dati a 8 bit · Conclusioni

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

               

bullet 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.
bullet L'aspetto è quello di una matrice di dati.... Ma come fare a realizzare questa particolare stampa?
bullet Pensaci un po' e poi leggi qui sotto la soluzione...

  

bulletBisogna ragionare con tranquillità:
bulletscrivere una riga di codice per ciascuna delle 256 stringhe è una soluzione istintiva ma assurda
bulletcreare un ciclo per stamparne 16, una dopo l'altra, è ragionevole e facile: basta chiamare 16 volte di seguito la Byt2Asc
bulletse riusciamo a cambiare ogni volta riga (mantenendo inalterata la colonna iniziale) basta un secondo ciclo che esegua 16 volte il ciclo precedente...

  

Leggi con ATTENZIONE!! La messa a video di una matrice di dati si realizza, in codice assembly, con 2 cicli annidati, cioè uno dentro l'altro.

  

bullet Data per spiegata la fase iniziale (Desktop) e finale (rientro al DOS) ti propongo la mia soluzione:

  

Console - Video & Tastiera

Esercizio IMPEGNATIVO Esercizio
NB: se il testo nell'Area  ti sembra strano
     
installa il  font
Giobe.TTF: clicca qui!!
Mostra l'Effetto Prova l'eseguibile COM Scarica il codice Sorgente ASM

  

bulletLa 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).

  

bulletLa 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..).
bulletPer 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).

  

bulletA questo punto tutto è pronto per partire; bisogna creare i 2 cicli annidati predisponendo i rispettivi contatori, prima quello esterno e poi quello interno.
bulletNel nostro esempio sono entrambi caricati a 16 (MOV CX,16); ma vediamoli in dettaglio...

  

bulletIl loop esterno eseguirà 16 volte le istruzioni contenute tra xxx00 e LOOP xxx00, con questo compito:
bulletsalvare il valore corrente del suo contatore (PUSH CX), inevitabilmente sporcato (come vedremo) dalla gestione del loop interno
bulletfissare dinamicamente la posizione di stampa corrente, con l'aiuto della Procedura SET_cur, specializzata in questo lavoro
bulletstampare una intera riga di 16 stringhe consecutive (compito affidato alle istruzioni del loop interno, tra xxx01 e LOOP xxx01)
bulletfissare dinamicamente la riga di stampa successiva (INC DH)
bulletrecuperare il valore corrente del suo contatore (POP CX) e continuare (LOOP xxx00) fino alla stampa completa di tutte e 16 le righe

  

bulletIl loop interno eseguirà 16 volte le istruzioni contenute tra xxx01 e LOOP xxx01, con questo compito:
bulletmettere a video la coppia di caratteri ascii associati al valore corrente (byte) del registro AL, con l'aiuto della Procedura interna Byt2Asc
bulletsalvare il prezioso valore corrente (byte) del registro AL (PUSH AX)
bulletstampare in sequenza una 'H' (per dare personalità alla coppia ascii appena messa a video) e uno spazio (per evitare che le 16 stringhe risultino attaccate tra loro)
bulletrecuperare in AL (POP AX) il  byte corrente e prepararlo (incrementato) per la prossima stringa (INC AL)
bulletcontinuare (LOOP xxx01) fino alla stampa completa di tutte e 16 quaterne di codici ascii di ciascuna riga

  

bulletEcco, tutto è compiuto..

    

Pagina Precedente Palestra Apprendisti Pagina Successiva Esercizio n° A017 5/6   Torna alla Home  della Palestra Assembly Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
90 di 157
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157

    

PALESTRA » Apprendisti » Es.001 Es.002 Es.003 Es.004 Es.005 Es.006 Es.007 Es.008 Es.009 Es.010 Es.011 Es.012
Es.013 Es.014 Es.015 Es.016 Es.017 Es.018 Es.019 Es.020 Es.021 Es.022 Es.023 Es.024
Es.025 Es.026 Es.027 Es.028 Es.029 Es.030 Es.031 Es.032 Es.033

| Che serve per iniziare | Prima compilazione | Livello Esperti |

TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati