私は現在、個人用のプロジェクトとして単純なブートローダを作成しています。私はアセンブラとしてNASMを使用して構築された動作プロトタイプを持っています。しかし、私はGNUツールにもっと慣れ親しんでいきたいので、私はそれらを使って自分の作品を書き直そうとしています。binutilsをLinuxで使用して、シンプルなブートローダを書き込むために
オンラインでこの小さなサンプルがあります。'Hello World' Bootloaderは、「ブートローダー」を作成してビルドするためのいくつかのツールの使用方法を示しています。しかし、読んだあと、「ガス」はgccのバックエンドであり、直接呼び出されるべきではないということは私の理解である。この情報は、プログラムのサイズを計算するためにシンボルを使用したアセンブリー・ファイル内の式を書き込もうとしたときに発生しました。これは、0x55を書き込む前に書き込む必要があったバイト数と、0xAAです。
;---------------------------------------------
; Write Zeros up to end of program - 2 then boot signature
;---------------------------------------------
size equ $ - entry
times (512 - size - 2) db 0
db 0x55, 0xAA ;2 byte boot signature
ネイティブガスによって読ま構文を使用して、式のこの等価セットを記述する方法があります:NASMコードのこのビットを使用していますか?私の試みは、たとえば、失敗した:
.size len, (512 - ((message + 12) - _start))
この式を使用してas
に渡すは私に次のエラーを与える:
./gasbootloader.asm:24: Error: invalid sections for operation on `message' and `_start'
私は、シンボルが得ることができるように、gccを通じて私のプログラムに合格する必要がありますか解決されましたか?
あなたの試みが元のコードにどのようにマップされているのかわかりません - あなたは 'len'と' message'と '_start'が何であるか説明できますか? –