yale_OS(5)——BIOS提供的服务

下面对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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值