2013-07-20 32 views
5

Tôi đã nhìn thấy một chú thích cho đẩy/popping nhiều thanh ghi trong cùng một dòng, ví dụ:Arm lắp ráp - nhiều push/trật tự pop và SP

push {fp, lr} 

tôi không thể tìm ra ai đang đẩy đầu tiên - fp hoặc lr?

Câu hỏi bổ sung - SP có trỏ tới địa chỉ bị chiếm đóng cuối cùng trong ngăn xếp hoặc địa chỉ miễn phí đầu tiên không?

Cảm ơn!

Trả lời

2

Từ ARM ARM:

Việc đăng ký được lưu trữ theo thứ tự, sổ đăng ký thấp nhất đánh số đến địa chỉ bộ nhớ thấp nhất (START_ADDRESS), thông qua đến đăng ký cao nhất đánh số đến địa chỉ bộ nhớ cao nhất (END_ADDRESS)

Trên ARM, con trỏ ngăn xếp thường trỏ đến địa chỉ bị chiếm đóng cuối cùng trên ngăn xếp. Ví dụ, khi thiết lập con trỏ ngăn xếp ban đầu, bạn thường khởi tạo với địa chỉ một trong quá khứ ở cuối ngăn xếp.

PUSH chỉ là một từ đồng nghĩa với STMDB bằng cách sử dụng sp làm cơ sở đăng ký. DB cho biết chế độ giải quyết 'giảm dần trước'.

+0

Làm thế nào bình tĩnh nó là một trong quá khứ kết thúc ngăn xếp? nó sẽ không trỏ đến địa chỉ trống cuối cùng? – Niv

+0

Điều đó tùy thuộc vào ý bạn là 'kết thúc'. Ý tôi là địa chỉ cao nhất. Ngăn xếp thường phát triển từ địa chỉ cao đến thấp. Điều đó có nghĩa là một cú đẩy sẽ làm giảm con trỏ ngăn xếp và sau đó lưu trữ một từ. Một cửa sổ pop tải một từ và sau đó tăng con trỏ ngăn xếp. –

+0

Ồ, giờ tôi đã hiểu. cảm ơn bạn :) – Niv