Am cateva probleme referitoare la assembler din perspectiva
unui program scris in C. Ma intereseaza cum se creaza frame
stack si cum sunt preluate variabilele de catre procedura apelanta:
Fie functiile:
aduna(int a)
{
int b;
b=a;
//return (a+b);
}
main()
{
int x=0;
//x=3;
aduna(1);
aduna(x);
}
In asamblare aduna arata cam asa
push %ebp //pune bp pe stiva
mov %esp, %ebp // mov dest, src
//adica scrie ebp peste esp care indica varful stivei?
//n-ar tb. ca esp peste ebp ca sa creeze un nou stack f.?
sub $0x4, %esp //muta sp in jos, adica face loc pe stiva?
//pt ce?
mov %0x8(%ebp),%eax //mov dest,src
// ce inseamna in primul rand %0x8(%ebp)?-o adresa referita fct. de ebp?
//deci pun eax in adresa respectiva, dar ce anume se gaseste in eax caci
//parametrul e pus pe stiva
mov %eax, 0xfffffffc(%ebp) //
leave // ce-i asta
ret
mov %si,%si
iar in main
push %ebp //pune bp pe stiva
mov %esp, %ebp // mov dest, src
//iarasi de ce?
sub $0x8, %esp //sub dest,src
// la ce bun?
movl $0x0, 0xfffffffc(%ebp) // seteaza variabila x=0 la
// o adresa care nu stiu cum e obtinuta
sub $0xc, %esp
push $0x1 //in sfarsit ceva: parametrul
call aduna // e primul apel
.....
Variabilele sunt puse pe stiva in schimb procedura apelanta
pare (?) ca nu ia nimic de pe stiva.
G.
Daca credeti ca nu coresp. listei va rog
raspundeti pe personala.
---
Send e-mail to '[EMAIL PROTECTED]' with 'unsubscribe rlug' to
unsubscribe from this list.