Je cherche à résoudre un exercice que j'ai trouvé en ligne pour me préparer au prochain examen sur Microsoft Assembler. Ainsi, le texte disent que je dois créer un fichier .asm qui fonctionne avec la chaîne:comment trouver un mot dans une chaîne et enregistrer le déplacement
#include <stdio.h>
#include <string.h>
int saveworddisplacement(char *s, char *d, char *word1);
int main(){
char s[25] = { "sopra la panca la capra campa" };
char d[25] = {""};
char word1[] = { "capra" };
saveworddisplacement(s, d, word1);
//printf("%s\n", s);
printf("%s", d);
getchar();
}
La fonction (en MASM) doit travailler sur la première chaîne « l » et le mot « word1 » puting le résultat sur la deuxième chaîne « d » ... et la sortie doit être (c'est 'et « word1 »):
“Sopra la panca la capra campa”
“ capra ”
Alors saveworddisplacement() mettre un espace « d » quand il trouve pas 'word1' dans 's' ... Je l'essaie beaucoup de fois mais ça ne marche pas! Alors maintenant, j'essaie de vous demander ... Merci beaucoup!
S'IL VOUS PLAÎT SEULEMENT ASM ou MASM!
EDIT: ce que j'ai essayé de le faire:
.586
.model flat
.code
_saveworddisplacement proc
;pre
push ebp
mov ebp,esp
push ebx
push edi
push esi
;clean registers
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
xor esi, esi ;index source-dest
xor edi, edi ;index word
mov eax, dword ptr[ebp+8] ;source
mov ebx, dword ptr[ebp+12] ;dest
mov ecx, dword ptr[ebp+16] ;word
begins: ;slide source
mov dl, byte ptr[eax+esi*1]
cmp dl,0
je finishs ;source finish
begind: ;slide word
mov dh, byte ptr[ecx+edi*1]
cmp dh,0
je finishd
cmp dh,dl
jne nofound
;if it arrive here letters are equals
push edi ;save index value in the stack
push esi
found:
mov byte ptr[ebx+esi*1],dh
inc edi
inc esi
mov dh, byte ptr[ecx+edi*1]
mov dl, byte ptr[eax+edi*1]
cmp dh,dl
je found ;again increasing index esi,edi
cmp dh,dl
jne nofound2 ;oh shit thats not the word i am searching
nofound2: ;pop the index and puting "space" in 'dest'
pop esi
pop edi
mov byte ptr[ebx+esi*1],32
inc esi
xor edi,edi
jmp begins
nofound: ;at the first step (extern label) letters are differents
mov byte ptr[ebx+esi*1],32
inc esi
jmp begins
finishd: ;finished the word
mov dl, byte ptr[eax+esi*1]
cmp dl,0
je finishs
mov byte ptr[ebx+esi*1],32 ;put space in the right of the word
inc esi
jmp finishd
finishs:
mov byte ptr[ebx+esi*1],0 ;puting "end of file" in dest
;post
pop esi
pop edi
pop ebx
mov esp,ebp
pop ebp
ret
_saveworddisplacement endp
end
C-tag supprimé (n'a rien à voir avec C). –
Montrez l'exemple de ce que vous avez essayé pour avoir une idée de votre processus de pensée. –
Ok merci beaucoup! Maintenant, il y a un exemple :) –