第五章 编写主引导扇区代码
显存和段寄存器
首先理解显存的概念。显卡工作时,会把显存中的信息显示到屏幕上。CPU在显示信息时,首先把信息写入显存,再在屏幕显示。为了加快处理速度,在内存中设置一块显存空间的映射,将信息直接写入内存,再从内存中读取、显示信息。文本模式显存映射的起始物理地址此时是0xB800.
DS:段寄存器
ES:附加段寄存器
此处先用附加段寄存器ES。Intel处理器不允许直接将立即数送入段寄存器,只能如下操作
mov 段寄存器,通用寄存器
mov 段寄存器,内存单元
则先进行以下两步
mov ax,0xb800
mov es,ax
字符的编码表示
显卡在任何时候都认为发送的是ASCII码。屏幕上每个字符对应着显存中的两个连续字节,前一个字节表示待显示字符的ASCII码,后一个字节是字符的显示属性,包括字符颜色(前景色)和底色(背景色)。有一张表格揭示了编码表示的显示属性。
如果字符属性0x07,即00000111,则对应于不闪烁,黑色背景色,白色前景色。
mov的使用
mov byte [0x00],'L'
汇编语言支持直接用字符代替对应的ASCII码,比如直接用’L’代替0x4c,就可以打印出字符L
mov支持直接向内存单元写数据,此时:
-
需指定段寄存器,默认用DS;
-
需指定数据传输大小,byte、word、dword等
当使用其他段寄存器时,用前缀,如下面的语句
mov byte [es:0x00],'L'
使用了段寄存器es。
``assembly
mov byte [es:0x00],‘L’
使用了段寄存器es。