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

Libreria GIOBE.ASM

Home » Programma il Computer » Tutorial Assembly

Raccolta di Procedure

  Raccolta di Procedure ASM

Dec2Byt [26 di 54] 

    

           Aggiornato 13 febbraio 2007
bulletConverte fino a 2 caratteri ASCII decimali nel numero binario a 8 bit che corrisponde loro.

 

bulletLa Procedura si chiama in questo modo:

               

  

bulletIn ingresso bisogna predisporre:
bulletSI con l'indirizzo di Offset della locazione che contiene il primo dei caratteri Ascii della stringa da convertire.
bulletla stringa da convertire deve essere predisposta dal programma che chiama questa procedura nella sua area destinata ai dati del programma con l'aiuto di un'etichetta, scelta a piacere dal programmatore, e della pseudooperazione DB
bulletla stringa da convertire deve essere strutturata nel modo indicato dalla figura, rigorosamente con 2 caratteri solo Ascii numerici (non necessariamente inizializzati a '0') e terminata con il byte 00H:

  

 

bulletIn uscita lascia:
bulletAL con il numero esadecimale a 8 bit corrispondente ai 2 carattere Ascii della stringa da convertire
bullet se la stringa è vuota (cioè se contiene solo il terminatore 00H) la procedura termina immediatamente con AL=00H
bullet se la stringa contiene più di 2 caratteri la procedura termina subito e lascia in uscita AL=FFH, utile per esercitare un eventuale controllo d'errore dopo la sua chiamata

               

bulletLa seguente Area di Testo mostra il Modulo varie13 utilizzato per inserire la Procedura nella Libreria Giobe.ASM/LIB:

               

Dec2Byt / varie13

NB:           se il testo contenuto nell'Area   ti sembra strano (cioè se contiene
 caratteri inconsueti) non hai ancora installato il font
Giobe.TTF : clicca qui!!

               

bulletL'analisi del codice mette in evidenza la seguente sequenza di operazioni:
bulletcalcola (in CX) l'effettivo numero di caratteri numerici presenti nella stringa da convertire, puntata da CS:SI e terminata dal carattere 00H
bulletpredispone in AL il valore FFH e pone termine alla procedura se la stringa contiene più di 2 caratteri
bulletpredispone in AL il valore 00H e pone termine alla procedura se la stringa è vuota (cioè se contiene solo il terminatore 00H)
bulletin tutti gli altri casi assume il primo byte sotto test dalla stringa (MOV AL,CS:[SI]), certamente del tipo 30H÷39H, essendo corrispondente ad un ascii numerico, '0'÷'9'; basta ora sottrargli 30H (SUB AL,'0') per convertirlo nel valore desiderato, 00H÷09H
bullet nonostante la richiesta predisposizione con 2 caratteri, la stringa potrebbe essere composta anche da 1 solo carattere; se viene rilevata questa situazione (CMP CX,0001H) si pone termine alla procedura lasciando in AL il valore binario appena calcolato
bulletaltrimenti (la stringa contiene 2 caratteri) lo moltiplica (MUL AH, vedi MUL) per 10 (MOV AH,10) e gli somma il secondo byte sotto test, dopo averlo prelevato dalla posizione successiva (INC SI) nella stringa e convertito nel corrispondente valore binario (SUB AL,'0')

               

bulletDi solito questa Procedura viene attivata subito dopo aver acquisito la stringa da tastiera, con una procedura attenta a filtrare ogni carattere non autorizzato e, possibilmente, in grado di gestire al meglio l'acquisizione con i giusti accorgimenti:
bulletdeve terminare automaticamente dopo la pressione di 2 tasti validi
bulletdeve ammettere la pressione del tasto invio, per consentire la conferma del dato ascii digitato
bulletdeve ammettere la pressione del tasto backspace, per consentire la modifica del dato ascii, durante la digitazione
bulletdeve segnalare con beep la pressione di tasti non autorizzati

  

bulletLa procedura non provvede alla stampa del risultato; se si desidera questo servizio basta chiamare la Procedura Byt2Asc, progettata per generare la stringa ascii esadecimale corrispondente al valore del byte passatole in AL e poi porla a video con il colore precedentemente predisposto in CS:[ATTRIB], nella posizione di stampa corrente.

  

bulletPrima della stampa del risultato è comunque opportuno provvedere alla verifica di eventuali errori, controllando se il valore di AL è FFH
bulletIl nostro progetto si occupa di tutto, come puoi vedere nella prossima pagina.

               

bulletUna simile procedura è stata progettata per la Libreria Pascal (Giobe.TPU), con il nome di INexad.
bulletLa Libreria Giobe.ASM/LIB mette a disposizione anche la Procedura che provvede alla conversione opposta:
bulletla Byt2Dec converte il numero esadecimale a 8 bit (byte) in una stringa Ascii decimale (fino a 3 caratteri scelti tra i numeri da "0" a "9"), posta a video nella posizione di stampa corrente a livello BIOS

  

Attenzione ! NB: La procedura Dec2Byt presente nella libreria Giobe.ASM [Giobe.LIB] contiene una lieve imprecisione, per altro praticamente irrilevante

  

bulletDesidero fare questa precisazione, per amore della correttezza: mi sono accorto [febbraio 2007] di una incongruenza logica nella Dec2Byt, a livello Dec_B1; in questo punto del codice la procedura effettua un controllo sul numero dei caratteri ASCII decimali effettivamente predisposti nella stringa da convertire; per operare questo controllo la versione presente in libreria utilizza le istruzioni CMP CX,2 e JG Dec_B2), nell'intento di verificare se il numero lasciato in CX è maggiore di 2.
bulletIl problema sta nel fatto che, a rigor di logica, l'istruzione JG dovrebbe esser sostituita da JA, come mostrato nel listato corretto presente in questa pagina.
bulletIn fatti il numero da controllare (presente in CX) è decisamente un intero senza segno, per cui la seconda [JA (Above, "superiore a")] è logicamente più propria rispetto alla prima [JG (Great, "maggiore di", "più grande di")], destinata al controllo di numeri interi con segno.

  

bulletTuttavia, il fatto che il processore sia chiamato ad interpretarlo (da JG invece che da JA) come numero con segno è praticamente irrilevante, essendo il numero da controllare comunque positivo e praticamente molto piccolo, quindi identico ad un numero senza segno.
bulletPer questa ragione ho ritenuto di non intervenire sul codice presente nella libreria Giobe.ASM [Giobe.LIB], assolutamente funzionante anche senza questo dettaglio intellettuale, anche per non creare differenze con le migliaia di copie già scaricate, sulle quali è ovviamente impossibile intervenire...

    

Pagina Precedente Libreria GiobeASM Pagina Successiva Dec2Byt   Torna alla Home  del Capitolo3 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
26 di 54
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

    

Giobe.ASM » SET_cur | VIA_cur | RIP_cur | BIOScls| BIOSchr |BIObeep |Acapo| BIOchr1| STAsp| BIOSmsg
Byt2Asc | Wor2Asc | Asc2Byt | Asc2Wor | Byt2Dec | Wor2Dec | Dec2Byt | Dec2Wor
Delay | DelMicro | Del_2000 | Del1500 | Del_1000 | Del_100 | Del_1 | Del500Mi | Del200Mi
Del100Mi | Del010Mi | RIEMPI | KEYwait | Random | INstrin | CambiaCol | MODEtest
RAMchr | RAMcur | RAMmes | RAMcls | RAMcorn | RAMpiu | RAMrecup | RAMbyte | RAMword
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