Sari la conținut
Forum Roportal
danyel7002

Algoritmi diversi-palindrom-assembler

Evaluează acest topic

Postări Recomandate

M-am tot gandit la metode pt a verifica in assembler daca un sir de caractere este palindrom(citit de la stanga sau de la dreapta e acelasi...ex radar, 1907091...).

Am gasit 3 care cat de cat fac acelasi lucru:

1. se verifica prima litera cu ultima, a 2 a cu penultima samd

2. se inverseaza sirul de caractere si apoi se verifica prima litera a sirului inizial cu prima litera a sirului inversat, a doua cu a doua samd(ca in c++ strrev)

3. se taie sirul inizial in 2 bucati prima ramane asa iar a 2a se inverseaza, se verifica apoi ca la metoda 2 de mai sus

 

As dori sa aflu alte algoritme pt a verifica daca un sir este palindrom...daca se poate adaptate si la assembler:d

ms

Editat de danyel7002

Partajează acest post


Link spre post
Distribuie pe alte site-uri

eu as alege prima metoda pentru simplu motiv ca nu necesita spatiu suplimentar de stocare pe cand celelalte doua da.

 

 

pentru mai multi algoritmi in cod masina iti recomand cartile lui D. Knuth din seria "The art of computer programming" (3 volume)

Partajează acest post


Link spre post
Distribuie pe alte site-uri
un posibil algoritm ar fi recursivitatea...numai ca in assembler nush cum se face...

 

Recursivitatea este algoritm?

In cazul tau e mult mai rapid si probabil mai simplu sa-l faci iterativ. Daca tot lucrezi in asamblare ar trebui sa stii ca recursivitatea penalizeza viteza de executie pt ca la fiecare apel recursiv se salveaza parametrii in stack.

Primul algoritm pe care l-ai listat pare cel mai eficace si mai simplu

 

http://oopweb.com/Assembly/Documents/asm/Volume/asm.htm

Editat de Argv

Partajează acest post


Link spre post
Distribuie pe alte site-uri

da, recursivitatea nu este un algoritm ci o metoda.

limbajul de asamblare nu are definit apelul recursiv si de aceea va trebui sa te ocupi de toata bucataria interna a apelului recursiv: salvari de date (registrii) in stiva.

 

 

se gasesc pe internet exemple de implementare a apelului recusiv in limbaj masina, insa cred ca toata chestia ramane la nivel didactic.

Partajează acest post


Link spre post
Distribuie pe alte site-uri

buna. am o intrebare legata de aceasta problema. am incercat sa o fac comparand primul element din sir cu ultimul, al doilea cu penultimul si tot asa. Eu m-am gandit sa numar elementele din sir (asta am reusit), dar nu stiu cum pot folosi al n-lea element din sir.

am scris asa:

MOV SI, OFFSET SIR
MOV AL, [sI]
CMP AL, SIR[NR] (SIR[NR] m-am gandit sa fie al nr-lea element, dar nu functioneaza).
.............
Imi puteti da o idee de rezolvare?

Partajează acest post


Link spre post
Distribuie pe alte site-uri

Acesta este codul, nu imi apar erori, dar dupa ce introduc sirul de caractere nu-mi afiseaza nimic. Ce este gresit?

 

.MODEL SMALL

.STACK 100H
.DATA
NR DB '00','$'
SIR DB 50 DUP('$')
INV DB 50 DUP('$')
mesaj db 13,10,'Introduceti sirul: ','$'
mesaj_nu db 13,10,'Numarul nu este palindrom!','$'
mesaj_da db 13,10,'Numarul este palindrom!','$'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AH,9H
MOV DX,OFFSET mesaj
INT 21H
MOV BX,0
MOV CX,50
MOV AH,3FH
MOV DX,OFFSET SIR
INT 21H
MOV SI,OFFSET SIR
E1: MOV AL,[sI]
CMP AL,0DH
JNE E2
E2: INC SI
JMP E1
DEC SI
MOV DI,SI
MOV SI,OFFSET SIR
E3: MOV AL,[sI]
CMP AL,0DH
JNE E4
E4: MOV BL,[sI]
MOV AL,[DI]
CMP AL,BL
JNE E5
INC SI
DEC DI
JMP E3
E5: MOV AH,09H
MOV DX, OFFSET mesaj_nu
JMP sfarsit
MOV AH,09H
MOV DX,OFFSET mesaj_da
INT 21H
sfarsit:MOV AH,4CH
INT 21H
END

Partajează acest post


Link spre post
Distribuie pe alte site-uri

Buna. Cum pot salva elementul din mijlocul unui sir?

Am incercat asa:

mov bx,2

div bx

mov si,ax ;catu este salvat in ax

mov cl,[si]

mov char,cl

 

dar imi afiseaza dimensiunea sirului.

Ma puteti ajuta?

Partajează acest post


Link spre post
Distribuie pe alte site-uri

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum

×