1 van 1
Call Stack
Geplaatst: do 15 nov 2012, 18:24
door Energyfellow
Hey,
Ik weet niet hoe ik deze oefening moet oplossen.
Zou iemand me kunnen helpen?
- Call_Stack 442 keer bekeken
Dank bij voorbaat,
Roger
Re: Call Stack
Geplaatst: do 15 nov 2012, 18:55
door jhnbk
Probeer eerst eens zelf een oplossing te verzinnen. Hint: deel het programma op in ondeelbare blokken.
EDIT: of zet pijltjes van lijn naar lijn die de CALL en RET statements aangeven.
Re: Call Stack
Geplaatst: do 15 nov 2012, 19:01
door Energyfellow
Jhnbk,
Volgens mij is het zo: CALL y roept de w aan, dus zien we van onder een w.
Dan hebben we y PUSH R0, die zal dus een R0 weergeven, dus krijgen we dan R0.
Dan de Call z zal de volgende instructie aanroepen, in dit geval x instr, dus het volgende is dan x.
Als laatste hebben we dan de z PUSH R0, die zal dus de R1 weergeven.
Is deze redenering juist?
Indien ja, wat doe je dan met RET, POP R0?
Dank bij voorbaat,
Roger
Re: Call Stack
Geplaatst: vr 16 nov 2012, 10:00
door Xenion
De oplossing staat er toch gewoon naast? Volgens mij begrijp je niet hoe subroutine calls werken. CALL y roept niet w aan, maar y.
Bij een CALL wordt het adres van de volgende functie op de stack gepushed. Dit is het return address zodat je achteraf weet waar je instructiepointer naar moet wijzen na het uitvoeren van de functie.
Na die push springt de IP naar het adres van de functie en begint daar gewoon het programma verder uit te voeren. Als de IP aan RET komt, dan wordt het return adres van de stack gepopt en wordt springt de IP daar naartoe.
In jouw oefening ben je op het moment dat de IP aan de blauwe pijl staat nog geen RET tegengekomen.
-
Spoiler: [+]
- Uitleg van de oplossing:
Stack is initieel leeg.
Bij CALL y wordt het adres van de volgende instructie op de stack geplaatst: w
De jump naar y wordt gemaakt en in y wordt R0 op de stack geplaatst.
Er is een CALL naar z, dus wordt weer het adres van de volgende instructie op de stack geplaatst: x
De jump naar z wordt gemaakt en in z wordt R1 op de stack geplaatst.
De instructiepointer staat op dit moment op de plaats van de blauwe pijl.
Re: Call Stack
Geplaatst: vr 16 nov 2012, 11:21
door Energyfellow
Bedankt, ik versta het inderdaad al wat beter.