Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Palindrome en ASM [ Archives / c, c++ et asm ] (bugs2600)
|
Palindrome en ASM
le 30/01/2003 18:09:19

bugs2600
|
Salut, Quelqu'un pourrait-il m'aider, je suis débutant en asm et je dois faire un exrecice sur un palindrome c'est-à-dire que je dois entrer au clavier un mot ou une phrase il le programme dois dire si c'est un palindrome ou non? Merci d'avance
|
|
|
|
Re : Palindrome en ASM
le 30/01/2003 18:09:26

bugs2600
|
------------------------------- Réponse au message : -------------------------------
> Salut, > > Quelqu'un pourrait-il m'aider, je suis débutant en asm et je dois faire un exrecice sur un palindrome c'est-à-dire que je dois entrer au clavier un mot ou une phrase il le programme dois dire si c'est un palindrome ou non? > > Merci d'avance
|
|
|
|
Re : Palindrome en ASM
le 30/01/2003 21:26:29

BruNews
(Admin CS)
|
------------------------------- Réponse au message : -------------------------------
> Salut, > > Quelqu'un pourrait-il m'aider, je suis débutant en asm et je dois faire un exrecice sur un palindrome c'est-à-dire que je dois entrer au clavier un mot ou une phrase il le programme dois dire si c'est un palindrome ou non? > > Merci d'avance
passe ptr sur chaine dans EDX en sortie si EAX == 0 alors EST Palindrome
mov edx, offset chaine call Palindrome test eax, eax jne short ERREUR
Palindrome PROC ; *psz dans EDX mov ecx, edx ; EDX = d, ECX = c xor eax, eax L1: cmp byte ptr[edx], 0 je short L2 inc edx jmp short L1 L2: cmp ecx, edx je short plndExit ; chaine vide dec edx L3: cmp ecx, edx jae short plndExit mov al, [ecx] sub al, byte ptr[edx] jne short plndExit inc ecx dec edx jmp short L3 xor al, al plndExit: ret 0 Palindrome ENDP
ciao...
|
|
|
|
Re : Palindrome en ASM
le 30/01/2003 21:32:37

bugs2600
|
------------------------------- Réponse au message : -------------------------------
Tu ne serais pas expliquer ce que tu as fait sltp, merci
|
|
|
|
Re : Palindrome en ASM
le 30/01/2003 21:54:57

BruNews
(Admin CS)
|
------------------------------- Réponse au message : -------------------------------
> > > > > ------------------------------- > Réponse au message : > ------------------------------- > > Tu ne serais pas expliquer ce que tu as fait sltp, merci tu mets ECX à pointer au debut chaine. ensuite xor eax, eax prepare la sortie OK tu pousses edx jusqu'au zero final de chaine. L2: cmp ecx, edx je short plndExit ; chaine vide dec edx ramène sur dernier L3: cmp ecx, edx ; en C serait while(ECX < EDX) jae short plndExit mov al, [ecx] sub al, byte ptr[edx] jne short plndExit ; ne sont pas egaux donc sort != 0 inc ecx dec edx jmp short L3 xor al, al plndExit: ret 0 aucun param sur pile
|
|
|
|
Re : Palindrome en ASM
le 30/01/2003 22:14:33

bugs2600
|
------------------------------- Réponse au message : -------------------------------
Voilà ce que j'ai fait mais je ne vois ce que je dois modifier pour que sa fonctionne avec ce que tu as fait:
Source:
.MODEL SMALL .STACK .DATA
AcMsg1 db "Entrez un mot ou une phrase: $" AcMsg2 db "Bravo, Il s'agit d'un Palindrome" AcMsg3 db "Non, Il ne s'agit pas d'un Palindrome"
.Code
Palindrome PROC ; *psz dans EDX mov ecx, edx ; EDX = d, ECX = c xor eax, eax L1: cmp byte ptr[edx], 0 je short L2 inc edx jmp short L1 L2: cmp ecx, edx je short plndExit ; chaine vide dec edx L3: cmp ecx, edx jae short plndExit mov al, [ecx] sub al, byte ptr[edx] jne short plndExit inc ecx dec edx jmp short L3 xor al, al plndExit: ret 0 Palindrome ENDP
|
|
|
|
Re : Palindrome en ASM
le 30/01/2003 22:23:09

BruNews
(Admin CS)
|
------------------------------- Réponse au message : -------------------------------
> ------------------------------- > Réponse au message : > ------------------------------- > > Voilà ce que j'ai fait mais je ne vois ce que je dois modifier pour que sa fonctionne avec ce que tu as fait: > > Source: > > .MODEL SMALL > .STACK > .DATA > > AcMsg1 db "Entrez un mot ou une phrase: $" > AcMsg2 db "Bravo, Il s'agit d'un Palindrome" > AcMsg3 db "Non, Il ne s'agit pas d'un Palindrome" > > > .Code > > Palindrome PROC ; *psz dans EDX > mov ecx, edx ; EDX = d, ECX = c > xor eax, eax > L1: > cmp byte ptr[edx], 0 > je short L2 > inc edx > jmp short L1 > L2: > cmp ecx, edx > je short plndExit ; chaine vide > dec edx > L3: > cmp ecx, edx > jae short plndExit > mov al, [ecx] > sub al, byte ptr[edx] > jne short plndExit > inc ecx > dec edx > jmp short L3 > xor al, al > plndExit: > ret 0 > Palindrome ENDP
désolé mais je n'ai fourni qu'une fonction, pas un prog complet. De + il faut préciser quel model et quelle plate forme tu vises. Ma func Palindrome est pour Win32: .586 .model flat, stdcall option casemap :none option prologue:none option epilogue:none
sachant que toute chaine est finie par un zero.
|
|
|
|
Re : Palindrome en ASM
le 31/01/2003 01:26:21

bugs2600
|
------------------------------- Réponse au message : ------------------------------- ------------------------------- Réponse au message : ------------------------------- ------------------------------- Réponse au message : -------------------------------
------------------------------- Réponse au message : -------------------------------
Serais-tu corriger ce qui ne vas pas dans ma boucle sltp pour que mon programme foncrtionne. Merci d'avance
Voilà ce que j'ai fait:
.MODEL SMALL .STACK .DATA
AcMsg1 db "Entrez un mot ou une phrase: $" AcMsg2 db "Bravo, Il s'agit d'un Palindrome" AcMsg3 db "Non, Il ne s'agit pas d'un Palindrome"
AcClav db 50, ?, 51 dup(' ')
.Code
main:
mov ax, @Data mov dx, ax
mov ax, 0003h int 10h
mov ax, 0900h mov dx, offset AcMsg1 ;Fait pointer dx sur AcMsg1 int 21h
mov ax, 0a00h ;Permet d'entrer la chaine de carcr?re au clavier mov dx, offset AcClav ;Fait pointer dx sur AcClav int 21h
mov SI, 0 ;Initialisation de SI ? 0
Boucle: ; *psz dans EDX mov dx, SI ; EDX = d, ECX = c xor ax, ax
L1: cmp byte AcClav[SI], 0 je short L2 inc SI jmp short L1
L2: cmp dx, SI je short plndExit ; chaine vide dec SI
L3: cmp dx, SI jae short plndExit mov al, [dx] sub al, byte AcClav[SI] jne short plndExit inc dx dec SI jmp short L3 xor al, al plndExit: ret 0
Boucle END End Main
|
|
|
|
Re : Palindrome en ASM
le 31/01/2003 10:07:46

BruNews
(Admin CS)
|
------------------------------- Réponse au message : -------------------------------
> ------------------------------- > Réponse au message : > ------------------------------- > ------------------------------- > Réponse au message : > ------------------------------- > ------------------------------- > Réponse au message : > ------------------------------- > > ------------------------------- > Réponse au message : > ------------------------------- > > Serais-tu corriger ce qui ne vas pas dans ma boucle sltp pour que mon programme foncrtionne. Merci d'avance > > Voilà ce que j'ai fait: > > > .MODEL SMALL > .STACK > .DATA > > AcMsg1 db "Entrez un mot ou une phrase: $" > AcMsg2 db "Bravo, Il s'agit d'un Palindrome" > AcMsg3 db "Non, Il ne s'agit pas d'un Palindrome" > > AcClav db 50, ?, 51 dup(' ') > > > .Code > > main: > > mov ax, @Data > mov dx, ax > > mov ax, 0003h > int 10h > > mov ax, 0900h > mov dx, offset AcMsg1 ;Fait pointer dx sur AcMsg1 > int 21h > > mov ax, 0a00h ;Permet d'entrer la chaine de carcr?re au clavier > mov dx, offset AcClav ;Fait pointer dx sur AcClav > int 21h > > mov SI, 0 ;Initialisation de SI ? 0 > > > Boucle: ; *psz dans EDX > mov dx, SI ; EDX = d, ECX = c > xor ax, ax > > L1: > cmp byte AcClav[SI], 0 > je short L2 > inc SI > jmp short L1 > > L2: > cmp dx, SI > je short plndExit ; chaine vide > dec SI > > L3: > cmp dx, SI > jae short plndExit > mov al, [dx] > sub al, byte AcClav[SI] > jne short plndExit > inc dx > dec SI > jmp short L3 > xor al, al > plndExit: > ret 0 > > Boucle END > > End Main
Salut, tu peux aller voir le prog complet dans mes sources. Tu verras comment appeler cette fonction. ciao...
|
|
|
|
Re : urgent Palindrome en ASM
le 02/02/2003 19:45:11

bugs2600
|
------------------------------- Réponse au message : -------------------------------
> > > > > ------------------------------- > Réponse au message : > ------------------------------- > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > ------------------------------- > > Réponse au message : > > ------------------------------- > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > Besoin d'aide pourrais-tu regarder le programme et me dire pourquoi il ne prend pas les espaces et si tu serais le simplifier et me l'expliquer merci d'avance:
MODEL SMALL .STACK .DATA
AcMsg DB 'Entrer une Phrase ou un Mot: $' AcMsg1 DB 'Oui, Un Palindrome $' AcMsg2 DB 'Non, Pas un Palindrome $'
STRING LABEL BYTE MAXLEN DB 50 STRLEN DB ? STRFLD DB 50 DUP(' ')
.CODE
MAIN: MOV AX,@DATA MOV DS,AX
CALL CLS ;Efface l'?crant CALL CURSOR ;Place le curseur ? (0,0) CALL READ
CALL CLS CALL CURSOR
LEA BX,STRFLD MOV CH,00H MOV CL,STRLEN CMP CX,02H JC PAL MOV DX,BX ADD DX,CX DEC DX SHR CX,1
AGAIN: MOV AL,[BX] XCHG BX,DX CMP AL,[BX] JNE NOTPAL XCHG BX,DX INC BX DEC DX LOOP AGAIN
PAL: MOV AH,09H LEA DX,AcMsg1 INT 21H JMP HALT
NOTPAL: MOV AH,09H LEA DX,AcMsg2 INT 21H
HALT: MOV AX,4C00H ;Termine le programme INT 21H
;Efface l'?crant CLS: MOV AX,0600H MOV BH,07H MOV CX,0000H MOV DX,184FH INT 10H RET
;Place le curseur CURSOR: MOV DX,0000H MOV AH,02H MOV BH,00H INT 10H RET
READ: MOV AH,09H ;Message d'affichage LEA DX,AcMsg INT 21H
MOV AH,0AH LEA DX,STRING INT 21H RET
WRITE: MOV AH,09H LEA DX,STRFLD INT 21H RET
End MAIN
|
|
|
Classé sous : palindrome, asm
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
|