2012-12-24 34 views
10

Tôi bị nhầm lẫn bởi vì nếu chúng ta đã có con trỏ thì chúng ta có thể dễ dàng trỏ tới lệnh tiếp theo, chúng ta có thể dễ dàng trỏ tới hàm trước đó, vậy tại sao chúng ta cần một con trỏ ngăn xếp khác để quay lại hàm hoặc mô-đun trước đó ?Tại sao chúng ta cần đăng ký stackpointer khi chúng tôi đã có đăng ký bộ đếm chương trình?

+1

có thể trùng lặp của [Con trỏ ngăn xếp được sử dụng trong bộ vi xử lý là gì?] (http://stackoverflow.com/questions/1464035/what-is-a-stack-pointer-used-for- trong bộ vi xử lý) –

Trả lời

13

Bộ đếm chương trình cho CPU biết vị trí của nó . Ngăn xếp được sử dụng để (trong số những thứ khác) giữ một bản ghi về nơi nó có .

Nếu chức năng được gọi, chức năng đó cần biết vị trí cần quay lại khi nó đã hoàn thành. Điều này thực sự có thể là một địa chỉ được truyền vào, nhưng nếu chính hàm đó gọi các hàm khác, hoặc thậm chí gọi chính nó theo cách đệ quy, thì nó cần đảm bảo rằng địa chỉ này không bị mất hoặc ghi đè - vì vậy nó phải được lưu trữ. Cách tự nhiên để làm điều đó, là đẩy địa chỉ vào một ngăn xếp và cửa sổ bật lên trở lại khi cần.

Tất nhiên, nó cũng lưu trữ trạng thái cục bộ cho một hàm, vì điều đó cũng cần được đẩy và xuất hiện khi chương trình đi vào hoặc trả về từ các hàm.

Không phải tất cả các bộ vi xử lý nhất thiết phải có một ngăn xếp, nhưng nếu bạn làm bất cứ điều gì từ xa phức tạp trên một, bạn chắc chắn thực hiện một.

0

Chương trình conter giữ vị trí lệnh tiếp theo, ngăn xếp con trỏ trỏ tới một chồng (chồng) nơi lưu trữ thông tin lưu trữ để sử dụng sau này, ví dụ như giá trị của thanh ghi bên trong trước đó để chuyển đến chương trình con.

0

SP được sử dụng để lấy dữ liệu từ stack đăng ký nơi nó lưu trữ dữ liệu tạm thời như bi-sản phẩm của bất kỳ hoạt động hay những nội dung trước khi mất điện để khôi phục lại nó trở lại

trong khi máy tính như u biết giữ địa chỉ của người tiếp theo hướng dẫn để thực thi ..

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