1.3.3 打开A20,实现32位寻址

1.3.3 打开A20,实现32位寻址

下面的动作是标志性的—打开A20!

打开A20,意味着CPU可以进行32位寻址,最大寻址空间为4GB,注意看图1-19中内存条范围的变化。从5个F扩展到8个F,即0xFFFFFFFF—4GB。

 
图1-19 打开A20

现在看来,Linux 0.11还显得有些稚嫩,最大只能支持16MB的物理内存,但是其线性寻址空间已经是不折不扣的4GB。

打开A20的代码如下:

 
 
  1. //代码路径:boot/setup.s  
  2.  
  3. call    empty_8042  
  4. mov al,#0xD1        ! command write  
  5. out #0x64,al  
  6. call    empty_8042  
  7. mov al,#0xDF        ! A20 on  
  8. out #0x60,al  
  9. call    empty_8042 

点评

实模式下CPU的寻址范围为0至0xFFFFF,共1MB寻址空间,需要0~19号共20根地址线。进入保护模式后,将使用32位寻址模式,即采用32根地址线进行寻址,第21根至第32根地址线的选通,将意味着寻址模式的切换。

实模式下,当程序寻址超过0xFFFFF时,CPU将“回滚”至内存地址起始处寻址(注意:在只有20位地址线的条件下,0xFFFFF + 1 = 0x00000,最高位溢出)。例如,系统的段寄存器(如CS)的最大允许地址为0xFFFF,指令指针(IP)的最大允许段内偏移也为0xFFFF,两者确定的最大绝对地址为0x10FFEF,这将意味着程序中可产生的实模式下的寻址范围比1MB多出将近64KB(一些有特殊寻址要求的程序就利用了这个特点)。这样,此处对A20地址线的启用相当于关闭了CPU在实模式下寻址的“回滚”机制。在后续代码中也将看到利用此特点来验证A20地址线是否确实已经打开。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值