下面对yale——OS中使用的BIOS功能进行简单介绍
1.显示器内存在PC中,显示器的RAM映射到内存空间,通过写0xb800:0000开始的显示RAM来直接写到显示屏上,显示屏上的每一个位置需要两个bytes,一个用于指定属性(用0x07表示白色),另一个用于字符自身,字符显示屏有25行,每行有80个字符。所以,写到第i行,第j列,需要写2个bytes到偏移((i-1)*80+(j-1))*2处,
所以,下面的代码写字符“K”到屏幕的左上角。
movw 0xb800,%bx
movw %bx,%es
movw $0x074b,%es:(0x0)
该段代码在OS启动时,用于调试程序非常有用。
2.写到显示屏当前光标处
为了写一字符到显示屏当前光标处,需要调用BIOS提供的服务
int 0x10
需要结合如下的参数:
- ah = 0x0e 表示这是函数0x0e
- al = 当前要显示的字符
- bh = 可用的页数字(使用0x00)
- bl = 前景色(仅图形模式)(使用0x02)
该调用的结果返回显示的字符。
注:换行符是0x0A, 回车符是0x0D
该服务调用能自动进行换行和滚动,以及对一些控制字符进行转换为特定的行为。
3.读盘
通过软件中断,BIOS服务调用用于从指定的位置读取512字节的磁盘扇区。
int 0x13
结合如下的参数:
- ah=2 表示这是函数2
- al=需要读取的扇区,1到36
- ch=磁轨数,0到79
- cl=扇区数,1到36
- dh=磁头数,0或1
- dl=驱动器数,0到3
- es:bx=指向从磁盘读取的信息放置的位置。
该服务调用将会返回如下:
- ah=返回状态(如果成功,则为0)
- al=读取的扇区数
- carry=0表示读取成功,=1表示发生错误。
读取的数据放在ES:BX指定的RAM位置处,buffer必须足够大,用以保存数据,同时必须不会进入64K的线性地址边界处
来自于http://zoo.cs.yale.edu/classes/cs422/2011/ref/pc-arch#memory