ビッグエンディアンとリトルエンディアン(と私)
思い出話とうんちくです。
Z80時代
1980年代初頭、中学生だった私が最初にアセンブラ(当時は機械語、マシン語と呼んでいた)に触れたのはNECのPC-8000, 8800シリーズのZ80。これは8bit CPUでアドレス幅は16bitでした。メモリを16進数で8bitごとにダンプしたときに、アドレスの部分の16bitのデータは上位8bitと下位8bitの順番がひっくり返る。
そういうものだと教えてもらいました。これがリトルエンディアンでした。
6809時代
富士通のパソコン FM-8はCPUにモトローラの8 bit CPUの6809を使っていました。
これの後継のFM-7はFM-8とほぼ同じ機能を持ちながら価格がほぼ半額になりました。技術革新による値下げというのを初めて見たのはこれだと思います。当時はインフレだったので後から出た製品の値段が上がっているのが普通でしたから。
高校に入学したときにNECのPC-8801を買ってもらいました。[1]ですが、FM-7の登場に感激した私はPC-8801をうまく売却して、FM-7を手に入れました。
6809はビッグエンディアンでした。
インテル vs モトローラ
1980年代半ば。当時のパソコンPC-9801は16bit CPUのインテルの8086(またはそれの互換のNEC製のV30)を使っていました。これはリトルエンディアン。
大学生になってからプログラミングのアルバイトを始めました。そのとき初めてC言語を使い、CPUはモトローラの68000でした。当時の私としては最先端の体験でした。
8086のシリーズは8bitCPUを拡張したような感じで、アドレスを扱うのにセグメントレジスタというトリッキーなものを使う必要がありました。それに対して68000は内部レジスタは32bitの幅があり、アドレスも32bitレジスタのうちの下位24bitを使うというもので、16bitを超えるアドレス空間を自然に扱うことができました。
インテルはリトルエンディアンのCPUの代表格、モトローラはビッグエンディアンの代表格でした。
私はモトローラのCPUを使ったパソコンが出ることを熱望していたのですが、Appleのマッキントッシュという私には手が届かない高価なもの以外ではモトローラのCPUは採用されませんでした。
インテルは今でも健在ですが、モトローラは勢いをなくし、半導体部門はフリースケール・セミコンダクタ社として分離しましたが、それも後にNXP社に吸収されてしまいました。
リトルエンディアンが優勢に
各社のマイコンが群雄割拠したのですが、世の中の主流はリトルエンディアンに収束していきました。
聞いた話によるとPCIバスを使うにはリトルエンディアンの方が都合がよかったそうです。
それから、組み込み向けOSとしてマイクロソフトがWindwos CEというのを出しました。ハンドヘルドコンピュータというカテゴリのものがある時期一斉に出てきました。このときの要件がMMUを備えることとリトルエンディアンであることだと聞いたことがあります。
それに合わせるために日立のマイコンはSH1, SH2はビッグエンディアンだったのに、SH3はリトルエンディアンに変わりました。同じようにNEC製のMIPSアーキテクチャのマイコンもビッグエンディアンのみから、ビッグエンディアン、リトルエンディアンの両対応[2]になったと記憶しています。
ビッグエンディアンの生き残り
今となってはすっかり勢いを失ってしまったモトローラでしたが、昔通信機器の分野では力を持っていました。
それで、機器をまたがってやりとりするときのバイトの順番としてはビッグエンディアンが採用されました。
今ではそれをネットワークバイトオーダーと呼びます。
ビッグエンディアンのCPUは今でもネットワーク機器に使用されているそうです。
ARMはコンフィグ次第でビッグエンディアン、リトルエンディアンのどちらにも対応できるようになっているのですが、ビッグエンディアンで使用するLinxカーネルも開発が続けられているそうです。用途はルータやスイッチングハブなどのネットワーク機器だそうです。
関連
Discussion