Заполнение заранее неизвестного количества байт (tasm) - Assembler
Формулировка задачи:
Читал на хабре статью Пишем свою ОС.
Там был приведен код загрузчика на
yasm
. И так как код располагается в загрузочном секторе, то мы должны иметь в конце этого сектора сигнатуру55 AA
. Наyasm
это делается с помощью диррективы times. А как реализовать инициализацию этих двух последних байт директивой ассемблераtasm
? Я знаю что естьdup
, но как им воспользоваться в данном случае? Например.code org 7c00h start: ;======code====== ;======data====== ;заполнение до конца сектора-2 байта нулями magic db 55, AA end start
Решение задачи: «Заполнение заранее неизвестного количества байт (tasm)»
textual
Листинг программы
.model tiny .code org 100h startAdress = $ start: ;=======code======= ret endAdress = $ fillSpace = 510 -( endAdress-startAdress) db fillSpace dup(0) db 55h, 0aah end start
Объяснение кода листинга программы
- Объявлены две переменные: startAdress и endAdress, которые содержат начальный и конечный адреса области памяти, соответственно.
- Код программы начинается с метки
start
. - Выполняется операция вычитания для определения размера заполняемого пространства (fillSpace).
- Используя оператор db (define byte), происходит заполнение памяти байтами 0.
- Последний байт заполняется значениями 55h и 0aah.
- Программа завершается с помощью оператора ret.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д