PDA

Visualizza la versione completa : [Assembly8086] acquisizione numero


kaitokid
21-12-2009, 16:00
devo acquisire un numero che può andare da 0 a 65536....
non ho ancora scritto niente di codice...
chiaramente devo acquisire in input il valore e confrontarlo prima con 0 e poi con 65536...o sbaglio?

oregon
21-12-2009, 19:55
L'input viene effettuato tramite una stringa ASCII (con la funzione del DOS apposita).

La stringa deve essere poi convertita in binario in un registro o può rimanere nel buffer in ASCII?

P.S. In ogni caso, forse il valore deve essere compreso tra 0 e 65535 estremi inclusi ... giusto?

kaitokid
21-12-2009, 20:11
Originariamente inviato da oregon
L'input viene effettuato tramite una stringa ASCII (con la funzione del DOS apposita).

La stringa deve essere poi convertita in binario in un registro o può rimanere nel buffer in ASCII?

P.S. In ogni caso, forse il valore deve essere compreso tra 0 e 65535 estremi inclusi ... giusto?

sisi
potresti aiutarmi nella realizzazione?
domani ho un esame e potrebbe servirmi

oregon
21-12-2009, 20:16
Originariamente inviato da kaitokid
sisi

Sisi ... cosa? Ti ho fatto una domanda ... non puoi dire sisi ...


potresti aiutarmi nella realizzazione?
domani ho un esame e potrebbe servirmi

Certo che ti posso aiutare ... ma tu comincia a scrivere il codice che serve all'input di una stringa di max 5 caratteri (come nell'esempio precedente ...).

kaitokid
21-12-2009, 20:41
Originariamente inviato da oregon
Sisi ... cosa? Ti ho fatto una domanda ... non puoi dire sisi ...



Certo che ti posso aiutare ... ma tu comincia a scrivere il codice che serve all'input di una stringa di max 5 caratteri (come nell'esempio precedente ...).

era un si,sono compresi i 2 estremi ....


#MAKE_COM#
ORG 100h

;INSERIMENTO
MOV DX,offset STR_MAX
MOV AH,0ah
int 21h

MOV CL, STR_CNT

RET

;------------VARIABILI----------
STR_MAX DB 5
STR_CNT DB 0
STR_DAT DB 5 DUP(?)

ecco
ora non so andare avanti

oregon
21-12-2009, 20:54
Il numero massimo di caratteri da prevedere è 6 (e non 5) perchè devi pensare che viene scritto anche il valore ASCII 0D alla fine della stringa (il tasto return).

Tuttavia questo non viene contato e se pressi solamente invio senza inserire dati, il primo carattere sarà 0D ma il valore inserito in CL sarà 0.

Ovviamente, se il valore di CL è zero, vuol dire che non è stato inserito alcun carattere e quindi potresti controllarlo per indicare che c'e' stato un errore.

Quindi provvederai ad azzerare il valore di un registro, ad esempio DX, per inserirci il valore binario finale dopo la conversione

MOV DX,0

Se non è così, inserisci nel registro indice BX l'indirizzo della parte dati della stringa e accedi al carattere con

MOV BX, OFFSET STR_DAT

MOV AL, [BX]

a questo punto

1) dovrai confrontare il valore di AL con l'ASCII del carattere '0' (non deve essere minore) e con l'ASCII del carattere '9' (non deve essere maggiore)

2) se i confronti precedenti sono andati a buon fine, devi convertire in binario il valore ASCII presente in AL, eseguendo una operazione AND per azzerare il bit 5

3) a questo punto dovrai moltiplicare per 10 il valore di DX e aggiungere il valore di AL appena convertito

Adesso aumenterai il valore di BX e ripeterai in un loop (usando CL come contatore), dall'istruzione MOV AL, [BX]

Come vedi, non è semplicissimo per chi non lo sa fare e ha un esame domani ... forse ti ci voleva un po' piu' di tempo e studio ...

Loading