Trong lắp ráp MIPS , có một thanh ghi cho con trỏ ngăn xếp và một thanh ghi khác cho con trỏ khung. Con trỏ khung là gì và mục đích của nó là gì? Nó khác với con trỏ ngăn xếp như thế nào?
Trong lắp ráp MIPS , có một thanh ghi cho con trỏ ngăn xếp và một thanh ghi khác cho con trỏ khung. Con trỏ khung là gì và mục đích của nó là gì? Nó khác với con trỏ ngăn xếp như thế nào?
Câu trả lời:
Trong lắp ráp MIPS, con trỏ ngăn xếp chỉ vào đỉnh của ngăn xếp. Khi bạn phân bổ không gian trên ngăn xếp, con trỏ ngăn xếp ($ sp) di chuyển để trỏ đến bộ nhớ trống.
Khi gọi một chương trình con trong tập hợp MIPS (các thanh ghi ở mức cao hơn trong những ngày đó - đăng ký các tham số dựa trên sự khác thường), người ta ghi các tham số vào ngăn xếp và sau đó tiến lên con trỏ ngăn xếp.
Khi phương thức bắt đầu, một tham số có thể ở mức bù 16($sp)
. Tuy nhiên, khi các biến được đặt trên ngăn xếp, con trỏ ngăn xếp di chuyển và tham số tương tự bây giờ có thể được đặt tại 24($sp)
. Điều này có thể làm cho mã hơi khó hiểu.
Con trỏ khung ($ fp) trỏ đến điểm bắt đầu của khung ngăn xếp và không di chuyển trong suốt thời gian của lệnh gọi chương trình con. Điều này trỏ đến cơ sở của khung ngăn xếp và các tham số được truyền vào chương trình con vẫn ở một điểm không đổi so với con trỏ khung.
Nhận ra rằng con trỏ khung sẽ cần được lưu trữ và khôi phục bằng các lệnh gọi chương trình con sửa đổi nó.
Đọc thêm:
%ebp
'con trỏ cơ sở' trong quy ước gọi x86 không? (Tôi chưa quen với tất cả những điều này, nhưng nghe có vẻ giống như điều cơ bản giống như sử dụng sth như thế MOV 8(%ebp), %eax
hay sao?)
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
này không hoàn toàn rõ ràng điều đó có nghĩa là gì