私たちはされていることが多い語ったが、これは真実ではない、ハードウェアは、プログラムがそれだけでコンパイルされたバイナリコードを見ているように書かれている言語を気にしないこと。たとえば、謙虚なZ80を考えてみましょう。8080命令セットへのその拡張には、C-スタイル(NULLで終了する)文字列をスキャンするのに役立つCPIRなどの命令が含まれますstrlen()
。設計者は、Cプログラムの実行(文字列の長さがヘッダーにあるPascalとは対照的に)が、設計で使用される可能性が高いことを特定している必要があります。別の古典的な例は、Lisp Machineです。
他にどんな例がありますか?たとえば、特定のプロセッサが特定の言語の規則を好むようにする命令、レジスタの数とタイプ、アドレス指定モードはありますか?私は特に同じ家族の改訂に興味があります。
sizeof(int)
1 に等しい実装では、型char
に署名するint
必要があります(型のすべての値を保持できる必要があるためchar
)。私はどこのマシンのコードを書いたchar
とint
の両方の16ビット符号付き整数です。最大の困難は、型変換に共用体を使用できないことであり、大量のバイトを効率的に保存するには、手動でのパックとアンパックが必要です。これらの問題は、Cでsizeof(int)== sizeof(long)である可能性と比較して、マイナーです。なぜなら...
unsigned int
値の差を保持することが保証されている標準タイプがないことを意味します。C99はその状況を改善しましたが、C99以前は、潜在的に負の値を型の値と比較する安全なシングルステップの方法はありませんでしたunsigned int
(比較を行う前に数値が負かどうかをテストする必要があります)。