Отличается ли газ.орг от ОРГ по насм?
Я использую 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
в то время как hexdump выходных данных:
○ → 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
который не ведет себя так же, как ORG в Nasm? Если я использую 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
Что здесь не так? Благодарю.
2 ответа
Вы сравниваете бинарный файл (из Nasm) со связываемым файлом.o из (G) как. Я думаю, что если вы связываете "bare.o" с ld... "ld -o bare.bin -oformat binary bare.o" (не уверен в синтаксисе), вы получите нечто более близкое к тому, что вы ожидаете. Или... просто используйте насм.
Там нет ничего плохого, просто .org
в газе нет .org
в NASM. .org
в ГАЗ указывает, на сколько нужно продвинуть счетчик текущего местоположения, и выглядит так:
.org expr, fill
Где заполнение - это то, что использовать для заполнения, который по умолчанию равен нулю, если ничего не указано ( подробнее здесь)
.org
в NASM указывает адрес памяти, куда будет помещен этот модуль (и, таким образом, генерирует правильные инструкции перехода и перехода) ( более подробная информация здесь)
Я предлагаю вам использовать NASM для таких плоских бинарных файлов, которые всегда были для меня чарами.
Использовать ld -Ttext 0x7c00 --oformat=binary boot.o -o boot.bin
.