2012-12-27 47 views
9

Ví dụ nếu tôi đẩy rìu là [SP] điểm đến giá trị của rìu của tôi hoặc từ sau rìu? Ngoài ra nó khác với chế độ thực sang chế độ được bảo vệ không? Tôi hỏi điều này bởi vì Nghệ thuật của cuốn sách lắp ráp minh họa và giải thích như là điểm sp để đẩy dữ liệu cuối cùng, và trên trang này OSDev Wiki - Stack nó minh họa khi nó trỏ đến từ trống sau khi dữ liệu được đẩy cuối cùng.x86 nơi điểm con trỏ ngăn xếp?

+1

Sách hướng dẫn tham khảo của Intel bao gồm mã giả cho mỗi lệnh. Để trả lời câu hỏi của bạn, nó trỏ đến giá trị cao nhất trên ngăn xếp. – DCoder

Trả lời

17

Wikipedia nói here:

Các stack được thực hiện với một ngầm decrementing (push) và incrementing (pop) con trỏ ngăn xếp. Trong chế độ 16 bit, ngăn xếp ẩn này được gọi là SS: [SP], ở chế độ 32 bit, nó là SS: [ESP] và ở chế độ 64 bit là [RSP]. Con trỏ ngăn xếp thực sự trỏ đến giá trị cuối cùng được lưu trữ, với giả định rằng kích thước của nó sẽ khớp với chế độ hoạt động của bộ xử lý (ví dụ: 16, 32 hoặc 64 bit). hướng dẫn push/pop/call/ret.

Đây là cách mà bộ nhớ cách thức của tôi cho biết cũng hoạt động.

+0

Ok cảm ơn bạn nhưng bạn có bất kỳ ý tưởng tại sao osdev wiki minh họa đặc biệt sau khi kết thúc ngăn xếp. Đó có phải là một sai lầm? – user1180619

+0

Bạn có thể dùng thử. Đẩy một cái gì đó kỳ lạ trên ngăn xếp và sau đó xem [esp] có cùng giá trị không. Hãy thử nó với một vài giá trị để chắc chắn rằng nó không phải là một tai nạn. –

+0

@ user1180619: Ngăn xếp hoạt động lộn ngược.Họ bắt đầu ở địa chỉ cao và làm việc từ đó. Không biết tại sao, nhưng đó là cách nó được. – Linuxios

10
push eax 

Tương đương với:

sub esp, 4 
mov [esp], eax 

Vì vậy, sau một sự thúc đẩy, esp sẽ tổ chức địa chỉ của giá trị đẩy.

0

Tôi nghĩ rằng tôi hiểu tại sao OP lại đặt câu hỏi này. Tại sao biến đầu tiên 8 byte từ SP và không phải là 4?

Sau khi một số nghiên cứu tôi thấy this mà chỉ ra rằng:

SP + 0 là EBP cũ SP + 4 là EIP cũ (con trỏ hướng dẫn)

Do đó, một cách tự nhiên, tham số đầu tiên là tại SP + 8.

-1

trong x86_64 điểm stack là trong sổ đăng ký% RSP mà ở phần 32bit thấp nổi knowned như% esp

0

Theo câu trả lời Cory Nelson Lee Meador và, những điểm con trỏ ngăn xếp trên giá trị cuối cùng đã bị đẩy.

Từ Intel® 64 và IA-32 Kiến trúc phát triển phần mềm của tay Tập 2 (2A, 2B & 2C): Instruction Set tham khảo, AZ, dòng đầu tiên từ mô tả của lệnh PUSH đọc như sau:

Giảm con trỏ ngăn xếp và sau đó lưu trữ toán hạng nguồn trên đỉnh của ngăn xếp.

Các vấn đề liên quan