Bạn giả định sai rằng ebp
là cần thiết để phân bổ khung ngăn xếp. Điều này không đúng, esp
có thể được sử dụng trực tiếp. Việc sử dụng ebp
làm con trỏ khung ngăn xếp hiện không cần thiết. Có một vài điểm, nơi được là hữu ích:
Trong 16 bit mã, việc sử dụng sp
(stack pointer) trong việc giải quyết là nghiêm trọng hạn chế, liên quan giải quyết vấn đề không phải là trực tiếp càng tốt ở tất cả trong x86, nơi có thể sử dụng bp
trong mọi chế độ địa chỉ có sẵn.
Lý do cho sự hỗ trợ có giới hạn này có thể là các trình biên dịch có sẵn, sau đó đơn giản hơn để tạo mã bằng các con trỏ khung để theo dõi sự thay đổi sp
. Có nhiều hơn các bộ xử lý trong đó có hỗ trợ đặc biệt để được hướng dẫn stack frame, như leave
hoặc enter
, nhưng AFAIK không ai khác nhưng Intel đã đi quá xa để làm tê liệt thực sự sp
trong quá trình đó :-)
Debugging. Nó dễ dàng hơn nhiều để thư giãn một chồng khi các con trỏ khung có sẵn, nhưng các trình gỡ rối hiện đại có thể làm ngay cả khi không có.
Nếu bạn muốn phân bổ không gian 100 byte trên stack, chỉ cần làm sub esp, #100
, truy cập vào không gian với move [esp + x]
nơi x
là giữa 0 và 99 và dọn dẹp với add esp, #100
và bạn đã làm xong. Tôi thậm chí còn cho rằng việc sử dụng các con trỏ khung xếp chồng trong bản viết tay cũng giống như sao chép hành vi của trình biên dịch ba mươi tuổi, khi các trình biên dịch thực sự ngu ngốc và không thể làm được mà không có. Đó là trong không cách cần thiết cũng không hữu ích nếu bạn đang viết lắp ráp.
Hah, được đánh dấu là trùng lặp gần ba năm sau đó. – CatShoes