2016-03-26 2 views
1

Поскольку первый сектор содержит всего 512 байт, а остальная часть кода огромна, мне кажется, что мне нужен отдельный ассемблерный код для .lst-файла. Я не уверен, что это называется привязкой, но я хочу связать этот файл ассемблера, когда я создаю файл .img с NASM.Добавление двух файлов .asm с nasm

первый один

ORG  0x7c00  
start: 
    JMP  entry 
    DB  0x90 
    ; Start of BIOS Parameter Block   
    DB  "MyOS "  
    DW  512   
    DB  1   
    DW  1   
    DB  2   
    DW  224   
    DW  2880    
    DB  0xf0    
    DW  9 
    DW  18   
    DW  2   
    DD  0   
    DD  2880    
    DB  0,0,0x29   
    DD  0xffffffff  
    DB  "MyOS-Vol "  
    DB  "FAT12 "  
    TIMES 18 DB 0   
    ; End of BIOS Parameter Block   

entry: 
    MOV  AX, 0   
    MOV  SS,AX 
    MOV  SP,0x7c00 
    MOV  DS,AX 
    MOV  ES,AX 
    MOV  SI,msg 
loop: 
    MOV  AL,BYTE [SI] 
    ADD  SI, 1   
    CMP  AL,0 
    JE  fin 
    MOV  AH, 0x0e   
    MOV  BX, 0xe1   
    INT  0x10    
    JMP  putloop 
fin: 
    HLT     
    JMP  fin   

msg: 
    DB  0x0a, 0x0a  
    DB  "hello, world" 
    DB  0x0a    
    DB  0 

maker:  
    TIMES 0x01fe-(maker-start) DB 0 
    DB  0x55, 0xaa  

второй один

DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 
TIMES 4600 DB 0 
DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 
TIMES 1469432 DB 0 

Как я могу добавить второй код к первому коду? Не путем копирования вставки текста, но как при объединении объектного файла.


Для тех, кто ищет формат диска fat12. DOS Boot Record Format for FAT12 and FAT16

+1

Предполагаю, что вы говорите о ограничениях при загрузке на компьютерном оборудовании x86. Нет волшебного способа связать вещи, чтобы вы могли иметь первую часть в загрузочном секторе, а остальное - в другом месте. Загрузчик должен обрабатывать загрузку дополнительного кода и выполнять его. –

+0

У меня есть ваше мнение. Думаю, я не описал свою точку зрения четко. Извини за это. То, что я пытался спросить, это. Как связать файлы asm вместе перед загрузкой в ​​оборудование? Я знаю, что компилятор связывает объектные файлы перед созданием исполняемого файла. Но как насчет ассемблера? Я придумал небольшую программу, считывающую файл, и добавление другого файла в виде строковой функции. Но это не так. Есть ли какие-либо варианты для nasm? Я не мог найти один :( –

+1

Поскольку у вас есть 'org 0x7c00' в верхней части вашего asm-файла, это означает, что вы собираете свой код с опцией' -f bin' (например, 'nasm -f bin boot.asm - o boot.bin'). Выход из 'nasm -f bin' - это уже полностью связанное плоское двоичное изображение, которое не может быть _linked_ в традиционном смысле. Оно буквально написано загрузчику (обычно с помощью инструмента, такого как _DD_). Вы используете Windows/OSX или Linux? И какой компоновщик вы хотите использовать (_LD_, _GCC_ и т. Д.)? –

ответ

3

Самый простой способ сделать это было бы просто присоединиться к две сборки файлов вместе и собрать с -f bin возможностью производить свой образ дискеты непосредственно. Размер файла листинга не будет проблемой, ваш второй файл создает файл листинга, который выглядит следующим образом:

 
    1 00000000 F0FFFF0000000000   DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 
    2 00000008 00     TIMES 4600 DB 0 
    3 00001200 F0FFFF0000000000   DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 
    4 00001208 00     TIMES 1469432 DB 0 

Если вы хотите сохранить эти два файла исходного кода разделения можно использовать %include директиву NASM в:

%include "bootsector.asm" 
%include "fat12.asm" 

в качестве альтернативы вы можете объединить два файла вместе после их сборки непосредственно в исполняемые файлы с помощью команды cat:

nasm -f bin bootsector.asm -o bootsector.bin 
nasm -f bin fat12.asm -o fat12.bin 
cat bootsector.bin fat.bin > floppy.img 

Вам не нужно использовать компоновщик для создания вашего гибкого образа, если вы не связываете файлы, которые ссылаются на символы вне их собственного файла. Даже тогда было бы гораздо проще использовать директиву %include, чтобы «связать» все вместе. Переход по компоновщику означает писать сценарий компоновщика, который в этом случае не стоит проблем.

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