2

単純なブートとしてgnuを使用しています。これは次のようなものです。

.text
.org 0x7c00
start:
    movw $0x7c0, %ax
    movw %ax, %ds
    movw %ax, %es
    leaw greeting_msg, %si
    call prtstr
....

end:
    .fill 510-(end - start), 1, 0
    .word 0xAA55

出力の16進ダンプは次のとおりです。

○ → hexdump bare.o 
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0007c00 c0b8 8e07 8ed8 8dc0 7f36 e87c 0046 02b8
0007c10 bb4f 4115 10cd f883 754f a133 4f01 3e8d
0007c20 7c97 15b9 cd41 8310 4ff8 2275 8b66 9b16

nasmのORGと同じように動作しないのはどれですか?NASMを使用すると、次のように出力されます。

 ○ → hexdump test_org
0000000 c031 d88e 14be ac7c c008 0674 0eb4 10cd
0000010 f5eb feeb 6557 636c 6d6f 2065 6f74 4d20
0000020 6361 6e69 6f74 6873 0a0d 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0000 0000 0000

ここで何が問題になっていますか?ありがとう。

4

3 に答える 3

2

何も悪いことはありません。単に.orgGASには.orgNASMにはありません。.orgGASでは、現在のロケーションカウンターをどれだけ進めるかを示し、次のようになります。

.org expr, fill

ここで、fillは塗りつぶしに使用するものであり、何も指定されていない場合はデフォルトでゼロになります(詳細はこちら

.orgNASMでは、このモジュールが配置されるメモリアドレスを示します(したがって、正しい分岐およびジャンプ命令を生成します)(詳細はこちら

このようなフラットなバイナリファイルにはNASMを使用することをお勧めします。これは、私にとって常に魅力的な機能でした。

于 2012-06-18T14:39:46.300 に答える
2

バイナリ(Nasmから)を(G)asからのリンク可能な.oファイルと比較しています。「bare.o」をld..."ld -o bare.bin -oformat binary bare.o"(構文は不明)とリンクすると、期待するものに近いものが思い浮かぶと思います。または...nasmを使用します。

于 2012-06-20T13:32:03.113 に答える
1

を使用しますld -Ttext 0x7c00 --oformat=binary boot.o -o boot.bin

于 2020-05-05T16:09:41.440 に答える