mov al,13h
int 10h ;enter 256 color VGA mode
mov ax,0A000h
mov es,ax ;you can't MOV a constant directly into ES so you need to use another register first.
mov di,0 ;when combined together, [es:di] aliases address 0xA0000
mov al,0FFh ;white
mov [es:di],al ;makes the top left pixel of the screen white
;I could have just written "mov [di],al" since it defaults to using ES anyway.
1条答案
按热度按时间uemypmqf1#
当文档中提到“帧缓冲区位于
0xa0000 - 0xaffff
”时,他们指的是物理寻址,这不是8086 CPU能够寻址内存的方式。它使用段偏移系统,这意味着您需要使用段寄存器ds
或es
来指向高四个十六进制数字。这有点令人困惑,但最终发生的是DS或ES中的值实际上乘以16,然后SI或DI中的值与该值相加,该值用于计算要写入的地址。这一切都是自动发生的。这个例子使用VGA模式13H(320x200,8bpp),但是你会明白的。
希望这有帮助,我从来没有使用过386 CPU,所以我所知道的是16位版本。