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?
Trả lời
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.
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
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. –
@ 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
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.
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.
trong x86_64 điểm stack là trong sổ đăng ký% RSP mà ở phần 32bit thấp nổi knowned như% esp
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.
- 1. cơ sở con trỏ và con trỏ ngăn xếp
- 2. Con trỏ ngăn xếp giả ngẫu nhiên dưới Linux?
- 3. "con trỏ" này bị lỗi trong theo dõi ngăn xếp
- 4. Ngăn xếp ngăn xếp lạ?
- 5. Ẩn con trỏ ở mọi nơi
- 6. Điểm con trỏ là gì?
- 7. Lấy con trỏ ngăn xếp hiện tại từ/proc/pid/stat
- 8. Sắp xếp vectơ của con trỏ
- 9. Ưu điểm/nhược điểm của các con trỏ tự động
- 10. Làm thế nào để tạo một con trỏ int trên ngăn xếp?
- 11. Gọi hàm C với con trỏ ngăn xếp khác nhau (gcc)
- 12. Thay đổi nơi con trỏ bắt đầu trong EditText
- 13. Trả về biến ngăn xếp?
- 14. Làm cách nào để sắp xếp một con trỏ tới một con trỏ tới một int?
- 15. Con trỏ verus trong khi vòng lặp - những ưu điểm/nhược điểm của con trỏ là gì?
- 16. Con trỏ chuột CSS ... xoay con trỏ?
- 17. x86 assembler: điểm nổi so sánh
- 18. Ngăn chặn con trỏ nhấp nháy trong hộp văn bản
- 19. câu hỏi lắp ráp i386: tại sao tôi cần phải can thiệp với con trỏ ngăn xếp?
- 20. Ngăn xếp C++ an toàn Chủ đề
- 21. Ngăn người dùng đặt vị trí con trỏ trên UITextField
- 22. Điểm yếu của Android khi không đóng con trỏ
- 23. Điểm tương tác con trỏ tùy chỉnh - CSS/JQuery
- 24. Constructor được gọi với con trỏ "this" sai. Đây có phải là tham nhũng ngăn xếp không?
- 25. Ngăn xếp ngăn xếp là gì?
- 26. Cross-trình duyệt 'con trỏ: con trỏ'
- 27. Con trỏ cho con trỏ là gì?
- 28. Con trỏ biến tĩnh?
- 29. Mảng của con trỏ
- 30. Con trỏ trỏ tới con trỏ số học
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