2010-06-28 2 views
2

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

org 7C00h 
    %include "boot.asm" 

org 1000h 
    %include "kernel.asm" 

PS: Я уже поставил %include директиву, используя стиль NASM-синтаксис, на ФАПО это должно быть просто include.

ответ

4

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

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

В принципе, оператор 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

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

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

Смежные вопросы