begin process at 2010 03 19 09:25:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

[ASM] memset


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[ASM] memset

dimanche 19 avril 2009 à 18:10:31 | [ASM] memset

Ilsundal

Bonjour a tous,

je dois recoder la fonction memset(char *str, char c, int len) en ASM x86, le probleme c'est que je ne vois pas trop comment faire. j'ais creer un petit bout de code qui ne fonctionne pas des masse, si quelqu'un pourait m'aider.

Pour info le resultat de mon code est super etrange puisqu'il remplace ma "str" par un bon de text d'un printf appeler 4 ligne plus haut dans mon code c.

merci de votre aide !

==== CODE C ====
int             main(void)
{
  char          *txt;

  txt = malloc(sizeof(*txt) * 20);

  write(1, "START\n", 6);
  printf("LEN : %d\n", strlen("Bonjour"));
  printf("LEN : %d\n", _strlen("Bonjour"));
  printf("POS DE 'p' : %s\n", _strchr("Bonjour", 'p'));
  printf("POS DE 'n' : %s\n", _strchr("Bonjour", 'n'));

  strcpy(txt, "Salut les amis");
  printf("BEFORE MEMSET : %s\n", txt);
  txt = (char *)_memset(txt, 'c', 20);
  printf("AFTER MEMSET : %s\n", txt);
  write(1, "STOP\n", 5);
  return (0);
}



===== CODE ASM DU MEMSET =====
section  .txt
        global _memset

_memset:
        push    edi
        push    esi
        mov     edi,            [esp + 4]       ; PREND LE PREMIER ARGUMENT (CHAR *)
        lea     eax,            [edi]           ; LA VALEUR DE RETOUR
        mov     esi,            [esp + 8]       ; LE CHAR A UTILISER POUR SETx
        mov     ecx,            0               ; INIT. A ZERO LE COMPTEUR

_loop:
        mov     edi,            [esi]
        cmp     ecx,            [esp + 12]      ; TEST SI COMPTEUR EST EGALE A ARGU. 3
        je      _end                            ; IL EST TROUVE DONC ON SE CASSE

        inc     ecx                             ; INCREMENT ESI POUR CE PROMENER DANS LA CHAINE
        inc     edi                             ; INCREMENT LE COMPTEUR DE +1
        jmp     _loop                           ; ON RECOMMENCE LE TRAITEMENT

_end:
        pop     esi
        pop     edi
        ret

____________________
Ma Quete n'est pas Terminee
dimanche 19 avril 2009 à 22:50:46 | Re : [ASM] memset

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

memset(char *str, char c, int len)

c'est le proto, pour autant il ne faut pas en faire une fonction (call memset), ce serait contre productif.
Un compilo C correct met toujours ces bouts de code en inline.

DISONS:
EAX = str
DL = c
ECX = len

memset:
 mov [eax], dl
 inc eax
 dec ecx
 jne memset

Suffit d'utiliser les registres libres à un certain moment dans le code qui a besoin d'un memset.

ciao...
BruNews, MVP VC++



Cette discussion est classée dans : txt, printf, char, memset, edi


Répondre à ce message

Sujets en rapport avec ce message

lecture d'un fichier txt [ par rana ] est ce que quelqu un pourrrait me corriger ma macro pour lire un fichier txt qui ne marche pas c tres important merci ;lecture dans le fichier1macro L Utilisation de printf avec compilo GCC [ par MattXSFR ] J'ai un petit problème assez étrange, et j'arrive pas à le résoudre.J'ai fait un programme en ASM syntaxe GNU qui utilise la fonction printf pour affi codage de printf et scanf [ par krater ] bonjour a tous, je suis en train de réaliser un compilateur et je suis un peu bloquer par la lecture d'une chaine. en effet, mon compilo ne gere que l addition d'entier [ par rhumsek ] bonjourvoici un programme qui doit additionné les nombres d'un tableau, celui doit afficher comme résultat 1500 mais il affiche 1600, pouvez vous m'ai strrev [ par vecchio56 ] Je regarde le fichier strrev.asm qui est utilisé au moins pour les debogages et je remarque que c'est une traduction d'un algorithme écrit en C qui es Copier chaine [ par DeAtHCrAsH ] Lu,Je débute en ASM et je cherche des exemples et des cours un peu partout. Pour l'instant j'essaye d'apprendre a maitriser l'uitlité des registres ma pic16f84 serin [ par h82kev ] bjr à tousvoilà mon problèmej'utilise un pic16f84 pour un banc de test pour modemlorsque j'appui sur un bouton poussoir (pin 7), je veux envoyer un ca printf avec win32 [ par ibroman ] Je voudrait savoir comment apeller la fonction "PRINTF" connut en language C pour affichier du texte a partir de l'assembleur grace a l'api win32 ?ibr convertir un char[] en LPCTSTR [ par hansmeier ] Bonjour, J'aimerait savoir comment convertir 1 variable char en LPCTSTR en asm ? En C++ : char var2[11]="HELLO" LPCTSTR var1=var2 Merci pour vos fu afficher un nom en fonction d'un algo quelconque [ par pseudo nul ] bonjour comment  modifier ce bout de code  en masm 32 pour faire afficher dans la case serial (edi) un numéro de serie en faisant la somme de la valeu


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales