Соединение двух ORG вместе - PullRequest
2 голосов
/ 28 июня 2010

Я создаю загрузчик, который загружает содержимое, которое находится в 1000h части дискеты. Я делал это, используя Fasm (потому что мой друг использует только Fasm, и он помог мне с этим), но я предпочитаю использовать Nasm , и теперь у меня проблемы с синтаксис, то я хочу знать, как я могу сделать это в Nasm:

org 7C00h
    %include "boot.asm"

org 1000h
    %include "kernel.asm"

PS: я уже поместил директиву %include, используя стиль синтаксиса Nasm, в Fasm это должно быть просто include.

Ответы [ 2 ]

4 голосов
/ 28 июня 2010

См. здесь для описания вашей проблемы или того, что я думаю , так как это немного трудно понять из вопроса.При публикации вопросов с вопросом «У меня проблемы с синтаксисом» рекомендуется показать, в чем заключается проблема синтаксиса : -)

См. здесь длярешение (но оно может не работать, см. ниже).

По сути, оператор org в NASM предназначен для установки базового адреса для раздела и не может использоваться для произвольной вставки байтов в поток.Он предлагает вам использовать что-то вроде:

org 1000h
%include "kernel.asm"
times 7c00h-($-$$) db 0 ; pad it out with zero bytes
%include "boot.asm"

Тем не менее, задумывались ли вы о том, что вы пытаетесь сделать.Если вы создаете плоский двоичный файл для загрузки в память, я не думаю, что вам все равно нужен загрузочный сектор и ядро ​​в одном файле.

BIOS захочет загрузить ваш загрузочный сектор какодиночный чанк в 7c00: 0 и почти наверняка будет сбит с толку, когда у него будет ядро ​​в начале этого чанка.Я думаю, что вам нужно будет создать два совершенно отдельных плоских двоичных файла: один для загрузочного сектора, а другой для ядра.BIOS загрузит ваш загрузочный сектор, затем загрузочный сектор загрузит ваше ядро.

Затем вы можете поместить соответствующий оператор org в два исходных файла, и ваша проблема должна быть решена.

1 голос
/ 25 августа 2010

Простой ответ - это невозможно в NASM.Оператор org работает в FASM так же, как в NASM, но по-разному в MASM.В NASM пример кода должен быть собран отдельно, а затем объединен для создания окончательного изображения.

Счастливый ответ - это редкость (и, вероятно,только) случай, когда код с разными начальными адресами необходимо объединить (с NASM) или собрать (с FASM) в одно изображение.Загрузочный сектор передается в 7C00h BIOS.На носителе (дискете, жестком диске, USB-накопителе) сразу же следует полезная нагрузка, которая передается на начальный адрес загрузочного сектора - загрузчик.

...