Как понять, что положить в реестры из документации? - PullRequest
0 голосов
/ 07 октября 2018

Я пытался понять, как отображать текст в режиме VGA на днях, поэтому я задал этот вопрос .Теперь я понимаю, как это работает, но через пробу произошла ошибка.

Меня заинтересовало то, что @Margaret Bloom упомянул в одном из комментариев:

Кстати, эта часть между чтением спецификацийи «что помещать в каждый регистр» (код AKA) - вот где все самое интересное.

Для меня это говорит о том, что можно узнать, какие регистры использовать и что в них помещатьпросто прочитав спецификации.

Используя пример текстового режима VGA, Что может предложить ввести адрес 0xB8000 в ax и dx, положение символа в di и символи цветовой код в ES:DI?

Также при чтении кода C, такого как ниже,

void WriteCharacter(unsigned char c, unsigned char forecolour, unsigned char backcolour, int x, int y)
{
     uint16_t attrib = (backcolour << 4) | (forecolour & 0x0F);
     volatile uint16_t * where;
     where = (volatile uint16_t *)0xB8000 + (y * 80 + x) ;
     *where = c | (attrib << 8);
}

как узнать, как поместить значения в соответствующие регистры?

Знание этого в будущем поможет мне, так как я смогу понять, что и куда помещать данные в будущем.

Я надеюсь, что все это имеет смысл.Если нет, не стесняйтесь просить меня уточнить.

Документация связанный слышать

1 Ответ

0 голосов
/ 07 октября 2018

Запись символов в память VGA означает изменение памяти .Неважно, какие регистры вы используете, чтобы это произошло, только конечный результат изменения содержимого памяти с линейного адреса 0xB8000 до конца VGA-памяти.

При компиляции этой функции Cкомпилятор имеет полную свободу использования любых регистров, которые он хочет (при условии, что он сохраняет все регистры, сохраняемые в соответствии с соглашением о вызовах);единственный наблюдаемый побочный эффект - это сохранение через volatile uint16_t*.

. Остальные - все локальные переменные с автоматическим хранением, поэтому правило «как будто» позволяет ему создавать этот побочный эффект, используя любой кодхочет.

...