«« ( Date ) »» // «« ( Thread ) »» // ir3sp - 2011

Re: pozivanje funkcija

by Nenad Žikić
petak, 05. avgust 2011 - 11:02.

http://msdn.microsoft.com/en-us/library/ms253914(v=vs.80).aspx

Koliko sam sam ja razumeo, r4-r10 cuva lokalne promenljive, r11 je Frame
Pointer (kao base pointer) i oni su callee saved registers, sto bi znacilo
da C kompajler sacuva ove registre na pocetku da ne bi prebrisao lokalne
promenljive i FP funckije iznad.
Ne znam tacno kako se adresiraju promenljive ako ih imaju vise.


2011/8/5 Branislav Petrović 05/0408 <pb050408d@student.etf.rs>

>
> Da li mozete da mi pomognete, pokusavam da pronadjem kakvo je pravilo za
> stavljanje na stek prilikom poziva funkcija definisanih u C-u. Uradio sam
> disassemble programa i primetio da se na pocetku svake funkcije izvrsi push
> uglavnom registara r11 i r14, ali vidim da je negde i r4, r5, a mozda i jos
> neki.
>
> Jasno mi je za r14, to je lr registar, koliko sam razumeo r11 je kao bp
> registar i ova 2 registra se uvek stavljaju na stek, ali ne znam kad se
> stavljaju r4, r5 i ostali registri.
>
> Konkretno za funkciju int CreateAndStart(void (*f)(), int timeSlice); na
> stek se stavljaju r4, r11 i lr registri. Ova funkcija ima samo 2 argumenta
> od toga jedan je int sto je 4B, a drugi adresa funkcije koji je valjda
> takodje 4B, tako da pretpostavljam da se oni bez prekoracenja prosledjuju
> preko r0-r3 registara.
>
>
>
> ------------------------------**------------------------------**-----
> unsubscribe:
> minimalist@rti.etf.rs?subject=**unsubscribe%20ir3sp<http://minimalist@rti.etf.rs?subject=unsubscribe%20ir3sp>
> ------------------------------**------------------------------**-----
>