Kanjiの日記: プログラミングにマシン語の知識は必要か?
プログラミングにマシン語の知識は必要か?みたいなトピックに投げたコメントが思ったよりウケが良かったので驚きました。単純明快で極論気味で穴のある内容のほうが、他の人による修正や補足がつきやすいのでしょう。スラドがそういうコメントにモデレートを与えるように出来ているのが納得できます。
Z80ってレジスタの数が少ないし目的ごとにこのレジスタしか使えないと決まっているみたいなので、コードを書くのがまるでパズルのようだと聞きました。8086なら私も結構使ったので分かるのですが、自由度が高い一方で一部の命令でやはり特定のレジスタしか使えないものが多くて不便でした。
ところがi386の32ビットモードになると使いたい放題です。アドレス空間も面倒なセグメントが取っ払われて分かりやすいですしね。セレクタはOSに任せておけばいいし。コードが保護されるので暴走して帰ってこないこともありません。
元コメントがインテルがらみだったのでインテルに絞って書きましたが、他のRISC系も似たようなものなのではないでしょうか。私は大学でMIPSのR3000系を実習で習いましたけど、レジスタが32本もあればなんだって出来るんじゃないでしょうか。コンパイラによる最適化を狙って作られたそうです。
古い知識を知っているからといって若い人に威張るのは見苦しいなぁと思います。でも分野を絞ると組み込み系では今も必要なのは確かです。ただ、どなたかが書いていたように、あんまり具体的な実装は逆に知らないほうがいいです。Cでコンパイラにレジスタ割り当ての指示をする構文なんてありますけど、使うべきでないという考え方が主流というか当たり前です。さすがにこれは極論ですけどね。