sau Inregistrare
  
Pagina 1 din 1
  • Nu poti crea un subiect nou
  • Nu puteti raspunde pe acest topic

strlen in assembler cum se poate determinat lungimea sirului de caractere Evaluare topic: - - - - -

#1 Utilizator offline   danyel7002 

  • Boboc
  • Pip
  • Grup: Full Members
  • Mesaje: 30
  • Inregistrat: 20-May 07

  Scris 09 November 2007 - 04:18 PM

Avand in vedere ca nu e frumos :jester: sa intrebi userul cate litere are cuvantul si nici sa stabilesti un caracter ca semn final, ce fel sar putea face pt a se afla lungimea unui sir de caractere?
0

#2 Utilizator offline   soarce 

  • Trandafir
  • PipPipPipPip
  • Grup: Full Members
  • Mesaje: 410
  • Inregistrat: 13-October 07

Scris 09 November 2007 - 06:40 PM

Privind prin prisma programarii in limbaj de asamblare totul sta sub motto-ul "cand pui ceva in memoria calculatorului tine minte ce si unde ai pus". Cu alte cuvinte daca nu definesti un simbol care sa marcheze sfarsitul sirului de carcatere nu vei putea deduce unde se termina, deci trebuie sa cunosti un minim de informatie despre sirul de caractere pe care vrei sa-l citesti folosind un program in cod masina.

Totusi, daca sirul de caractere a fost creat de alta aplicatie atunci vei cunoaste care este simbolul de terminare a sirului. De exemplu, daca te referi la determinarea lungimii unui sir ce respecta conventia limajului C te poti uita la pagina de mai jos:


http://www.int80h.org/strlen/
0

#3 Utilizator offline   danyel7002 

  • Boboc
  • Pip
  • Grup: Full Members
  • Mesaje: 30
  • Inregistrat: 20-May 07

  Scris 09 November 2007 - 11:00 PM

Ms pt raspuns! Sunt bucuros ca am gasit pe cineva care se pricepe si ar putea sa ma ajute!
mov dx,offset string
mov bx,0 ;buffer tastatura
mov cx,10 ; la ce se foloseste cx cand deja dimensiune declarata e 32 byte????????
mov ah,3fh
int 21h
.data
string db 32 dup(1fh)
As vrea daca se poate explicatii pt mov dx,offset string. Ce se pune in dx? offset e distanta de la adressa initiala...dar aceasta variabila vine incrementata singura???... Ce face partea asta de program mai detaliat?
Am inteles ca aceasta este secventa cu care citesc sirul de caractere care vine memorat in vectorul de caractere string. Totodata cu declararea am initializat tot vectorul cu caracterul ascii ce corespunde la adressa 1fh(triunghi cu viful in jos).
Ce ar trebui exact sa fac pt a conta lungimea sirului?
ripet:
lea si,string
mov al,[si]
inc cc ;se incrementeaza variabila care nr caracterele
inc si
cmp al,1fh
jne ripet
Imi intra in ciclul infinit, nu stiu motivul...am gresit ceva :jester:

Aceasta postare a fost editata de danyel7002: 09 November 2007 - 11:34 PM

0

#4 Utilizator offline   soarce 

  • Trandafir
  • PipPipPipPip
  • Grup: Full Members
  • Mesaje: 410
  • Inregistrat: 13-October 07

Scris 10 November 2007 - 01:13 AM

din pacate nu pot sa-ti dau un raspuns detaliat la intrebarile tale pentru ca nu am ajuns sa programez in limbaj masina de 80x86, m-am oprit la Z80 :jester:


offset string s-ar putea sa fie adresa relativa la care este inmagazinat sirul tau. inclin sa cred ca ai afisat doar bucati din program. registrul cx s-ar putea sa fie folosit de subrutina apelata prin "int 21h" care banuiesc ca este cunoscuta.

referitor la a doua parte:

1) instructiunea lea trebuie sa fie inaintea etichetei "ripet" pentru ca altfel de fiecare data cand executi saltul la ripet registrul si va indica pozitia de inceput, adica bate pasul pe loc.

2) tu initializezi niste locatii de memorie cu valoarea 1fh si apoi cand citesti vrei sa iesi din bucla cand se intalneste valoarea asta, cu alte cuvinte bucla ar trebui sa fie parcursa o singura data !!

cred ca iti intra in ciclu infinit pentru ca registrul si nu este initializat corespunzator.

trebuie sa rabdare cu programele in cod masina, si cum ne zicea un profesor din liceu. "calculatorul are intotdeauna dreptate, el face ceea ce ii zici tu". este recomandat sa utilizezi programe specializate care-ti permit executia pas cu pas a codului si astfel poti vedea exact valorile registrilor, ale flag-urilor.

Aceasta postare a fost editata de soarce: 10 November 2007 - 01:17 AM

0

#5 Utilizator offline   danyel7002 

  • Boboc
  • Pip
  • Grup: Full Members
  • Mesaje: 30
  • Inregistrat: 20-May 07

Scris 10 November 2007 - 12:02 PM

1.lea intradevar trebuia sa fie pus prima de ripet...mia fugit...MS
2. ripet nu se face numai 1 data pt ca vectorul a fost initializat la inceput cu 1fh dar apoi caracterele citite au inlocuit semnul ascii(1fh). deci ramane sirul de caractere citit si apoi restul este plin de 1fh. cand intalneste 1fh iese din ciclu si asa in cc am salvat nr de caractere.
0

#6 Utilizator offline   soarce 

  • Trandafir
  • PipPipPipPip
  • Grup: Full Members
  • Mesaje: 410
  • Inregistrat: 13-October 07

Scris 10 November 2007 - 04:11 PM

ok. dupa o cautare fara efort pe internet am gasit pagina de mai jos, cred ca o sa-ti fie utila, gasesti raspunsul si la intrebarea despre cx:

http://spike.scu.edu...interrupts.html
http://spike.scu.edu...rupts.html#ah3f

subrutina int 21h cu ah=3fh iti furnizeaza numarul de caractere citite in ax, de asemenea trebuie sa tratezi si cazul unei erori, vezi cf, pentru ca un utilizator extern nu va sti daca totul a decurs normal sau nu.
0

#7 Utilizator offline   danyel7002 

  • Boboc
  • Pip
  • Grup: Full Members
  • Mesaje: 30
  • Inregistrat: 20-May 07

Scris 11 November 2007 - 06:21 PM

CX = number of bytes to read

Am reusit sa inteleg cat de cat. Faza cu "cx=number of bytes to read" nu e valabila pt tastatura...eu am pus cx=30 si citesc de la tastatura mereu mai putin de 30(lucreza cu bufferul de la tastatura-citeste 30byte cand in buffer sunt numai 20?)...nu inteleg-in declaratie se scrie nr maxim de caractere...iar aici e ceva in plus, ma rog, poate e util cand se citeste un file.
0

Reclama



Impartaseste acest subiect:


Pagina 1 din 1
  • Nu poti crea un subiect nou
  • Nu puteti raspunde pe acest topic


Subiecte similare Collapse

  Topic Deschis de Replici Vizualizari
Replici noi Cum transform AIFF in MP3?
help............please!!!!!!!!!
zexelica  10 7.258
Replici noi citirea sirurilor in c++ jokerbla  8 6.425
Replici noi Visual basic «Nsl»  15 4.861
Replici noi Cum Fac un CD care nu poate fi copiat
Cum Fac un CD
Laurentiu_gogu  17 6.006
Replici noi Comis-Voiajor C/C++ Urgent PLS! Equ  1 1.265