MegaCraZy6
@MegaCraZy6
Юзерь

Assembler как работать с видеопамятью в защищенном режиме?

Хочу залить екран полностю одним цветом для этого надо заполнить весь видеокадр адрес начала которого 0А000h
Когда это делаю почему-то закрашивается лишь меньшая часть екрана.

Код:
use16
org 0x7c00
start:
  mov ax,4F02h
  mov bx,100h
  int 10h
  in  al, 0x92
  or  al, 2
  out 0x92, al
  lgdt  [gdtr]
  cli                                 
  in  al, 0x70
  or  al, 0x80
  out 0x70, al
  mov  eax, cr0
  or   al, 1
  mov  cr0, eax
  jmp 00001000b:pm_entry
 

use32
pm_entry:
cld 
xor edi,edi
mov eax,0xA000  
mov edi,eax   
p0:   
mov al,1Fh 
stosb
jmp p0              

gdt:
  db  0x00, 0x00, 0x00, 0x00, 0x00,      0x00,      0x00, 0x00
  db  0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00
gdt_size  equ $ - gdt

gdtr:
  dw  gdt_size - 1
  dd  gdt
  • Вопрос задан
  • 629 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
почему-то закрашивается лишь меньшая часть екрана.

По многим причинам:
- ты забыл загрузить ds и es после перехода в защищённый режим
- тебе нечем их загрузить, поскольку в gdt нет сегментов доступных для записи
- адрес видеопамяти -- 0xa0000, а на 0xa000 как у тебя
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы