Lý do cấp cao
Khi bạn nghĩ về nó, một bộ vi xử lý làm một điều tuyệt vời: nó cho phép bạn lấy một máy (như máy giặt hoặc thang máy), và thay thế toàn bộ các cơ chế hoặc mạch được thiết kế tùy chỉnh bằng silicon rẻ tiền, sản xuất hàng loạt Chip. Bạn tiết kiệm rất nhiều tiền cho các bộ phận, và rất nhiều thời gian cho thiết kế.
Nhưng treo trên, một con chip tiêu chuẩn , thay thế vô số thiết kế tùy chỉnh ? Không thể có một bộ vi xử lý duy nhất, hoàn hảo, hoàn hảo cho mọi ứng dụng. Một số ứng dụng cần giảm thiểu sử dụng năng lượng nhưng không cần phải nhanh; những người khác cần phải nhanh chóng nhưng không cần phải dễ lập trình, những người khác cần chi phí thấp, v.v.
Vì vậy, chúng ta có nhiều "hương vị" khác nhau của bộ vi xử lý, mỗi loại có điểm mạnh và điểm yếu riêng. Tất cả họ đều mong muốn sử dụng một bộ hướng dẫn tương thích, bởi vì điều này cho phép tái sử dụng mã và giúp dễ dàng tìm thấy những người có kỹ năng phù hợp. Tuy nhiên, bộ hướng dẫn không ảnh hưởng đến chi phí, độ phức tạp, tốc độ, tính dễ sử dụng và các ràng buộc vật lý của bộ xử lý và do đó chúng tôi có một thỏa hiệp: có một vài bộ hướng dẫn "chính thống" (và nhiều bộ phụ) và trong mỗi tập lệnh có nhiều bộ xử lý với các đặc tính khác nhau.
Ồ, và khi công nghệ thay đổi, tất cả những sự đánh đổi này đều thay đổi, vì vậy các bộ hướng dẫn phát triển, những cái mới xuất hiện và những cái cũ sẽ chết. Ngay cả khi có một bộ hướng dẫn "tốt nhất" ngày hôm nay, nó có thể không tồn tại trong 20 năm.
Chi tiết phần cứng
Có lẽ quyết định thiết kế lớn nhất trong một tập lệnh là kích thước từ , tức là số lượng lớn bộ xử lý có thể "tự nhiên" thao tác. Bộ xử lý 8 bit xử lý các số từ 0-255, trong khi bộ xử lý 32 bit xử lý các số từ 0 đến 4.294.967.295. Mã được thiết kế cho một người cần phải được xem xét lại hoàn toàn cho người khác.
Đây không chỉ là vấn đề dịch các hướng dẫn từ tập lệnh này sang tập lệnh khác. Một cách tiếp cận hoàn toàn khác nhau có thể được ưa thích hơn trong một tập lệnh khác. Ví dụ, trên bộ xử lý 8 bit, bảng tra cứu có thể là lý tưởng, trong khi trên bộ xử lý 32 bit, hoạt động số học sẽ tốt hơn cho cùng một mục đích.
Có sự khác biệt lớn khác giữa các bộ hướng dẫn. Hầu hết các hướng dẫn rơi vào bốn loại:
- Tính toán (Số học và logic)
- Kiểm soát dòng chảy
- Truyền dữ liệu
- Cấu hình bộ xử lý
Bộ xử lý khác nhau về loại tính toán mà chúng có thể thực hiện, cũng như cách chúng tiếp cận luồng điều khiển, truyền dữ liệu và cấu hình bộ xử lý.
Ví dụ, một số bộ xử lý AVR không thể nhân hoặc chia; trong khi tất cả các bộ xử lý x86 có thể. Như bạn có thể tưởng tượng, việc loại bỏ các mạch cần thiết cho các tác vụ như nhân và chia có thể làm cho bộ xử lý đơn giản hơn và rẻ hơn; các thao tác này vẫn có thể được thực hiện bằng các thói quen phần mềm nếu cần thiết.
x86 cho phép các hướng dẫn số học tải các toán hạng của chúng từ bộ nhớ và / hoặc lưu kết quả của chúng vào bộ nhớ; ARM là một kiến trúc lưu trữ tải và do đó chỉ có một vài hướng dẫn chuyên dụng để truy cập bộ nhớ. Trong khi đó x86 có các hướng dẫn nhánh có điều kiện dành riêng, trong khi ARM thực tế cho phép tất cả các lệnh được thực hiện có điều kiện. Ngoài ra, ARM cho phép thay đổi bit được thực hiện như một phần của hầu hết các hướng dẫn số học. Những khác biệt này dẫn đến các đặc tính hiệu suất khác nhau, sự khác biệt trong thiết kế bên trong và giá thành của chip và sự khác biệt về kỹ thuật lập trình ở cấp độ ngôn ngữ lắp ráp.
Phần kết luận
Lý do không thể có ngôn ngữ lắp ráp phổ quát là vì, để chuyển đổi chính xác mã lắp ráp từ tập lệnh này sang tập lệnh khác, người ta phải thiết kế lại mã một lần nữa.