五、端口
计算机系统中所有设备都和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,92h
and al 00000010b
out 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组合意义:
PE | PG | 处理器工作模式 |
0 | 0 | 实模式 |
0 | 1 | 保护模式,禁用分页机制 |
1 | 0 | 非法 |
1 | 1 | 保护模式,启用分页机制 |
大多数操作系统采用启用分页机制的保护模式。
在编写保护模式的代码时,我们采用禁用分页机制的保护模式,代码如下:
mov eax,cr0
or eax,1
mov cr0,eax
其中eax是32位CPU扩展寄存器,兼容16位寄存器。
上述代码只把第一位也就是PE位置1,切换到保护模式。