Ví dụ, bộ tích lũy có tên là EAX
và, trong khi con trỏ chỉ được gọi là IP
. Tôi cũng biết rằng có các byte được gọi là CL
và DH
. Tôi biết phải có một quy ước cho tất cả các tên, nhưng nó là gì?Tại sao các thanh ghi x86 được đặt tên theo cách của chúng?
Trả lời
C và D là số/loại và H cho cao và L cho các phần thấp của thanh ghi cao hơn. http://en.wikipedia.org/wiki/X86
Wikipedia giải thích rất tốt.
Thêm từ Wikipedia:
- AX/EAX/rax: ắc
- BX/EBX/RBX: cơ sở
- CX/ECX/RCX: truy cập
- DX/EDX/RDX : dữ liệu/chung
* EAX - Accumulator Register
* EBX - Base Register
* ECX - Counter Register
* EDX - Data Register
* ESI - Source Index
* EDI - Destination Index
* EBP - Base Pointer
* ESP - Stack Pointer
Đó là lịch sử. Các x86 đến từ 8086, mà đến từ 8080, mà đến từ 8008, mà đến từ 4004. Có 16-bit đăng ký AX, BX, vv và cho 80386 họ đã "mở rộng" đến 32 bit.
Đã thêm: BTW Motorola 68K có các thanh ghi 32 bit ngay từ đầu, do đó chương trình dễ dàng hơn nhiều trong vài thập kỷ đầu tiên. Tôi đã làm việc trên các dự án mà Intel được chọn vì lý do kinh doanh, không phải là kỹ thuật.
Lịch sử isn Không liên tục - 8080 có tên đăng ký khác nhau, và những cái tên đó xuất hiện với 8086. Đáng chú ý kiến trúc CISC ở đây, với các thanh ghi đặc biệt, trong cả hai biến thể 8086 và 8080, mặc dù - RISC xuất hiện sau đó. tất cả các thanh ghi có nhiều cách tiếp cận giống nhau (được hỗ trợ cùng với việc có 32 bit cho mỗi lệnh thay vì cố gắng mã hóa hầu hết các lệnh thành 8 bit). – ijw
@ijw - nhưng có/8080 đến 8086 người dịch và có bản đồ. Sổ đăng ký của 8080 đã trở thành AL, cặp đăng ký 8080 của B, C trở thành CH, CL. Cặp đăng ký 8080 của D, E trở thành DH, DL. Cặp đăng ký 8080 của H, L đã trở thành BH, BL. 8086 bao gồm các hướng dẫn LAHF và SAHF giúp với 8080 đến 8086 bản dịch. 8086 thêm các thanh ghi như SI (chỉ mục nguồn), DI (chỉ mục đích) và BP (con trỏ cơ sở mặc định là thanh ghi phân đoạn SS). – rcgldr
bộ xử lý cũ có bộ tích lũy có tên A, B, v.v. (thứ tự bảng chữ cái). Khi các bộ tích lũy 16 và 32 bit được phát triển, các kỹ sư đã thêm một X (mở rộng). Vì vậy, tất cả về lịch sử, như ngôn ngữ C được gọi theo cách này bởi vì nó được phát triển từ ngôn ngữ B (Bell labs).
Quy ước chỉ là nội bộ, để theo kịp với những cái tên họ quen thuộc.
Thực ra các thanh ghi không theo thứ tự bảng chữ cái. Thứ tự thực là A, C, D, B –
Một số câu trả lời tốt ở đây: x86 assembly registers — Why do they work the way they do?
- 1. Tại sao lệnh x86-64 trên thanh ghi 32 bit không phải phần trên của thanh ghi 64 bit đầy đủ?
- 2. Lưu danh sách các ô theo tên của chúng()
- 3. Tại sao các nhà thầu được đặt tên là static
- 4. Tại sao RAII lại được đặt tên như vậy?
- 5. Tiêm phụ thuộc và ghi tên được đặt tên
- 6. Tại sao Guid.ToByteArray() đặt hàng các byte theo cách của nó?
- 7. Cách đặt tên lớp hiện tại theo phương thức tĩnh?
- 8. Tại sao tiện ích `nm` được đặt tên như vậy?
- 9. Tại sao AutoDetectChangesEnabled được đặt thành false theo mặc định?
- 10. Tại sao chúng ta phải đặt biến __block thành nil?
- 11. Đặt tiêu đề của các thanh tab theo lập trình
- 12. Tại sao các chương trình trong môi trường giống Unix có số sau tên của chúng?
- 13. Thanh ghi nào được khôi phục sau khi gọi hàm x86 trong c?
- 14. Tại sao IBOutlet của tôi được phát hành theo ARC?
- 15. Tại sao Đọc-Sửa-Viết cần thiết cho các thanh ghi trên các hệ thống nhúng?
- 16. Tại sao đặt các biến bên trong cấu trúc của một lớp PHP khi bạn có thể đặt chúng khi chúng được khai báo?
- 17. Tại sao các biến được khai báo bằng "của chúng tôi" hiển thị trên các tệp?
- 18. Tại sao âm thanh của tôi không được tua lại?
- 19. Cách chọn các phần tử theo một phần tên của chúng trong XSL/XPath?
- 20. Tại sao một số dự án .NET sử dụng tiền tố N trong tên của chúng?
- 21. Tại sao các thư trùng lặp được ghi lại
- 22. Tại sao Linux memmove() thực hiện theo cách của nó?
- 23. Thanh ghi EBP (con trỏ khung cơ sở) chỉ để gỡ lỗi trong x86?
- 24. Tại sao chúng ta cần các ngoại lệ toàn cầu và ngoại lệ trong thanh chống?
- 25. Tại sao chúng ta cần đặt khoảng trống trước% c?
- 26. Tại sao phương thức count() của container C++ STL được đặt tên như vậy?
- 27. Tại sao kích thước trang của Linux (x86) 4 KB, được tính như thế nào?
- 28. Tại sao tệp được đặt trong "C: \ Users \ <username> Tệp AppData \ Local \ VirtualStore \ Program (x86)"?
- 29. Tại sao setjmp (3) không lưu tất cả các thanh ghi trên AMD64?
- 30. Tại sao "nhiều hơn" của ISeq không được đặt tên là "nghỉ ngơi"?
Đối với lịch sử hơn và giải thích: http://www.swansontec.com/sregisters.html – rmmh
@Daniel, Bạn bỏ lỡ ESI, EDI, EBP vv – Pacerier