您的位置:首页 > 其它

I/O敏感指令

2015-11-24 19:16 369 查看
输入输出特权级(I/O Privilege Level)规定了可以执行所有与I/O相关的指令和访问I/O空间中所有地址的最外层特权级。IOPL的值在如下图所示的标志寄存器中。

标  志

寄存器
BIT31—BIT18BIT17BIT16BIT15BIT14BIT13—BIT12BIT11BIT10BIT9BIT8BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
00000000000000V

M
R

F
0N

T
IOPLOFD

F
I

F
T

F
S

F
Z

F
0A

F
0P

F
1C

F
I/O许可位图规定了I/O空间中的哪些地址可以由在任何特权级执行的程序所访问。I/O许可位图在任务状态段TSS中。

I/O敏感指令指令功能保护方式下的执行条件
CLI清除EFLAGS中的IF位CPL<=IOPL
STI设置EFLAGS中的IF位CPL<=IOPL
IN从I/O地址读出数据CPL<=IOPL或I/O位图许可
INS从I/O地址读出字符串CPL<=IOPL或I/O位图许可
OUT向I/O地址写数据CPL<=IOPL或I/O位图许可
OUTS向I/O地址写字符串CPL<=IOPL或I/O位图许可
上表所列指令称为I/O敏感指令,由于这些指令与I/O有关,并且只有在满足所列条件时才可以执行,所以把它们称为I/O敏感指令。从表中可见,当前特权级不在I/O特权级外层时,可以正常执行所列的全部I/O敏感指令;当特权级在I/O特权级外层时,执行CLI和STI指令将引起通用保护异常,而其它四条指令是否能够被执行要根据访问的I/O地址及I/O许可位图情况而定(在下面论述),如果条件不满足而执行,那么将引起出错码为0的通用保护异常。

由于每个任务使用各自的EFLAGS值和拥有自己的TSS,所以每个任务可以有不同的IOPL,并且可以定义不同的I/O许可位图。注意,这些I/O敏感指令在实模式下总是可执行的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: