• [^] # Re: Type de compilation ?

    Posté par . En réponse au message Différence affectation de structure et memcpy. Évalué à 3.

    ATTENTION je fais ca de mémoire ca remonte a loin le temps ou je codais en asm x86
    donc il peut y avoir des erreurs de ma part

    Code qui plante

     pushl %ebp ->sauve ebp
     movl %esp, %ebp ->recupere addresse stack frame
     pushl %edi -> sauve les registrers (consomme donc +12 octet de stack)
     pushl %esi
     pushl %ebx
     subl 176,ドル %esp ->allocation d'espace dans la stack frame (176=2*88) qui doit etre la taille de chaque struct
     leal -188(%ebp), %edx ->calcul adresse des structures
     leal -100(%ebp), %ebx ->100=88+12 (pose des registre dans la stack) 
     movl 22,ドル %eax ->taille des data à copier (en dword,22*4=88)
     movl %edx, %edi ->destination
     movl %ebx, %esi ->source
     movl %eax, %ecx ->taille
     rep movsl ->copie de 22 dword de -188 à -100 puis incremente 
     movl 0,ドル %eax ->return 0
     addl 176,ドル %esp ->liberation d'espace de pile
     popl %ebx ->restoration des registres 
     popl %esi
     popl %edi
     popl %ebp
    
    

    Code qui plante pas

     andl $-16, %esp ->align la pile sur 16 octet 
     subl 192,ドル %esp ->alloue taille 192 octet dans la stack frame (2*88+16)
     movl 88,ドル 8(%esp) ->arg 3 88 ->dans la stack
     leal 104(%esp), %eax ->calcule une adresse STK+104 (104=88+16)
     movl %eax, 4(%esp) ->pose l'adresse en arg2
     leal 16(%esp), %eax ->calcul une adresse STK+16
     movl %eax, (%esp) ->pose l'adresse en arg1
     call memcpy ->apelle sous fonction
     movl 0,ドル %eax ->return 0
     leave ->oui mais il est ou le ENTER ? a mon avis il manque encore un peut de code en préambule.