Tôi có một số khía cạnh bổ sung ở đây:
Hãy xem xét hoạt động "a = b / c" x86 sẽ thực hiện điều này như
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
Như một phần thưởng bổ sung của lệnh div edx sẽ chứa phần còn lại.
Một bộ xử lý RISC sẽ yêu cầu đầu tiên tải địa chỉ của b và c, tải b và c từ bộ nhớ đến các thanh ghi, thực hiện phép chia và tải địa chỉ của a rồi lưu trữ kết quả. Cú pháp Dst, src:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
Ở đây thường sẽ không có phần còn lại.
Nếu bất kỳ biến nào được tải qua con trỏ thì cả hai chuỗi có thể dài hơn mặc dù điều này ít xảy ra hơn đối với RISC vì nó có thể có một hoặc nhiều con trỏ đã được tải trong một thanh ghi khác. x86 có ít thanh ghi hơn nên khả năng con trỏ nằm trong một trong số chúng là nhỏ hơn.
Ưu và nhược điểm:
Các lệnh RISC có thể được trộn với mã xung quanh để cải thiện việc lập lịch lệnh, điều này ít xảy ra với x86 mà thay vào đó, x86 thực hiện điều này (nhiều hoặc ít tùy thuộc vào trình tự) bên trong chính CPU. Chuỗi RISC ở trên thường sẽ dài 28 byte (7 lệnh có độ rộng 32 bit / 4 byte mỗi lệnh) trên kiến trúc 32 bit. Điều này sẽ khiến bộ nhớ ngoài chip hoạt động nhiều hơn khi tìm nạp các hướng dẫn (bảy lần tìm nạp). Chuỗi x86 dày đặc hơn chứa ít lệnh hơn và mặc dù độ rộng của chúng khác nhau, có thể bạn cũng đang xem trung bình 4 byte / lệnh ở đó. Ngay cả khi bạn có bộ nhớ đệm hướng dẫn để tăng tốc bảy lần tìm nạp này có nghĩa là bạn sẽ có ba lần thiếu hụt ở nơi khác để bù đắp so với x86.
Kiến trúc x86 với ít thanh ghi hơn để lưu / khôi phục có nghĩa là nó có thể sẽ thực hiện chuyển mạch luồng và xử lý ngắt nhanh hơn RISC. Nhiều thanh ghi hơn để lưu và khôi phục đòi hỏi nhiều không gian ngăn xếp RAM tạm thời hơn để thực hiện ngắt và nhiều không gian ngăn xếp cố định hơn để lưu trữ trạng thái luồng. Những khía cạnh này sẽ làm cho x86 trở thành ứng cử viên tốt hơn để chạy RTOS thuần túy.
Trên một lưu ý cá nhân hơn, tôi thấy việc viết RISC assembly khó hơn x86. Tôi giải quyết vấn đề này bằng cách viết quy trình RISC trong C, biên dịch và sửa đổi mã đã tạo. Điều này hiệu quả hơn từ quan điểm sản xuất mã và có lẽ kém hiệu quả hơn từ quan điểm thực thi. Tất cả 32 đăng ký để theo dõi. Với x86 thì ngược lại: 6-8 thanh ghi có tên "thật" làm cho vấn đề dễ quản lý hơn và tạo thêm niềm tin rằng mã được tạo ra sẽ hoạt động như mong đợi.
Xấu xí? Đó là trong mắt của người xử lý. Tôi thích "khác biệt".