Сборка в реальном режиме: печать Char на экран без инструкции INT при загрузке - PullRequest
5 голосов
/ 11 марта 2012

Следующий сайт «Написание кода загрузочного сектора» предоставляет образец кода, который выводит «A» на экран при загрузке системы. Из того, что я читал, вам не нужно использовать код операции INT, чтобы заставить BIOS делать определенные вещи? Как работает приведенный ниже код с сайта, на который есть ссылки, без прерываний? Какая часть кода на самом деле говорит оборудованию выводить на экран букву «А»?

Код вопроса:

.code16
.section .text
.globl _start
_start:
  mov $0xb800, %ax
  mov %ax, %ds
  movb $'A', 0
  movb $0x1e, 1
idle:
  jmp idle 

ПРИЛОЖЕНИЕ К ОРИГИНАЛЬНОМУ ВОПРОСУ

Если я использую следующий код, BIOS вызывает для меня запись в текстовый буфер? Буфер, начинающийся с адреса 0xb800?

   # Author: Matthew Hoggan
   # Date Created: Tuesday, Mar 6, 2012
   .code16                        # Tell assembler to work in 16 bit mode (directive)
   .section .text
   .globl _start                  # Help linker find start of program
   _start:
       movb $0x0e,     %ah        # Function to print a character to the screen                 
       movb $0x00,     %bh        # Indicate the page number
       movb $0x07,     %bl        # Text attribute
       mov  $'A',      %al        # Move data into low nibble                   
       int  $0x10                 # Video Service Request to Bios                             
   _hang:                         
       jmp  _hang                 
       .end   

Ответы [ 3 ]

8 голосов
/ 11 марта 2012

Прямой ответ на ваш вопрос: строка «movb $ 'A', 0» эффективно завершает печать на экране (а следующая строка «movb $ 0x1e, 1» указывает, какого цвета она должна быть).

Более длинный ответ: Видеооборудование рисует экран в зависимости от содержимого памяти. В текстовом режиме видеооборудование начинает рисовать на основе сегмента памяти 0xB800. Все, что находится в байте 0, определяет символ, который будет нарисован в первой текстовой ячейке на экране. Следующий байт определяет атрибуты (цвет переднего плана, цвет фона и состояние мигания). Этот паттерн повторяется (char - attr - char - attr) по всему экрану.

Итак, технически мой прямой ответ не был правдой. 2 оператора 'movb' просто ставят букву 'A' для печати. Буква «А» не печатается до тех пор, пока в следующий раз аппаратное оборудование не обновит дисплей на основе памяти.

1 голос
/ 11 марта 2012

При загрузке вы находитесь в режиме экрана по умолчанию - в данном случае текстовом режиме экрана. Ваша примерная программа пишет прямо в буфер символов, который отображается на экране для этого текстового режима экрана. Установка регистра данных сегмента на 0xb800 приводит к тому, что все настроено так, чтобы указывать на этот буфер. Проверьте этот учебник для получения дополнительной информации.

0 голосов
/ 26 апреля 2014

Обычно, когда вы вызываете INT 10h, BIOS выполняет процедуру, которая выполняет почти то же самое, записывая символы и их атрибуты в видеопамять.Однако полезно знать, как самостоятельно писать и выполнять эти подпрограммы, поэтому, если и когда вы решите переключить ЦП в 32-разрядный защищенный режим, вы все равно сможете печатать символы на экране, поскольку в этом режиме вы больше не сможетевызывать прерывания BIOS.

...