Xem 6,435
Cập nhật thông tin chi tiết về Chức Năng Của Các Hướng Dẫn Push / Pop Được Sử Dụng Trên Các Thanh Ghi Trong Cụm X86 Là Gì? mới nhất ngày 22/05/2022 trên website Theindochinaproject.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến thời điểm hiện tại, bài viết này đã đạt được 6,435 lượt xem.
--- Bài mới hơn ---
esp - 4
. Chính xác hơn:
pop
đảo ngược điều này.
Hệ thống V ABI bảo Linux tạo rsp
trỏ đến vị trí ngăn xếp hợp lý khi chương trình bắt đầu chạy: Trạng thái thanh ghi mặc định khi chương trình khởi chạy (asm, linux)? đó là những gì bạn thường sử dụng.
Làm thế nào bạn có thể Đẩy một thanh ghi?
Tối thiểu GNU GAS ví dụ:
.data /* .long takes 4 bytes each. */ val1: /* Store bytes 0x 01 00 00 00 here. */ .long 1 val2: /* 0x 02 00 00 00 */ .long 2 .text /* Make esp point to the address of val2. * Unusual, but totally possible. */ mov $val2, %esp /* eax = 3 */ mov $3, %ea Push %eax /* Outcome: - esp == val1 - val1 == 3 esp was changed to point to val1, and then val1 was modified. */ pop %ebx /* Outcome: - esp == &val2 - ebx == 3 Inverses Push: ebx gets the value of val1 (first) and then esp is increased back to point to val2. */
Ở trên trên GitHub với các xác nhận có thể chạy được .
Tại sao điều này lại cần thiết?
Đúng là những hướng dẫn đó có thể được thực hiện dễ dàng thông qua mov
, add
và sub
.
Họ cho rằng chúng tồn tại, là những sự kết hợp các hướng dẫn đó rất thường xuyên, đến nỗi Intel quyết định cung cấp chúng cho chúng tôi.
Lý do tại sao những kết hợp đó rất thường xuyên, là vì chúng giúp dễ dàng lưu và khôi phục các giá trị của các thanh ghi vào bộ nhớ để chúng không bị ghi đè.
Để hiểu vấn đề, hãy thử biên dịch một số mã C bằng tay.
Một khó khăn lớn, là quyết định nơi mỗi biến sẽ được lưu trữ.
Lý tưởng nhất là tất cả các biến sẽ phù hợp với các thanh ghi, đây là bộ nhớ nhanh nhất để truy cập (hiện tại khoảng nhanh hơn 100 lần so với RAM).
Nhưng tất nhiên, chúng ta có thể dễ dàng có nhiều biến hơn các thanh ghi, đặc biệt cho các đối số của các hàm lồng nhau, vì vậy giải pháp duy nhất là ghi vào bộ nhớ.
Chúng ta có thể ghi vào bất kỳ địa chỉ bộ nhớ nào, nhưng vì các biến cục bộ và đối số của các lệnh gọi và trả về hàm phù hợp với mẫu ngăn xếp Nice, điều này ngăn phân mảnh bộ nhớ , đó là cách tốt nhất để xử lý nó. So sánh điều đó với sự điên rồ của việc viết một phân bổ heap.
Sau đó, chúng tôi cho phép trình biên dịch tối ưu hóa phân bổ đăng ký cho chúng tôi, vì đó là NP hoàn thành và là một trong những phần khó nhất khi viết trình biên dịch. Vấn đề này được gọi là cấp phát đăng ký , và nó là đẳng cấu với tô màu đồ thị .
Khi bộ cấp phát của trình biên dịch buộc phải lưu trữ mọi thứ trong bộ nhớ thay vì chỉ các thanh ghi, được gọi là tràn .
Điều này có thực hiện theo một lệnh của bộ xử lý không hoặc nó phức tạp hơn?
Tất cả những gì chúng ta biết chắc chắn là Intel cung cấp tài liệu hướng dẫn Push
và pop
, vì vậy chúng là một hướng dẫn theo nghĩa đó.
Trong nội bộ, nó có thể được mở rộng thành nhiều microcodes, một để sửa đổi esp
và một để thực hiện bộ nhớ IO và thực hiện nhiều chu kỳ.
Nhưng cũng có thể một Push
duy nhất nhanh hơn một sự kết hợp tương đương của các hướng dẫn khác, vì nó cụ thể hơn.
Điều này chủ yếu là un (der) tài liệu:
--- Bài cũ hơn ---
Bạn đang xem bài viết Chức Năng Của Các Hướng Dẫn Push / Pop Được Sử Dụng Trên Các Thanh Ghi Trong Cụm X86 Là Gì? trên website Theindochinaproject.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!