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° A027 3/6 [130 di 157] 

               

Analisi del Codice · Acquisizione operandi · Conversione operandi · Somma operandi · Conclusioni

Aritmetica con Numeri Binari - SOMMA di 2 numeri DECIMALI a 2 cifre
Dettaglio sulla Prima Fase: acquisizione dei 2 operandi

               

           Aggiornato 12 febbraio 2007 - [nel sorgente Es027.ASM sostituito JG In_dato con JA In_dato; ricompilare l'esercizio]
bulletLa prima fase del progetto si occupa dell'acquisizione degli operandi da Tastiera:

  

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

  

bullet

Come si può vedere consiste in 2 pezzi di codice quasi uguali; in entrambi:
bullet

propone un messaggio di richiesta: "Digita il primo (o il secondo) operando (massimo 2 cifre, da 0 a 99):"

bullet

fissa la posizione di stampa e il colore per il dato in acquisizione

bullet

punta una variabile locale (Depo1 o Depo2) dimensionata per accogliere l'operando in acquisizione

bullet

affida alla Procedura locale In_dato il compito dell'effettiva acquisizione

  

bullet

La Procedura In_dato rileva la pressione di tasti esclusivamente numerici, salvando i rispettivi codici ascii nelle locazioni puntate in ingresso da SI:

  

  

bulletIn dettaglio:
bulletrimane in attesa della pressione di un tasto qualunque (CALL KEYwait) lasciando il suo codice ascii in AL
bullet se il tasto premuto è Invio forza il byte 00H (un terminatore) nella stringa e pone fine all'acquisizione
bulletse è più grande dell'ultimo numero, '9'=39H (CMP AL,'9', JA In_dato, Above) o più piccolo del primo numero, '0'=30H (CMP AL,'0', JB In_dato, Below) non ci interessa (si rientra in attesa tasti)

  

001FH   3039H   80FFH
Ascii di Controllo ..... '0'÷'9' ..... Ascii Estesi

<─ JB In_dato NO ───┤

 

├─── NO JA In_dato ──>

0÷31   48÷57   128÷255

               

Suggerimento Non dimenticare le Regole (vedi fondo pagina) che governano la gestione dei numeri senza segno, come i codici Ascii lasciati in AL dalla procedura KEYwait.

  

bullet

se invece si tratta di un tasto autorizzato (numerico) salva il suo codice ascii nella posizione corrente della stringa (MOV CS:[DI],AL) e, prima di rientrare in attesa tasti, punta la locazione successiva della stringa (INC SI) e mette a video il carattere numerico appena salvato (CALL BIOchr1)

  

bullet

Entrambe le variabili locali devono essere predisposte nell'area destinata ai dati del programma, strutturate su 3 bytes, 2 per i potenziali caratteri ascii numerici (decimali) attesi da tastiera e 1 per il carattere terminatore, il byte 00H

  

  

bullet

A questo proposito ti faccio notare una particolarità della Procedura locale In_dato:
bullet

dà per scontato che i dati in acquisizione siano (solo) 2 cifre decimali, cioè non provvede a limitare a 2 il numero di tasti premuti

bullet

se si premono più di 2 tasti l'eseguibile continuerà ad immettere il relativo codice ascii nelle locazioni a partire da quella individuata dall'etichetta Depo1 (o Depo2), occupando anche le locazioni successive a quelle destinate a questo scopo

  

bullet

Questa scelta è discutibile e sconsigliabile ma, anche se la modifica che tenga conto di questo aspetto non è difficile, ho ritenuto di non farla per 2 ragioni:
bullet

il programma avvisa esplicitamente con messaggi sul tipo di informazione da immettere

bullet

come puoi vedere qui sopra, in questo caso il rischio è limitato, essendo le locazioni successive occupate dal testo del titolo, già posto a video, cioè già utilizzato dal programma

  

bullet

Quando progetterai programmi come questo non dimenticare che prevenire è meglio di combattere; prova a pensare cosa sarebbe successo se subito dopo la variabile locale Depo2 fosse cominciato il codice assembly di una procedura o del main program...

    

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