实验1前篇——BIOS编程空间

      从此篇开始更多的注重技术细节了。细节决定成败的故事太多了,而且对于编程者肯定都有这样的经历 —— 自信满满的认为自己写得程序天衣无缝,但是当运行调试之后,才发现bug无处不在,更可气的是很多的bug却是因为语法细节或者指尖上的失误导致。而且编码效率的提升,更多的是建立在已经存在的可信代码的基础上,而可信代码却是经历过无数次的折腾的结晶。

       实验1的内容是启动PC系统”——一个从开机到运行到OS的流程;看似一个很复杂的流程,为了很好的解剖这样的流程,需要充分的知识准备,而且更重要的是从代码的角度去解释该过程。所以我们将这一篇的内容定位与介绍一些概念与模拟代码,保证理解过程的顺利。换句话说,如果在理解实验1的内容有什么问题,可以参考该篇给出的内容或者相关资源。

       本篇主要通过两个部分来做出详细的介绍:其一为BIOS编程空间;其一为C与汇编的互调。

一)BIOS编程空间

       这里有一个很陌生的名词——编程空间,其实,这是我对编程环境的一个定义,一般用编程环境来描述,但是它强调的是编码的工具与使用的api等概念;但是用编码空间来代替它,因为它不仅仅包含这些内容,更多的是强调编程时更关心其代码运行的环境(内存空间,处理器状态,外设的资源使用),而且是在一个固定的环境中。

        对于BIOS的编程空间,我们关注的点主要有如下几个方面:

   1.处理器的状态

    寄存器的长度为16位,处于8086的处理器状态,详情参考《64-ia-32-architectures-software-developer-manual-325462.pdf》20.1REAL-ADDRESS MODE

       2.内存的使用

    内存空间为0-1M的连续空间,地址访问方式为(DS<<4|BX);详情参考《64-ia-32-architectures-software-developer-manual-325462.pdf》20.1REAL-ADDRESS MODE

        然而不是1M空间都能被任意使用,所以需要理解内存映像——内存地址区域的实际使用情况:


start 

end 

size 

type 

description 

Low Memory (the first MiB) 

0x00000000 

0x000003FF 

1 KiB 

RAM - partially unusable (see above) 

Real Mode IVT (Interrupt Vector Table) 

0x00000400 

0x000004FF 

256 bytes 

RAM - partially unusable (see above) 

BDA (BIOS data area) 

0x00000500 

0x00007BFF 

almost 30 KiB 

RAM (guaranteed free for use) 

Conventional memory 

0x00007C00 (typical location) 

0x00007DFF 

512 bytes 

RAM - partially unusable (see above) 

Your OS BootSector 

0x00007E00 

0x0007FFFF 

480.5 KiB 

RAM (guaranteed free for use) 

Conventional memory 

0x00080000 

0x0009FBFF 

approximately 120 KiB, depending on EBDA size 

RAM (free for use, if it exists

Conventional memory 

0x0009FC00 (typical location) 

0x0009FFFF 

1 KiB 

RAM (unusable) 

EBDA (Extended BIOS Data Area) 

0x000A0000 

0x000FFFFF 

384 KiB 

various (unusable) 

Video memory, ROM Area 


        由上表可以发现,目前0-0x4FF,0x9FC00-0xfffff这两段内存是被系统占用了,不能被我们编程使用。

         3.外设的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值