アセンブラ
アセンブラとは、プログラミング言語の言語処理系であり、入力されるソースコードはアセンブリ言語で書かれたものである。ただしターゲットマシンのアーキテクチャによりアセンブリ言語にはバリエーションがあるため、「アセンブラのソースコード」を(機能拡張を含む)保守することが面倒になってきて、訳がわからなくなることも(アマチュアプログラマの間では)あった[1]。
概要[編集]
歴史的には、ギリシャ神話の記憶の女神ムネモネス(ムネモシュネ、あるいはムネーモシュネー)の名から取ったCPUの命令語と数字列を、機械語(マシン語、マシンコード、オブジェクトコード)に変換しコンピューターが実行可能な形式のデータに変換する。つまり、「アセンブリ言語のソースコード⇒実行可能なマシンコード」という機能を担った、ある種の翻訳系であり、アプリケーション・プログラムの一種であった。
当初のこマシンはパネルの表面にトグルスイッチが二段に渡って並んでおり、アドレスとその内容を表すディスプレイがあり、「書込み」ボタンがあるという単純なものであった。これを言語としては「オンオフ」といい、紙テープに保存するのが通例であった[2]。その後、「二進数で丸暗記するのはまともな人間のすることではない」というので[3]ニモニックが誕生した。そのニモニック・コードをバイナリに(手作業で)落とすことを「ハンド・アセンブル」と呼ぶ。
このアセンブル作業をコンピュータ自身に行わせようので開発されたのが、アセンブラである。
進歩[編集]
アセンブラに入力されるのは穿孔された紙テープであり、出力も紙テープであった。そのため、「頭から尻尾まで」という処理の順序があった。このとき、「すでに読み終わった部分」を「後方」、「これから読む部分」を「前方」と呼ぶ。当初のアセンブラでは前方参照は原則的には使えなかった。そこで「同じテープを二度通す」という「2 パスアセンブラ」とか「べつにターゲットマシンとアセンブラを動かすマシンは同じでなくてもいいんじゃねぇ?」というので記憶領域の広いマシンでアセンブラを動かすクロスアセンブラが登場したりした。
そののち「機械語から元のソースを発掘する」という「逆アセンブラ」なるものが登場し、「どうもアセンブラの動作が異様に重い」というのでアセンブラのコードを掘っていたら「中から仮想マシンが発掘された」という話もある。
また、アドレスの参照には飛び先のアドレスをリテラル値で指定する「直接ジャンプ」、相対位置を使う「関節ジャンプ」と「指定されたアドレスに飛び先のアドレスが入っているからそれを使え」という「間接ジャンプ」があり、「生成されたバイナリーコードを実メモリのどこに置いてもよい」というアロケーション・フリーのプログラムをどうするかというので「リンカ」のお世話になったりとかマクロのライブラリを参照するだのマクロ展開をするだのといった話も出てくるようになった。
そうして現在のアセンブラ環境が動いているのである。
脚注[編集]
- ↑ このため、この関係を説明するために「マッキーマン図」というものがかつて用いられたが、古すぎてネット検索に引っかからず、自分のWebLogが出てくるのだからなさけない。要はコードを〇、処理系を□、翻訳系を「T字形」を太くした「凸」を上下反転したような形を(向かって左から右へ)描いて表現した図形である。□は縦にも積めて、JVMの上にJavaのオブジェクトが乗ったりもする。
- ↑ 「現物の紙テープを見かけたのは四十年以上昔の航空自衛隊入間基地にあるFADP(飛行管理隊)くらいだ」そうなので、辛うじて博物館に収蔵されているかもしれない。
- ↑ シーモア・クレイはクレイIのイニシャルコードを丸暗記していたというが。