最近、経験を積むために、アセンブリ コーディングを始めたいと思っています。私はそれを調べることにし、いくつかの良い結果を得ていました (単純な asm ですが)、すべてがまだぼやけており、複数の.asm ファイルを.. &.. & .. Oracle VMの.vfdまたは.imgファイルで終了します。
そのため、ここ数週間、暇なときに、次のことを可能にする作業方法を見つけようと Web を調べていました。
1. Compile my .asm files into individual .obj files
2. Link these multiple files into one .bin
3. Place this .bin into a .vfd or .img
4. Finally ran on the Oracle VM.
Windows 7 64 ビット システムで現在使用しているプログラムは次のとおりです。
(すべてMinGWを介して)
1. nasm - to compile the asm to .obj / .bin files
2. ld - to link .obj files into a .bin (I think)
3. dd - to create a .img file from a .bin file
しばらくいじった後、単一の .asmファイルを.bin ファイルにコンパイルし、それをddを使用して.imgに配置することができました(以下はオンラインのチュートリアルからのものです)。
(これらのコマンドを以下の順序で実行するバッチ ファイル)
1. nasm -f bin -o bootloader.bin bootloader.asm
2. dd if=bootloader.bin of=output.img count=1440
そして、output.imgを読み取って正しく表示するOracle VMを実行しました。わーい。
今。私は数年前から Visual C++でコーディングしてきましたが、通常は単一のソリューションで多くのファイルを使用しています。asmでコーディングするときは、複数のファイルを持つこともできるはずだと感じています。だから私は読んだことがありますが、多くの人が「ld」を使用しています-.objファイルを.binファイルに「結合」するリンカーですか?
そこで、上記のbatファイルを次のように編集しました。
1a. nasm -f bin -o bootloader.bin bootloader.asm
1b. nasm -f bin -o kernel.bin kernel.asm
2. ld -o link.bin bootloader.obj kernel.obj
3. dd if=link.bin of=output.img count=1440
最初に表示されたエラーは、「非 PE 出力ファイルに対して PE 操作を実行できません」というものでした。Googled.. およびGoogled ... およびGoogled .... およびGoogled ..... (次への 1 つのリンク) を行った後、機能する他の方法を見つけることができませんでした。エラーがさらに発生しました。私は正直迷っています。- いくつかの異なるプログラム (例: objcopy)、多くの異なるパラメーターなどを試しましたが、あまり進歩していません。案内が必要です。:)
そして、これが私の最後の質問です。これらのファイルをldと一緒に「リンク」すると、求める結果が得られますか? (複数のファイルが 1 つの最終的なバイナリ ファイルに) 、Windows システムで正しく実行するにはどうすればよいですか?
私は、asm やこれらのプログラムについて詳しく説明しているわけではないので、ここにたどり着く前にできる限り多くのことを調べようとしました。ですから、説明を素晴らしく明確に保つことができれば幸いです。お願いすることがたくさんありましたら申し訳ありませんが、グリルはご遠慮ください。:)
ありがとう!