ORANGE'S之三-保护模式(3)

来源:互联网 发布:手机淘宝详情添加视频 编辑:程序博客网 时间:2024/05/01 00:38

五、端口

        计算机系统中所有设备都和CPU相连,但CPU不能直接和外围设备进行交互,CPU只和每个设备的寄存器交互数据,再又寄存器把数据传给设备。

        也就是

        CPU对每个设备的寄存器进行编号,称为端口,CPU根据编号访问寄存器,也就是访问端口。

  1、端口的读

        in accum port

        port:端口号  accum:AL或AX寄存器

        读取port端口号到AL或AX(8位/16位)

  2、端口的写

        out port accum

        此处accum可以是其他寄存器。

        如开启A20地址线的汇编程序:

in al,92hand al 00000010bout 92h,al
六、cli汇编指令

        在转入保护模式前必须废除原来的中断向量表(实模式下是16位的中断向量表,而保护模式下应该是32位的中断向量表)

        因此要重新建立32位的中断向量表和中断处理程序。

        因此使用cli指令废除实模式下的中断向量表。

七、转入保护模式

        80386提供4个32位的控制寄存器CR0-CR3

        CR0:某些位用于标识是否要进入保护模式

        CR1:寄存器保留,未被使用

        CR2:用于分页机制

        CR0寄存器的示意图如下:


        其中:PE:控制分段管理机制。PE=0:处理器运行实模式,PE=1:处理器运行保护模式。

                    PG:分页管理机制。PG=0:禁用分页管理机制,分段管理机制产生的线性地址直接作为物理地址使用。PG=1:启用分页管理机制,线性地址经分页管理机制转换为物理地址。

       下面是PE和PG组合意义:

   PEPG处理器工作模式00实模式01保护模式,禁用分页机制10非法11保护模式,启用分页机制        

        大多数操作系统采用启用分页机制的保护模式。

        在编写保护模式的代码时,我们采用禁用分页机制的保护模式,代码如下:

mov eax,cr0or eax,1mov cr0,eax
        其中eax是32位CPU扩展寄存器,兼容16位寄存器。

        上述代码只把第一位也就是PE位置1,切换到保护模式。         

原创粉丝点击