□□□□
先日、新人教育で2進数の説明をしていた時に、この世界では必須のバイトオーダーの話題に触れました。しかしながら、久しぶりに説明しようとすると、インテルとモトローラCPUのどちらがビッグエンディアンでどちらがリトルエンディアンか、思い出すのにしばらく時間がかかりました。

□□□■
整理すればどうということはないのですが、16進数のlong型(4Byte)で0x02468ACEという値があった時に、データの並びが”02”+”46”+”8A”+”CE”となるのが主にモトローラ系で、逆に”CE”+”8A”+”46”+”02”となるのがインテル系となります。

□□■□
直感的にみると0x02468ACEを素直に”02”+”46”+”8A”+”CE”と並べるモトローラ系が当たり前のように感じます。私もこの世界に入ったころはPFU製のミニコン(U-1000シリーズ)を使っており、モトローラと同じバイトオーダーだったのでこの方式になじみがありますが、これは人間から見た見方です。しかしながらコンピュータから見ると、演算は下位の桁から実施するので、実はインテル式の方が処理しやすいのです。

□□■■
この2つの方式について、モトローラ式を桁の重みの大きい方から並べるのでビッグエンディアン、インテル式の方は桁の重みの小さい方から並べるのでリトルエンディアンといいます。

□■□□
ここに出てくるエンディアンというのは、みなさんよく知っている、英国のジョナサン・スイフトの小説「ガリバー旅行記」から由来しています。先日5歳の娘が図書館から借りてきて読んでくれとせがまれた中に、この小説の子供向け絵本版があり久しぶりに読みました。

□■□■
ガリバーが船で難破してたどり着いたのが小人国「リリパット国」で、同じく小人が住む隣国の「ブレフスキュ国」とは、卵を割る時にどちらの端から割るかで戦争にまで発展するという話が描かれています。この中で、卵を大きな橋から割る人々をビッグエンディアン、小さい端から割る人をリトルエンディアンと呼ばれ、バイトオーダーの方式の呼称としても使われるようになりました。

□■■□
ガリバー旅行記は子供のおとぎ話となることが多いですが、実は社会を風刺するもので、人間はこのエンディアンのようにどうでもよいことで対立し、殺し合いをする愚かな生き物であるということを伝えているのです。

□■■■
さて、コンピュータの話に戻ります。このエンディアンは、プログラムが特定のコンピュータのみで動作する場合には特に問題にはなりませんが、異なるエンディアン同士で通信をする場合には、データの送信順を決めておかないと大きな問題となります。

■□□□
私が24歳の頃、ある紡績工場の仕事でこの問題に直面しました。紡績装置は錘(すい)と呼ばれる軸に糸を紡いで巻き上げていきますが、この錘が紡績の出来高の単位となります。紡績装置はこの錘を保持するスロットが横にずらっと並んでおり、その数によって50錘機、64錘機などと呼ばれていました。我々の仕事は、紡績装置に取り付けてあるカウンターからシリアル通信でその出来高(錘の数)を読み取って集計することでした。

■□□■
カウンターは京都のM機械という会社が製造しておりました。M機械からは事前に簡単な通信フォーマットが送られてきていました。当時のことですからFAXでした。これをみると、日付や機械の号機番号に引き続いて、スロット毎の錘が交換された回数(つまり錘の出来高)が順番に並んでくることになっていました。

■□■□
仕様書をみるとその出来高はデータサイズが3バイトだったので、0から最大999までのデータが来ることになります。ある程度プログラムが出来上がった時点で、我々のチームからFさんが京都のM機械まで出張し、通信が正常に行えるかどうかのインターフェイステストをしてきましたが、その結果は特に問題なしということでした。

■□■■
その後、いよいよ岐阜の紡績工場で現地テストが始まりました。紡績装置との配線工事も完了し、プログラムの動作テストができるようになりました。しかし実際に通信を行ってみると、どう考えても異常な値が送られてきます。通信データがまるきりでたらめというわけではなく、日付などは正しく送られてきます。あれやこれや調査をしてようやく3ケタの数値がひっくり返って送られてきていることがわかりました。21という値のときは本来”021”となると思っていたところが、実際は”120”となってしまうのです。

■■□□
バイトをひっくり返して送ることについてM機械の担当者に問い合わせると、「そんなことは常識です」と回答されました。仕様書にはもちろんそのようなことは書いてありませんでしたし、データがひっくり返っているのは相手のバグだから当然M機械が修正してくれることと思い込んでいた我々は驚きました。

■■□■
そのうち、開発メンバーの誰かが「マイコンの世界ではバイトを逆に並べるのが普通らしい」ということを言い出したので、そんなものかと思いながら自分たちのプログラムを修正し始めました。我々の部長は、「Fは何をしに京都まで行ったんだ」と渋い顔をして言いました。おそらく、何かしらの値を受信出来たことで安心してしまい、データの正当性までチェックしなかったのでしょう。

■■■□
自分たちの住んでいる世界のことが「常識」と思い込んでいると、このようなことが起こります。互いのことを認めあわないと、まさに「リリパット国」と「ブレフスキュ国」のように対立を深めるばかりとなるでしょう。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

上部へスクロール