質問: PCのCPUのアセンブリ言語もCPUに対してだいたいが一対一で対応しているため一つのアセンブリプログラムをアセンブラするならばリンカが必要ないと、参考書やネットなどで調べてわかりました。(高級言語を使う際はリンカがあったほうが便利ですが。) <行いたいこと> しかし(Linux上などで)複数のアセンブリプログラムを一つにする場合にはリンカは必要のようで、リンカのように複数のアセンブリプログラムを手作業で一つにまとめて見たいと考えています。 手作業で一つにまとめるとしたら、どの様にアセンブリプログラムを一つにまとめるのでしょうか? 調べたうちの方法の一つとしてハンドアセンブルというものがリンカの代わり?になるとも書いてありました。 できるならばマイコンなどのアセンブリ言語から始めたいと思っています。AVRなど。 いずれはLinuxをいれたPCで行いたいと思っています。 <達成目標> 私はリンカを使わないでアセンブリプログラムを一つにする方法が知りたいです! どうかよろしくお願いします。 膨大なアセンブリプログラムをリンカを使わずに一つにするのに何か月何年かかっても構いません。 <編集> 解答して頂いた皆様どうもありがとうございます。 補足させていただきます。 OSはLinuxで想定しています。また本の一説なのかわかりませんがリンカがなかった昔の時代、自分でハンドアセンブルをしてオブジェクトファイルをリンクして実行ファイルを出力していたと書いてありました。(昔なので今のような64bitではなく、8bitなどのマイコンだと思います) しかし、使っているPCのCPUは複雑すぎてハンドアセンブルするには不向きです。データシートがあったとしても初心者の私には無謀だし、無理です。なのでAVR、(Linuxを搭載した)ラズパイなどでハンドアセンブリを行いリンカの仕事を私の手でやってみます。 もしかしたら、AVR、(Linuxを搭載した)でハンドアセンブルが慣れればPCのCPUでもハンドアセンブルできるようになるかもしれませんがまだまだ先の話です。 <編集2> 確かに、アセンブラがあるのに、ハンドアセンブルでリンクする必要はないかもしれませんが、機械語(に直されたアセンブリ命令)をどうやって機械語で書いてあるオブジェクトファイルに使って実行ファイルにしたのか凄くきになるのです。 AVRマイコンにしても(Linuxを搭載した)ラズパイにしても、 機械語で書かれたオブジェクトファイルにハンドアセンブルして得た機械語を付け加えることで実行ファイルにしたのか、気になって仕方がありません
回答: こんにちは。 元の回答のコメント・ツリーが長くなったことと、編集された質問への回答で回答内容が異なりますので、別途回答します。 > > リンカがなかった昔の時代、自分でハンドアセンブルをしてオブジェクトファイルをリンクして実行ファイルを出力していたと書いてありました。 > > > ハンドアセンブルしていた時代は、オブジェクト・ファイルや実行ファイルなどは存在しないと思います。紙テープなどが良く使われていた頃と思います。 ハンドアセンブルの結果は、紙に手書きしたり、紙テープにパンチしたりです。 上記リンクは普通の紙に(恐らく)手書きしたブートローダをトグルスイッチでパチパチと入力した後、紙テープに記録されていたBasicインタプリタをロードして起動している動画です。 > > AVR、(Linuxを搭載した) > > > 私がAVRを触っていた頃よりかなり進歩しているのでもしかするとあるかも知れませんが、基本的にAVRはlinuxを搭載できるようなCPUではありません。 また、ハンドアセンブルして実行可能形式を作るようなローレベルなことを行う場合は OSは無いほうがよいです。 OSの各種の約束事を学習するだけでも大変です。それらを学習する前にまずはOS上で「普通」のC言語プログラムを開発するスキルは必須です。 そして、OSのメモリ管理などの概念も把握しておかないと理解できませんので、OS配下の実行可能形式のフォーマットを理解するにはそれなりに膨大な時間がかかります。 OS配下のリンカは実行可能形式への変換を自動的に行ってくれますが、それを手でやるためには上記の理解が必要になります。 > > ハンドアセンブルでリンク > > > アセンブルとリンクは全く別の作業です。「ハンドアセンブルでリンクする」は「自転車をこいで海を渡る」という文と同じように間違った文です。単なるタイプミスなら良いのですが、複数回このような記述をされているので、アセンブルとリンクの**役割**を理解されていないと思います。**仕組み**を把握する前に**役割**を理解しないと無理があると思います。 > > 機械語(に直されたアセンブリ命令)をどうやって機械語で書いてあるオブジェクトファイルに使って実行ファイルにしたのか凄くきになるのです。 > > > 意訳すると「アセンブリ言語で書かれたソース・ファイルから実行可能形式ファイルが作られるまでの過程が凄く気になるのです」でしょうか? もし、YESの場合、AVRでは微妙にイメージが異なるかもしれません(クロス開発になる)が、単純ですから学習に向いており、かつ、情報も多く価格も安いので進めやすいと思います。 なお、この方向性はどちらかというと組み込み系のプログラムに有用です。