В настоящее время я пишу простой загрузчик в качестве личного проекта. У меня есть рабочий прототип, который был построен с использованием NASM в качестве ассемблера. Однако я хотел бы лучше познакомиться с инструментами GNU, и поэтому я пытаюсь переписать свою работу, используя их.
В Интернете есть небольшой образец 'Hello World' Bootloader, который демонстрирует использование нескольких инструментов для написания и сборки «Bootloader». Однако после некоторого чтения я понял, что «газ» — это бэкенд для gcc, и что его не следует вызывать напрямую. Я столкнулся с этой информацией, когда пытался написать выражения внутри моего файла сборки, которые использовали символы для расчета размера программы, чтобы я знал, сколько 0 байтов мне нужно будет записать, прежде чем писать 0x55 и 0xAA, что может быть выполнено используя этот бит кода NASM:
;---------------------------------------------
; Write Zeros up to end of program - 2 then boot signature
;---------------------------------------------
size equ $ - entry
times (512 - size - 2) db 0
db 0x55, 0xAA ;2 byte boot signature
Есть ли способ написать этот эквивалентный набор выражений, используя синтаксис, изначально читаемый GAS? Мои попытки не увенчались успехом, например:
.size len, ( 512 - ( (message + 12) - _start) )
Использование этого выражения и передача его в as
дает мне следующую ошибку:
./gasbootloader.asm:24: Error: invalid sections for operation on `message' and `_start'
Нужно ли мне передавать мою программу через gcc, чтобы символы могли быть разрешены?
len
,message
и_start
? - person Carl Norum   schedule 05.03.2012