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° A003 3/5 [23 di 157] 

               

Analisi del Codice · Analisi in ambiente Debug · Conclusioni

Gestione Caratteri - Stampa 10 caratteri uguali
Analisi del Codice [2 di 2]

               

bulletTralasciando la descrizione dell'ormai acquisita struttura base passiamo al commento del Main Program di EsA003.ASM:

  

Console - Video & Tastiera

Esercizio FACILE 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

  

bulletAll'inizio notiamo l'annunciata pulizia (ClearScreen) dello schermo (CALL BIOScls).

  

bulletLe 6 istruzioni successive costituiscono la parte importante del Main Program: sono quelle che gestiscono il ciclo, vero obiettivo del nostro progetto.
bulletSi tratta di una struttura è del tutto simile al ciclo FOR i=1 To n DO dei linguaggi evoluti:
bullet un ciclo inizia sempre con il caricamento del numero di giri desiderati: di questo si occupa il registro CX (MOV CX,10); ti consiglio fortemente di riservare sempre CX a questo servizio (sebbene nessuno vieti di affidarlo ad altro registro) per le ragioni che ti ho spiegato quando ho descritto le istruzioni e nel dettaglio dell'istruzione LOOP..

  

bulletle 4 istruzioni centrali costituiscono il pacchetto di istruzioni da eseguire più volte; niente di nuovo:
bullet con MOV AL,'A' e CALL BIOSchr viene scritto il carattere 'A' nella posizione di stampa corrente
bulletle 2 istruzioni estreme (PUSH CX e POP CX) ti segnalano un problema da non sottovalutare: il valore corrente di CX è molto importante, dato che ad esso è affidata la memoria dei cicli da compiere; per questo non bisogna correre il rischio di sovrascriverlo e, nel dubbio, questa coppia d'istruzioni mette al sicuro

  

bulletil vero gestore del ciclo è l'istruzione LOOP: il suo compito (LOOP xxx00) è piuttosto raffinato:
bulletper prima cosa decrementa il valore di CX
bulletse, dopo il decremento, CX è diverso da 0000 salta alla locazione specificata dal suo operando, nel nostro caso l'etichetta xxx00
bulletse, invece, CX=0000 pone fine all'esecuzione del ciclo e obbliga il processore ad eseguire l'istruzione successiva.

  

bulletA questo proposito dell'etichetta intermedia xxx00 desidero farti notare una tecnica di programmazione che ritengo importante:
bulletnella pratica della programmazione assembly è molto frequente la necessità di definire etichette intermedie, riferite di regola alle istruzioni di salto
bulletil problema che assilla (e talvolta, esalta...) il giovane virgulto è quello di dare un nome a queste etichette: comincia con alto, basso, quidx, quisn... e dopo un po', di norma, si lascia prendere da paranoie da stress, cominciando a dare nomi irripetibili..
bulletla soluzione migliore è allora quella di dare nomi anonimi caratterizzati da un numero crescente, come appunto xxx00, xxx01,..; in questo modo non si rischia mai la crisi di fantasia e il rischio del cattivo gusto.

  

bulletL'esercizio termina coerentemente con le 2 previste fasi finali:
bulletl'annunciata attesa della pressione di un tasto qualunque (CALL KeyWait) per fermare un po' l'eseguibile
bullet la corretta chiusura del programma, assicurata dalle ultime 2 indispensabili istruzioni finali

  

bulletPrima di concludere il commento di questo esercizio c'è un'altra importante cosa che va sottolineata; le lettere 'A' sono poste a video in sequenza solo perchè la Funzione 0EH di INT 10H è una Funzione furba: ti ho già anticipato che la sua caratteristica più positiva è quella di aggiornare la posizione di stampa: se non fosse così le 10 lettere sarebbero state stampate una sopra l'altra!

    

Pagina Precedente Palestra Apprendisti Pagina Successiva Esercizio n° A003 3/5   Torna alla Home  della Palestra Assembly Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
23 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