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)
- 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à
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à
interesserebbe anche a me, visto che questo esercizio ricorre puntualmente in tutti gli scritti
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?
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?
__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità
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
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
__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità
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
interessa anche a me... ammesso che ci siano errori nel codice proposto... quali sono i procedimenti?
a me viene EAX=7 EBX=0
o sbaglio io (molto probabile) o c'è qualcosa che non va nel testo
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à
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?
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.