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?
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?
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?
No MP tecnici (non rispondo nemmeno!), usa il forum.
sisiOriginariamente 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?
potresti aiutarmi nella realizzazione?
domani ho un esame e potrebbe servirmi
Sisi ... cosa? Ti ho fatto una domanda ... non puoi dire sisi ...Originariamente inviato da kaitokid
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 ...).potresti aiutarmi nella realizzazione?
domani ho un esame e potrebbe servirmi
No MP tecnici (non rispondo nemmeno!), usa il forum.
era un si,sono compresi i 2 estremi ....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 ...).
#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
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 ...
No MP tecnici (non rispondo nemmeno!), usa il forum.