GAS ではどのディレクティブを使用する必要がありますか? 「.org」ディレクティブは見つかりましたが、GAS には「.bits」ディレクティブがないようです。
アセンブラのデフォルトは 64 ビットです。コマンド ラインで--32
orを使用して選択できます。必要に応じてコード内のアーキテクチャを変更する方法については、 as--64
のマニュアルを参照してください (たとえば、ブート ローダーのリアル モード コードを生成するために使用できます)。.code16
.org
ほとんどの場合、ディレクティブを使用してコードの場所を指定することは望ましくありませんが、リンク スクリプトを使用するか、コマンド ラインでテキスト セグメントとデータ セグメントをロードする場所を指定する必要があります。( org 0x0000000000200000
2 MB 以上のバイナリ ファイルになります)。
gcc またはプレーン バイナリ ファイルを生成するには、何を渡す必要がありますか? つまり、-f bin オプションが NASM で行うことです。
$ cat test.S
.section .text
.globl _start
_start:
xor %rax, %rax
mov test, %rax
ret
test: .quad 0x1234567812345678
$ as --64 -o test.o test.S
$ ld -Ttext 200000 --oformat binary -o test.bin test.o
$ objdump -D -b binary -m i386:x86-64 test.bin
test.bin: file format binary
Disassembly of section .data:
0000000000000000 <.data>:
0: 48 31 c0 xor %rax,%rax
3: 48 8b 04 25 0c 00 20 mov 0x20000c,%rax
a: 00
b: c3 retq
c: 78 56 js 0x64
e: 34 12 xor $0x12,%al
10: 78 56 js 0x68
12: 34 12 xor $0x12,%al