Tôi nghĩ rằng tôi đang tìm kiếm một câu trả lời cho một câu hỏi đố. Tôi đang cố gắng hiểu tại sao kiến trúc MIPS sử dụng giá trị "không" rõ ràng trong một thanh ghi khi bạn có thể đạt được điều tương tự bằng cách chỉ XOR bất kỳ thanh ghi nào chống lại chính nó. Người ta có thể nói rằng các hoạt động đã được thực hiện cho bạn; tuy nhiên, tôi thực sự không thể tưởng tượng được một tình huống mà bạn sẽ sử dụng nhiều giá trị "không". Tôi đọc các bài báo gốc của Hennessey, và nó chỉ gán số 0 là vấn đề thực tế mà không có bất kỳ lời biện minh thực sự nào.
Có một lý do hợp lý để có một phép gán nhị phân được mã hóa cứng bằng 0 không?
cập nhật: Trong 8k của một tệp thực thi từ xc32-gcc cho lõi MIPS trong PIC32MZ, tôi có một ví dụ duy nhất là "không".
add t3,t1,zero
câu trả lời thực tế: Tôi đã trao tiền thưởng cho người có thông tin về MIPS và mã điều kiện. Câu trả lời thực sự nằm trong kiến trúc MIPS cho các điều kiện. Mặc dù ban đầu tôi không muốn chỉ định thời gian cho việc này, tôi đã xem xét kiến trúc cho opensparc , MIPS-V và OpenPOWER (tài liệu này là nội bộ) và đây là những phát hiện tóm tắt. Thanh ghi R0 cần thiết để so sánh trên các nhánh do kiến trúc của đường ống.
- số nguyên so với 0 và nhánh (bgez, bgtz, blez, bltz)
- số nguyên so sánh hai thanh ghi và nhánh (beq, bne)
- số nguyên so sánh hai thanh ghi và bẫy (teq, tge, tlt, tne)
- đăng ký so sánh số nguyên và ngay lập tức và bẫy (teqi, tgei, tlti, tnei)
Nó chỉ đơn giản là đi xuống làm thế nào phần cứng trông trong thực hiện. Từ hướng dẫn sử dụng MIPS-V, có một trích dẫn chưa được kiểm chứng ở trang 68:
Các nhánh có điều kiện được thiết kế để bao gồm các hoạt động so sánh số học giữa hai thanh ghi (cũng được thực hiện trong PA-RISC và Xtensa ISA), thay vì sử dụng mã điều kiện (x86, ARM, SPARC, PowerPC) hoặc chỉ so sánh một thanh ghi với 0 ( Alpha, MIPS) hoặc hai thanh ghi chỉ cho đẳng thức (MIPS). Thiết kế này được thúc đẩy bởi việc quan sát rằng một lệnh hướng dẫn so sánh và nhánh kết hợp vào một đường ống thông thường, tránh trạng thái mã điều kiện bổ sung hoặc sử dụng một thanh ghi tạm thời, và giảm kích thước mã tĩnh và tìm nạp lệnh động. Một điểm khác là so sánh với số 0 đòi hỏi độ trễ mạch không tầm thường (đặc biệt là sau khi chuyển sang logic tĩnh trong các quy trình nâng cao) và do đó gần như đắt như so sánh cường độ số học. Một ưu điểm khác của lệnh so sánh và nhánh được hợp nhất là các nhánh được quan sát sớm hơn trong luồng lệnh phía trước và do đó có thể dự đoán sớm hơn. Có lẽ có một lợi thế cho một thiết kế với mã điều kiện trong trường hợp có thể lấy nhiều nhánh dựa trên cùng một mã điều kiện, nhưng chúng tôi tin rằng trường hợp này là tương đối hiếm.
Tài liệu MIPS-V không đánh vào tác giả của phần được trích dẫn. Tôi cảm ơn tất cả mọi người đã dành thời gian và sự quan tâm của họ.