2013-07-20 24 views
5

Widziałem adnotacji do pchania/popping wielu rejestrów w tej samej linii, np:Arm montaż - wielokrotność Push/order pop i SP

push {fp, lr} 

Nie mogłem dowiedzieć się, kto jest popychany pierwszy - fp lub lr?

Dodatkowe pytanie - czy SP wskazuje na ostatni zajęty adres w stosie lub pierwszy wolny?

Dzięki!

Odpowiedz

2

ramienia z ramieniem

Rejestry są przechowywane w sekwencji o najniższym numerze rejestracji na najniższym adresem pamięci (START_ADDRESS), aż do najwyższej numerze rejestru do najwyższego adresu pamięci (END_ADDRESS)

W trybie ARM wskaźnik stosu wskazuje zwykle ostatni zajęte adresy na stosie. Na przykład podczas konfigurowania początkowego wskaźnika stosu zwykle inicjalizujemy go za pomocą adresu jeden za końcem stosu.

PUSH jest synonimem dla STMDB przy użyciu sp jako rejestru podstawowego. DB wskazuje tryb adresowania "przed zwłoką".

+0

Jaka jest cisza po zakończeniu stosu? czy nie wskazywałoby to na ostatni pusty adres? – Niv

+0

To zależy od tego, co rozumiesz przez "koniec". Mam na myśli najwyższy adres. Stosy zwykle rosną od wysokich do niskich adresów. Oznacza to, że naciśnięcie zmniejsza wskaźnik stosu, a następnie przechowuje słowo. Pop powoduje załadowanie słowa, a następnie zwiększa wskaźnik stosu. –

+0

Och, teraz rozumiem. dziękuję :) – Niv