Заполнение заранее неизвестного количества байт (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

Объяснение кода листинга программы

  1. Объявлены две переменные: startAdress и endAdress, которые содержат начальный и конечный адреса области памяти, соответственно.
  2. Код программы начинается с метки start.
  3. Выполняется операция вычитания для определения размера заполняемого пространства (fillSpace).
  4. Используя оператор db (define byte), происходит заполнение памяти байтами 0.
  5. Последний байт заполняется значениями 55h и 0aah.
  6. Программа завершается с помощью оператора ret.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы