|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
[Assembly] lunghezza stringa
Ciao a tutti
volevo solo una conferma da voi... non esiste una direttiva per l'assemblatore che calcola la lunghezza di una stringa, vero? bisogna farsi un ciclo all'interno del programma, no? grazie
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
; INPUT DS:SI -> stringa
XOR CX, CX
JMP LOOP_LEN_2
LOOP_LEN:
INC CX
INC SI
LOOP_LEN_2:
CMP [BYTE SI],0
JNE LOOP_LEN
; OUTPUT CX = lunghezza
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
Quote:
non ho ben capito questa istruzione...tu fai una compare tra l'indirizzo, in byte, della stringa e il valore zero... come mai?
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
Quote:
quindi, praticamente scorri SI carattere per carattere finchè non la finisci e quindi il suo contenuto sarà uguale a zero, giusto? in questo modo, però, se manca il terminatore di stringa non funziona giusto? tu così assumi che la stringa termini con uno 0, no? ![]() grazie mille per la disponibilità
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" Ultima modifica di Gandalf_BD : 23-11-2006 alle 12:28. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Poi ovvio che è il programmatore che deve sapere su cosa sta lavorando. Tra l'altro il codice che ho scritto si può anche riscrivere così: Codice:
XOR CX, CX
LOOP_LEN:
CMP [BYTE SI],0
JE LOOP_END
INC CX
INC SI
JMP LOOP_LEN
LOOP_END:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
Quote:
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ma bisogna comunque fare un po' di setup vari ... il valore di (E)CX lo devi mettere al massimo, AL a zero, devi settare il flag di direzione e alla fine fare un semplice calcolo per ottenere il reale numero di caratteri.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
string1 DB "Ciao amico" string2 DB "Ciao amico mio" lung EQU $-string2 cld mov cx,lung mov si,OFFSET string1 mov di,OFFSET string2 repe cmps ;confronto jnz sono_uguali ;se ZF=0 sono uguali, altrimenti... dec di ;posiziono i puntatori sul carattere diverso dec si ... ... sono_uguali: volendo calcolare solo la lunghezza mettendo un "inc" contatore ma solo per una stringa facendo il loop posso determinarne la lunghezza trovando appunto la lunghezza in "contatore". ciao |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
grazie a tutti
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Altra versione:
Codice:
; ES:DI = Puntatore alla stringa cld mov cx,0FFFFh xor al,al repne scasb not cx dec cx ; CX = Lunghezza stringa |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
LOOOOL ti aspettavo!!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:06.











non ho ben capito questa istruzione...








