博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.3.3 打开A20,实现32位寻址
阅读量:3680 次
发布时间:2019-05-21

本文共 806 字,大约阅读时间需要 2 分钟。

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的代码如下:

//代码路径:boot/setup.s   
 
call    empty_8042  
mov al,#0xD1        ! command write  
out #0x64,al  
call    empty_8042  
mov al,#0xDF        ! A20 on  
out #0x60,al  
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地址线是否确实已经打开。

转载地址:http://gkxbn.baihongyu.com/

你可能感兴趣的文章
Spring Cloud学习笔记23——如何集成 Hystrix
查看>>
Spring Cloud学习笔记24——天气预报系统微服务实现熔断机制
查看>>
Spring Cloud学习笔记25——自动扩展
查看>>
Intellij IDEA快捷键整理
查看>>
Spring Cloud学习笔记26——Spring Cloud 微服务实战
查看>>
Spring Cloud学习笔记27——消息总线:Spring Cloud Bus
查看>>
Spring Cloud学习笔记28——消息驱动的微服务:Spring Cloud Stream
查看>>
Java 8 学习笔记1——Java 8 概述
查看>>
Java 8 学习笔记2——通过行为参数化传递代码
查看>>
Java 8 学习笔记3——Lambda 表达式
查看>>
Java 8 学习笔记4——流的概念
查看>>
Java 8 学习笔记5——使用流
查看>>
Java 8 学习笔记6——用流收集数据
查看>>
Java 8 学习笔记7——并行数据处理与性能
查看>>
Java 8 学习笔记8——重构、测试和调试
查看>>
Java 8 学习笔记9——默认方法
查看>>
Java 8 学习笔记10——用Optional取代null
查看>>
Java 8 学习笔记11——CompletableFuture:组合式异步编程
查看>>
实体类参数检验
查看>>
PXE自动装机讲解及其步骤(图文详解)
查看>>