Apr.8.2024 汇编中in&out的用法 显卡的初步探索
为了读取/写入io,我们可以使用in指令和out指令
in指令可以读取数据
in ax,dx
in al,dx
只能使用ax寄存器和dx寄存器,其中ax/al用来存储数据,dx指定端口
同样还有out指令
out dx,al
out dx,ax
out 0x1234,al
out 0x1234,ax
out指令中,dx/立即数是端口号,al是数据
——————————————————————————————
显存的布局:
起始地址 | 结束地址 | 大小 | 作用 |
0xc0000 | 0xc7fff | 32kb | 显示BIOS |
0xb8000 | 0xbffff | 32kb | 文本模式显示适配器 |
0xb0000 | 0xb7fff | 32kb | 黑白显示适配器 |
0xa0000 | 0xaffff | 64kb | 彩色显示适配器 |
同时,gs应为显存的段基址,以下为一段示例代码直接写入显存:
1 mov ax,0xb800 2 mov gs,ax 3 4 mov byte [gs:0x00],'A' 5 mov byte [gs:0x01],0xa4 ;绿色背景闪烁,前景色红色
可以看到,在低地址处存放字符的ascii码,在高地址处存放字符属性。
以上文章参考了《操作系统真象还原》