2012-12-27 15 views
9

Na przykład, jeśli pchnął ax jest [SP] wskazuje na moją wartość ax lub słowo po ax? Czy różni się on od trybu rzeczywistego do chronionego? Pytam o to, ponieważ Art of Assembly Book ilustruje i wyjaśnia jako punkty sp ostatnio przesłane dane, i na tej stronie ilustruje to, jak wskazuje puste słowo po ostatnich pchniętych danych.x86 gdzie wskazuje wskaźnik stosu?

+1

Podręczniki referencyjne Intela zawierają pseudokod dla każdej instrukcji. Aby odpowiedzieć na pytanie, wskazuje ono najwyższą wartość na stosie. – DCoder

Odpowiedz

17

Wikipedia mówi here:

Stos jest realizowany z niejawnie zmniejszanie (Push) i zwiększany (pop) wskaźnik stosu. W trybie 16-bitowym ten niejawny wskaźnik stosu jest adresowany jako SS: [SP], w trybie 32-bitowym jest to SS: [ESP], aw trybie jest to [RSP]. Wskaźnik stosu wskazuje na ostatnią wartość , która została zapisana, przy założeniu, że jej rozmiar będzie zgodny z trybem pracy procesora (tj. 16, 32 lub 64 bity) z dopasowaną domyślną szerokością instrukcje push/pop/call/ret.

W ten sposób moja pamięć zwrotna mówi, że działa.

+0

OK, dziękuję, ale czy masz jakiś pomysł, dlaczego osdev wiki ilustruje esp po końcu stosu. Czy to błąd? – user1180619

+0

Możesz spróbować. Naciśnij coś dziwnego na stosie, a następnie sprawdź, czy [esp] ma tę samą wartość. Wypróbuj kilka wartości, aby upewnić się, że nie jest to przypadek. –

+0

@ user1180619: Stosy działają do góry nogami.Zaczynają od wysokiego adresu i pracują stamtąd. Nie wiem dlaczego, ale tak właśnie jest. – Linuxios

10
push eax 

jest równoznaczne z:

sub esp, 4 
mov [esp], eax 

Więc po naciśnięciu, esp odbędzie adres popychane wartości.

0

Myślę, że rozumiem, dlaczego OP zadaje to pytanie. Dlaczego pierwsza zmienna to 8 bajtów z SP, a nie 4?

Po niektórych badań znalazłem this co wskazuje, że:

SP + 0 jest stary EBP SP + 4 jest stary EIP (wskaźnik instrukcji)

Stąd naturalnie, pierwszy parametr jest SP + 8.

-1

w x86_64 punkt stos jest w rejestrze% RSP który w dolnej części 32bit jest dobrze knowned jako% esp

0

Zgodnie Lee Meador i odpowiedzi Cory Nelsona, punkty wskaźnik stosu na ostatniej wartości, które został pchnięty.

od Intel® 64 oraz IA-32 architektury oprogramowania programisty Manual Volume 2 (2A, 2B & 2C): Zestaw instrukcji, AZ, pierwsza linia z opisu instrukcji PUSH brzmi następująco:

Zmniejsza wskaźnik stosu, a następnie zapisuje operand źródłowy na szczycie stosu.

Powiązane problemy