Настройка и работа в Linux
adb5321d

Второй сектор


Второй сектор будет содержать следующий код :

entry start start: mov ah,#0x03 xor bh,bh int 0x10

mov cx,#26 mov bx,#0x0007 mov bp,#mymsg mov ax,#0x1301 int 0x10

loop1: jmp loop1

mymsg: .byte 13,10 .ascii "Handling BIOS interrupts"

Этот код загружается и выполняется в сегменте 0x500. Он использует прерывание 0x10 для получения текущей позиции курсора и вывода на экран сообщения.

Первые три строки кода (отсчёт начинается с третьей строки, пропуская инструкции определения точки входа) используются для получения текущей позиции курсора. Для этого используется функция 0x03 прерывания 0x10. Перед её вызовом мы обнуляем значение регистра bh[3]. После выполнения прерывания, интересующий нас результат будет хранится в регистрах dh и dl (номер строки и колонки соответственно). Переходим ко второй части программы. В регистр...

  • cx записываем количество символов в строке, выводимой на экран[4]
  • bx заносим значение номера видео страницы и код атрибута выводимых на экран символов (0x00 и 0x07). Мы планируем использовать белый цвет символов (0x7) на чёрном фоне (0x0).
  • bp пишем адрес строки [5]
  • ax записываем номер функции для вывода на экран строки и код подфункции, определяющий, что атрибут показываемой строки будет взят из регистра bl
  • Начало сообщения содержит два байта со значениями 13 и 10, что соответствует нажатию клавиши enter. Эти два кода идут вместе, 13 -- код возврата каретки (Carriage Return, CR), 10 -- код перевода строки (Line Feed, LF). Сама строка содержит 24 символа. Символы CR и LF трактуются функцией 0x13 прерывания 0x10 как управляющие и поэтому не высвечиваются. Теперь вызываем прерывание. И последней инструкцией "вешаем" компьютер.



    Содержание раздела