Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Hardware - a cosa serve il registro stack pointer?
Forum - Hardware - a cosa serve il registro stack pointer? - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Bonnox (Member)
Pro


Messaggi: 85
Iscritto: 23/08/2014

Segnala al moderatore
Postato alle 12:27
Sabato, 07/11/2015
da ciò che ho visto usando l'emulatore del GBA versione debugger, penso che lo stack pointer venga anche usato per indicare l'indirizzo di memoria delle variabili.
lo so perchè il gcc mi dà un output in asm prima di compilare, dunque vado a vedere che casino vien fuori anche per poche istruzioni... e se dichiaro variabili queste non vengono allocate nella ram a partire dalla cella 0, ma nell'area dello stack.

spero di essere stato utile e non aver detto eresie :rotfl:

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 15:20
Sabato, 07/11/2015
Ma quanto e cosa leggete per avere in testa tutte queste informazioni? (e quanta memoria! altro che RAM!) Io fatico perfino a capire di cosa state parlando...


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 18:29
Sabato, 07/11/2015
Abbiezioni giuste, ma io rimango della mia idea: se uno chiede cos'è uno stack pointer significa che non ha interesse in una specifica implementazione dello stack pointer, o almeno non subito, deve prima capire cos'è e perchè si chiama "stack pointer". Poi.... come ho già detto.... cosa vada sullo stack è un problema secondario finchè si cerca ancora di capire cos'è uno SP.

mah AldoBaldo..... di solito si leggono libri come "architettura e organizzazione degli elaboratori" che è la traduzione italiana di un amosissimo libro inglese...... poi leggi anche wiki.osdev.org non devi per forza voler creare un sistema operativo per leggere quel sito...... Solo che a leggere come si possono fare le cose ti viene una idea di come siano veramente fatte altre cose.......
Ovviamente ci sono libri anche sui sistemi operativi, ma trovo che la lettura di osdev sia alle volte più utile e/o più leggera. Senza contare che tentar non nuove, visto che isdev è consultabile gratuitamente.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:24
Sabato, 07/11/2015
Mettiamo un po' di ordine ...

Lo stack che, come dicevo prima, è un concetto che andrebbe studiato PRIMA di chiedere a cosa serva il registro Stack Pointer, è un'area di memoria che viene utilizzata dalla CPU per alcuni scopi particolari.
La CPU accede a tale area di memoria secondo le modalità LIFO e per farlo usa un registro che detiene il valore del prossimo indirizzo di memoria utilizzabile, appunto,  lo Stack Pointer.

Molte istruzioni della CPU utilizzano lo Stack automaticamente, ad esempio, quelle che servono a chiamare le subroutine (CALL) che, prima di iniziare ad eseguire una sub depositano nello stack l'indirizzo attuale del codice chiamante. Così, le equivalenti istruzioni che terminano le funzioni (RET) possono estrarre l'indirizzo dallo stack e gestirlo per riportare l'esecuzione subito dopo la chiamata.
La struttura LIFO permette di effettuare chiamate nidificate in questo modo.

Ma non è l'unico modo in cui la CPU sfrutta lo stack.
Tramite istruzioni esplicite (PUSH) è possibile che il programma inserisca nello stack (in cima allo stack, tramite l'indirizzo depositato nello StacK Pointer) dei valori specifici, anche più di uno con diverse PUSH.
Una sub successivamente chiamata sarà in grado di estrarre dallo stack con altra istruzione (POP) questi valori per trattarli. In questo modo si implementa ad esempio, il passaggio di parametri ad una funzione C.

In più, mentre una funzione è in esecuzione, lo Stack Pointer può essere modificato esplicitamente in modo di riservare spazio per depositare valori utilizzati solo all'interno della funzione. Prima di terminare la funzione, lo Stack Pointer viene modificato nuovamente per rilasciare lo spazio prima riservato. Questo è il modo con cui il C alloca lo spazio delle variabili locali, appunto, allocate nello stack.

Nessuno vieta di andare anche a scrivere direttamente nello stack, tramite Stack Pointer ma, in questo caso, si deve sapere esattamente cosa si sta facendo per evitare crash.

Per finire, dato che lo Stack è un'area limitata di memoria, è possibile che termini e questo avviene appunto

1) se si fanno troppe chiamate innestate di sub (ad esempio nel caso delle funzioni ricorsive)

2) se si utilizzano troppe variabili locali


@AldoBaldo ... stiamo parlando delle basi che un programmatore dovrebbe conoscere ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 8:18
Domenica, 08/11/2015
TheDarkJuster: "a leggere come si possono fare le cose ti viene una idea di come siano veramente fatte altre cose"

Concordo: è uno dei capisaldi del modo in cui insegno la musica (o almeno tento di insegnarla). Tristemente, non è stato uno dei capisaldi coi quali mi è stata insegnata la musica.

nessuno: "le basi che un programmatore dovrebbe conoscere"

Per questo sono qui, per scoprire cose delle quali non ho idea o per essere più consapevole di quelle sulle quali ho un'infarinatura. Andrò subito a dare un'occhiata a quel wiki.osdev.org al quale mi ha appena indirizzato TheDarkJuster. Non so quanto riuscitùrò a capirci, ma ho intenzione di provare. Male non farà di certo!

Edit: Dopo aver scorso un paio di pagine tra quelle introduttive del wiki, credo di poter dire che TheDarkJuster ha leggermente sovrastimato le mie possibilità. :cheer:

Ultima modifica effettuata da AldoBaldo il 08/11/2015 alle 8:55


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:08
Domenica, 08/11/2015
Testo quotato

a leggere come si possono fare le cose ti viene una idea di come siano veramente fatte altre cose"



Vero, ma spesso quell'idea può essere sbagliata e non lo sai oppure quell'idea non basta ...

Testo quotato

Per questo sono qui, per scoprire cose delle quali non ho idea



Con tutto il rispetto per il forum, ti rimarrà una infarinatura. L'informatica e la programmazione si imparano studiando sui libri, anche da autodidatti ma ci vuole più tempo, con la pratica e tanta passione. I forum sono solo strumenti aggiuntivi ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 11:22
Domenica, 08/11/2015
Il futuro dell'informatica sarà basata sulla teoria dei quanti, tutto quello che conosciamo ora sarà archeologia informatica ;)


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:23
Domenica, 08/11/2015
grazie per l' aiuto, ho notato che è un argomento che va approfondito per bene per capirlo... anche se mi avete schiarito un po' di dubbi... :k:

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo