[pso] [Windows - Tema1]asm_ mov syscall, eax

Adrian - Razvan Deaconescu razvand at gmail.com
Tue Mar 28 07:40:15 EEST 2006


On 3/28/06, George Adrian Drumea <georgedrumea at rdslink.ro> wrote:
>
> Vezi sa nu ai variabile initializate inainte de instructiunea mov,
> daca se initializeaza prin calcul, registrul eax poate fi pierdut.
>
> Deci mov-ul trebuie sa fie prima instr din functie, ca sa fii sigur.


George are dreptate (nu ma gandisem la problema asta). Marea parte a
instructiunilor simple din C (atribuiri, adunari, incrementari, etc.) se
traduc in limbaj de asamblare in operatii cu eax (e registrul acumulator la
urma urmei - cel mai uzitat).  Poti eventual sa il retii intr-o variabila
temporara, insa _neaparat_ la inceputul functiei ca sa fii sigur ca nu este
pierdut. Ceva de genul:

static void my_function (void)
{
    int tmp;
    int syscall;

    _asm mov tmp, eax

    /* diverse operatii */

    /* daca acuma ai nevoie de valoare initiala a lui eax poti sa folosesti
variabila tmp */
   syscall = tmp;

   /* operatii cu syscall */
}

Mult mai simplu este sa-l retii de la inceput in syscall, dar daca ai alte
constrangeri poti sa folosesti o variabila temporara.

Razvan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20060328/5dfe2487/attachment.html


More information about the pso mailing list