Chúng ta thường được thông báo rằng phần cứng không quan tâm chương trình được viết bằng ngôn ngữ nào vì nó chỉ nhìn thấy mã nhị phân được biên dịch, tuy nhiên đây không phải là toàn bộ sự thật. Ví dụ, hãy xem xét Z80 khiêm tốn; các phần mở rộng của nó cho tập lệnh 8080 bao gồm các hướng dẫn như CPIR rất hữu ích để quét các chuỗi kiểu C (chấm dứt NULL), ví dụ để thực hiện strlen()
. Các nhà thiết kế phải xác định rằng việc chạy các chương trình C (trái ngược với Pascal, trong đó độ dài của chuỗi trong tiêu đề) là thứ mà thiết kế của họ có thể được sử dụng cho. Một ví dụ kinh điển khác là Máy Lisp .
Những ví dụ khác là gì? Ví dụ: hướng dẫn, số lượng và loại thanh ghi , chế độ địa chỉ, làm cho một bộ xử lý cụ thể ủng hộ các quy ước của một ngôn ngữ cụ thể? Tôi đặc biệt quan tâm đến các phiên bản của cùng một gia đình.
sizeof(int)
bằng 1 phải yêu cầu loại đó char
được ký (vì int
phải có khả năng giữ tất cả các giá trị của loại char
). Tôi đã viết mã cho một máy trong đó char
và int
cả hai số nguyên có chữ ký 16 bit; những khó khăn lớn nhất là người ta không thể sử dụng các hiệp hội để chuyển đổi loại và việc lưu trữ hiệu quả số lượng lớn byte yêu cầu đóng gói và giải nén thủ công. Những vấn đề đó không đáng kể so với khả năng trong C đó sizeof (int) == sizeof (dài), vì ...
unsigned int
giá trị. C99 đã cải thiện tình hình đó, nhưng trước C99, không có cách nào một bước an toàn được đảm bảo để so sánh giá trị âm với giá trị của loại unsigned int
(người ta sẽ phải kiểm tra xem số đó có âm hay không trước khi so sánh).