Вы исключили 0x
из шестнадцатеричной константы 7C00
в вашей директиве ORG
. NASM рассматривает это как ошибку.
Вы, вероятно, собрали это с YASM, который вместо отклонения вашего источника создает 513-байтовый файл . Исправление вашего источника заставляет и YASM, и NASM создавать 512-байтовый файл. Это, вероятно, ошибка в YASM . К сожалению, в последнее время YASM не был в хорошем состоянии, поэтому, несмотря на то, что он имеет более длинные длинные NOP из директив align
(не разбирая разборку со многими строками однобайтового NOP), вам, вероятно, следует просто переключиться на NASM.
$ yasm boot-buggy.asm && ll boot-buggy
-rw-r--r-- 1 peter peter 513 Mar 13 06:03 boot-buggy
$ nasm boot-buggy.asm && ll boot-buggy
boot-buggy.asm:1: error: expression syntax error
boot-buggy.asm:1: error: No or invalid offset specified in ORG directive.
$ nasm boot-fixed.asm && ll boot-fixed
-rw-r--r-- 1 peter peter 512 Mar 13 06:04 boot-fixed
$ yasm boot-fixed.asm && ll boot-fixed
-rw-r--r-- 1 peter peter 512 Mar 13 06:04 boot-fixed
cmp -l boot-fixed boot-buggy
показывает, что версия с ошибкой имеет дополнительный 0
байт в качестве первого байта файла, , тогда все остальные совпадают.