spiky31
Messages postés106Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention11 février 2008
-
18 févr. 2006 à 11:46
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 2014
-
20 févr. 2006 à 10:18
Bonjour
Voila j'ai commencé ce matin a programmer en assembleur intel et j'aurais voulu avoir votre avis (Je me considére pas vraiment comme un noob vu que j'ai fais beaucoup de programmes en assembleur 68000 mais bon ...) :
J'ai fait une version de "strcpy" en assembleur quoique ce n'est pas mon but final (heureusement !!) mais c'est déja un début ...
voici le code :
__declspec(naked) void __fastcall myStrCpy(char *dest,char *src)
{
__asm
{
mov [esp - 4],eax
mov al,byte ptr[edx]
mov byte ptr[ecx],al
or al,al
jnz short L1
mov eax,[esp - 4]
ret 0
L1 :
mov [esp - 8],esi
xor esi,esi
L2 :
inc esi
mov al,byte ptr[edx + esi]
mov byte ptr[ecx + esi],al
or al,al
jnz short L2
mov esi,[esp - 8]
mov eax,[esp - 4]
ret 0
}
}
BNINLINE char* bnstrcpy(char *dst, char *src) // return ptr sur NULL final
{
__asm {
mov eax, dst
mov ecx, src
dec eax
LcpyLoop:
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jz short LcpyOut
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jz short LcpyOut
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jnz short LcpyLoop
LcpyOut:
}
}
#endif
un strcpy doit être inliné (comme une macro), un appel de fonction coute cher.
bnstrcpy() retourne pointeur sur fin de copie, permet chainage sans reparcourir la chaine. C'est autrement moins couillon que strcpy qui retourne ce qu'on lui donne et donc qu'on avait déjà.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 févr. 2006 à 09:08
Ecrire sous ESP ne pose aucun problème tant qu'on ne fera pas un 'call' ou truc de ce genre faisant bouger ESP, c'est plus performant que 'push pop' mais bien entendu à réserver au mode protégé.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 févr. 2006 à 18:05
mémoire non allouée ???
On est sensé s'adresser ici à des développeurs, pas des VBistes, on va donc considérer les buffers alloués comme il se doit sinon tout est perdu.