AlexDelPiero10
21-12-2009, 12:21
ragazzi mi serve una mano,non sto riuscendo a capire una cosa
per quanto riguarda la gestione delle stringhe,l'indirizzo della stringa viene memorizzato in DSX;il primo byte della locazione di memoria rappresenta la dimensione del buffer,mentre il secondo byte rappresenta il numero di caratteri effettivamente letti
è proprio del secondo byte che non capisco
se mi serve sapere il numero di caratteri letti come devo fare?
help me
ragazzi mi serve una mano,non sto riuscendo a capire una cosa
per quanto riguarda la gestione delle stringhe,l'indirizzo della stringa viene memorizzato in DSX;il primo byte della locazione di memoria rappresenta la dimensione del buffer,mentre il secondo byte rappresenta il numero di caratteri effettivamente letti
è proprio del secondo byte che non capisco
se mi serve sapere il numero di caratteri letti come devo fare?
help me
Non capisco la tua preoccupazione, mi sembra tu ti sia risposto da solo :D
A parte gli scherzi, forse confondi la dimensione massima del buffer e la dimensione della stringa effettivamente letta; un esempio:
( Assumo che tu stia programmando sotto MS-DOS con assemblatore TASM )
La dichiarazione del buffer và nel segmento dati ed è:
nomeStringa db dimensioneBuffer, 0, lunghezza dup(00h)
"nomeStringa" è il nome che vuoi dare alla stringa
"dimensioneBuffer" è la dimensione del buffer, che in pratica è (lunghezza+2).
"lunghezza" è la lunghezza MASSIMA della stringa cioè il numero massimo di caratteri che possono stare nel buffer; se hai mai programmato in C(++) è come scrivere:
char nomeStringa[lunghezza];
Ora il codice per prendere in input la stringa, attraverso la chiamata al Dos, è:
lea dx, nomeStringa ; o anche mov dx, offset nomeStringa
mov ah, 0Ah
int 21h
dopo aver eseguito quel codice, il buffer avrà la seguente struttura:
dimensioneBuffer (1 byte), numeroCaratteriLetti (1 byte), "stringa", spazioRimanente
Ora, se vuoi caricare nel registro CL il numero di caratteri letti, ti basterà scrivere:
mov cl, nomeStringa+1
Tutto qui :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.