.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- - esercizio su stack- (http://www.dsy.it/forum/showthread.php?threadid=33728)


Posted by bill76 on 09-02-2008 21:51:

- esercizio su stack-

Ciao ragazzi ho trovato sul dsy l'unico esercizio sullo stack (del primo compitino aprile 2007) ma nn mi tornano alcune cose:

Testo:

date le istruzioni:

push 4
push 0
push 7
mov ebp, esp
L1:
cmp 1, (ebp+8)
jnle L2
mov eax, (ebp+4)
add eax, (ebp+8)
mov eax, (ebp+4)
dec ebp+8
j L1
L2:
pop eax
push ebx

cosa contengono eax ed ebx alla fine?

1) Domanda ma perchè nn viene caricato niente nel registro ebx e viene chiesto quanto vale?
2) Perchè caricare nel registro eax il riferimento ebp + 8 che contiene l'indirizzo di rientro

Qualche anima pia ha il testo degli esercizi sullo stack che ha messo negli scritti di luglio,settembre,gennaio?

Grazie mille

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by bill76 on 09-02-2008 21:55:

Re: - esercizio su stack-

Ci riprovo:
Ciao ragazzi ho trovato sul dsy l'unico esercizio sullo stack (del primo compitino aprile 2007) ma nn mi tornano alcune cose:

Testo:

date le istruzioni:

push 4
push 0
push 7
mov ebp, esp
L1:
cmp 1, (ebp+8)
jnle L2
mov eax, (ebp+4)
add eax, (ebp+8)
mov eax, (ebp+4)
dec ebp+8
j L1
L2:
pop eax
push ebx

cosa contengono eax ed ebx alla fine?

1) Domanda ma perchè nn viene caricato niente nel registro ebx e viene chiesto quanto vale?
2) Perchè caricare nel registro eax il riferimento ebp + 4 che contiene l'indirizzo di rientro

Qualche anima pia ha il testo degli esercizi sullo stack che ha messo negli scritti di luglio,settembre,gennaio?

Grazie mille

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by DarkSchneider on 10-02-2008 09:26:

interesserebbe anche a me, visto che questo esercizio ricorre puntualmente in tutti gli scritti


Posted by Liumberg on 11-02-2008 06:52:

sto cercando di risolverlo...sapendo poco niente di assembler..
ebp e esp inizialmente dove puntano?

sullo stack inizialmente ci sono:
4
0
7

giusto?
esp e ebp puntano alla locazione contenente 7,giusto?


Posted by bill76 on 11-02-2008 08:01:

Originally posted by Liumberg
sto cercando di risolverlo...sapendo poco niente di assembler..
ebp e esp inizialmente dove puntano?

sullo stack inizialmente ci sono:
4
0
7

giusto?
esp e ebp puntano alla locazione contenente 7,giusto?


Si ebp punta a 7. anche se sarebbe più giusto dire che ebp+8 punta a 7 visto che è il parametro giusto?

1) Domanda ma perchè nn viene caricato niente nel registro ebx e viene chiesto quanto vale?
2) Perchè caricare nel registro eax il riferimento ebp + 4 che contiene l'indirizzo di rientro

Tu hai il testo dell'ultimo tema d'esame o uno dei precedenti?

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by Liumberg on 12-02-2008 07:02:

secondo me:
-ebp,esp puntano tutti e due alla locazione che contiene 7
di conseguenza ebp+4 punta alla locazione contenente 0 e ebp+8
punta alla locazione contenente 4.
-l'ultima riga presumo sia "pop ebx" e non "push ebx"..altrimenti non avrebbe senso chiedere il contenuto di ebx..e poi credo sia "dec (ebp+8)" e non "dec ebp+8".

poi non mi quadrano nemmeno le seguenti istruzioni:

mov eax, (ebp+4)
add eax, (ebp+8)
mov eax, (ebp+4)

la prima mette in eax il contenuto di ebp+4 cioè 0
la seconda somma ad eax il contenuto di ebp+8 quindi 0+4=4
la terza rimette in eax il contenuto di ebp+4 cioè 0?

molto probabilmente sbaglio io

-purtroppo niente testi di esami passati...mi spiace


Posted by bill76 on 12-02-2008 08:23:

Originally posted by Liumberg
secondo me:
-ebp,esp puntano tutti e due alla locazione che contiene 7
di conseguenza ebp+4 punta alla locazione contenente 0 e ebp+8
punta alla locazione contenente 4.
-l'ultima riga presumo sia "pop ebx" e non "push ebx"..altrimenti non avrebbe senso chiedere il contenuto di ebx..e poi credo sia "dec (ebp+8)" e non "dec ebp+8".

poi non mi quadrano nemmeno le seguenti istruzioni:

mov eax, (ebp+4)
add eax, (ebp+8)
mov eax, (ebp+4)

la prima mette in eax il contenuto di ebp+4 cioè 0
la seconda somma ad eax il contenuto di ebp+8 quindi 0+4=4
la terza rimette in eax il contenuto di ebp+4 cioè 0?

molto probabilmente sbaglio io

-purtroppo niente testi di esami passati...mi spiace


Scusa la domanda ma nelle dispense il prof fa riferimento sempre
che ebp + 4 è sempre l'indirizzo di rientro tu dici che in questo caso ebp punta a 0 ebp+4 punta 4 e ebp +8 punta a 7?

Grazie mille

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by Liumberg on 12-02-2008 10:14:

io la so così,in generale:
prima della chiamata di un sottoprogramma EBP punta al return address i passi sono:1- si salva sullo stack il contenuto di EBP (push EBP) ,2-EBP diventa uguale ad ESP (mov ebp,esp),quindi sia EBP che ESP puntano al top dello stack 3-si alloca lo spazio per i parametri modificando il registro ESP (sub esp,LOCAL_BYTES).
questo è quello che fa l'epilogo.

nel programma:
il passi 1 e 3 non ci sono,presumo che vengano fatti prima delle push

dopo le tre push lo stack diventa
4
0
7

con "mov ebp,esp" ebp punta al top dello stack,
quindi sia EBP che ESP puntano a 7,EBP+4 punta a 0 e EBP+8 punta 4


Posted by design8 on 12-02-2008 14:08:

interessa anche a me... ammesso che ci siano errori nel codice proposto... quali sono i procedimenti?


Posted by Liumberg on 12-02-2008 17:36:

a me viene EAX=7 EBX=0
o sbaglio io (molto probabile) o c'è qualcosa che non va nel testo


Posted by bill76 on 12-02-2008 20:42:

Scusami ma perchè ti esce EAX = 7?

l'ultimo assegnamento mov eax, (ebp+4) che punta a 0.
Quando esco dal ciclo carico dallo stack con pop eax ma vale 0

Fammi capire cosa mi perdo?

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by Liumberg on 13-02-2008 06:09:

Originally posted by bill76
Scusami ma perchè ti esce EAX = 7?

l'ultimo assegnamento mov eax, (ebp+4) che punta a 0.
Quando esco dal ciclo carico dallo stack con pop eax ma vale 0

Fammi capire cosa mi perdo?



perchè con l'istruzione "pop eax" si preleva l'ultimo valore inserito sullo stack (7) e lo si mette in eax


All times are GMT. The time now is 15:35.
Show all 12 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.