При использовании, например, прерывания для изменения текущей страницы адрес сегмента видеобуфера также будет изменен, как после:
mov ah, 5
mov al, 1
int 10h
Например, я сейчас в текстовом режиме, сегмент моего VGA на странице 0 - 0B800h, теперь после предыдущего прерывания сегмент будет 0B900, где он записан в память или мы должны его вычислить, потому что эти адреса фиксированные. ?
Я планирую запрограммировать на Turbo Pascal процедуру, которая будет автоматически знать текущий активный сегмент страницы, чтобы вводить символы непосредственно в него без необходимости вызывать прерывание, чтобы узнать активную страницу.
40h:62h. Я не тестировал.
Если вы знаете, что уже находитесь в текстовом режиме, и знаете, что база вашего текстового видео — 0b800h, то после выполнения mov ah, 5mov al, 1int 10h. Когда вы используете видеоинформацию о прерываниях BIOS, они отражаются в данных в BDA. В частности, значение слова в 0000:44eh представляет собой смещение в байтах от начала сегмента b800h (в режиме цветного текста). Вы можете поместить значение B800h в ES, скопировать значение слова из 0000:44eh в BX, а затем записать в видеопамять с помощью mov word ptr [es:bx], 5661h, чтобы записать в верхний левый угол текущей страницы.





Текущий адрес сегмента видеобуфера не записывается в память. BIOS не использует его таким образом.
BIOS записывает эту информацию о страницах в области данных BIOS.
80x25
-----
word 0040:004C Size in bytes of the display memory page = 4000
word 0040:004E Offset to the current display page = 4096
byte 0040:0062 Number of the active display page = 1
В режиме текстового видео 80x25 BIOS работает только со значением сегмента B800h и изменяет смещение, чтобы получить правильную страницу вывода. BIOS сначала вычисляет смещение в пределах запрошенной страницы, а затем добавляет слово из адреса 0040:004E.
Это зависит от того, как вы получаете доступ к видеопамяти. Если вы используете функции BIOS, вы указываете страницу как часть вызова.