Sezione |
Indirizzi Base
Registri Interni
|
Palestra Livello Apprendisti Livello Esperti |
Programmare in Assembly |
Esercizio n° A004 2/6 [27 di 157] |
|
|
||
Gestione Caratteri - Stampa una stringa in bianco e nero | ||
Analisi del Codice |
|
Tralasciamo il commento sulla struttura base e sulla dichiarazione degli EXTRN per le 3 procedure, ormai ben note (BIOScls, BIOSchr e KEYwait). | |
Fissiamo l'attenzione sull'area dati e sul Main Program di EsA004.ASM, evidenziate dalla solita casella di testo: |
|
|
Esercizio |
NB: se il testo nell'Area
ti
sembra strano installa il font Giobe.TTF: clicca qui!! |
|
Per provvedere alla stampa di un
testo è importante strutturarlo:
|
|
|
Il progetto della struttura chiamata a stampare la stringa inizia subito dopo la consueta pulizia (ClearScreen) dello schermo (CALL BIOScls) | |
La prima cosa da fare è puntarla, cioè destinare un registro per localizzarla; nel nostro codice il puntatore è SI e la stringa da stampare è Testo01: per localizzarla si usa l'istruzione LEA (LEA SI,Testo01). |
|
Segue un ciclo continuo
(xxx00: >>>
JMP SHORT xxx00), nel quale si sviluppano tutte le fasi della
procedura:
|
|
La prima istruzione fuori ciclo è la consueta attesa della pressione di un tasto qualunque (CALL KeyWait): nell'attesa è possibile leggere con comodo il messaggio appena stampato... e quando ne avremo abbastanza le ultime 2 indispensabili istruzioni provvederanno alla corretta chiusura del programma. |
|
Prima di chiudere desidero
segnalarti un paio di particolarità:
|
l'istruzione MOV AL,CS:[SI] si legge: sposta in AL (registro a 8 bit) il byte contenuto nella locazione puntata da CS:[SI]; personalmente amo puntare le locazioni con il segment override CS:, anche se questo costa un byte di codice macchina in più; la cosa però non è strettamente necessaria e l'istruzione MOV AL,[SI] sarebbe andata bene lo stesso, data la natura intrasegmentale di un programma di tipo COM; faccio notare che però in questo caso l'istruzione sarebbe stata compilata con riferimento al registro di segmento DS. |
|
nelle operazioni di rientro e, in generale, nell'esecuzione dei salti non condizionati a me piace usare l'operatore SHORT (JMP SHORT xxx00); in questo caso si guadagna un byte di codice macchina, sempre che l'istruzione possa essere compilata; se la distanza tra il punto di partenza e quello d'arrivo è eccessiva viene infatti segnalato error A2053: Jump out of range by nnn byte(s), per cui, come ben spiegato nella pagina dedicata a JMP, l'operazione non è possibile e basta non mettere l'operatore... |
|
Palestra Apprendisti | Esercizio n° A004 2/6 | |||||||
27 di 157 |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|