常见的系统指令
系统指令大概可以用于实现下来功能:
- 指针参数验证 Verification of pointer parameters
- 描述符表寻址 Addressing descriptor tables
- 多任务处理 Multitasking
- 协同处理和多任务处理 Coprocessing & Multiprocessing
- 输入输出 Input&Output
- 中断控制 Interrupt control
- 调试 Debugging
- TLB检查 TLB testing
- 系统控制 System control
接下来我们详细介绍:
指针参数验证
ARPL
该指令一般用于保证子程序的选择器参数不会要求比调用者允许的更高的特权。用法是
ARPL r/m16, r16
,r/m16表示第一个操作数是16位内存变量或者16位寄存器,这个操作数用于存放选择器的值。r16表示16位寄存器。如果第一个操作数的RPL(Requested privilege level)$\le$第二个操作数的RPL,EFLAGS中的ZF位置1,并且提升第一个操作数的RPL使之不小于第二个操作数的RPL。否则的话不改变RPL,将ZF位置0。LAR
装载读写权限位。LSL
装载段界。VERR
确定当前特权级能否读段。VERW
确定当前特权级能够写段。
描述符表寻址
- LLDT
LLDT的作用是装载局部描述符表寄存器LDTR。 - SLDT
SLDT的作用是读取局部描述符表寄存器LDTR中的内容读取出来并存储。 - LGDT
LGDT的作用是装载全局描述符表寄存器GDTR。 - SGDT
SGDT的作用是读取全局描述符表寄存器GDTR中的内容读取出来并存储。
关于LDTR和GDTR请见操作系统程序员必须了解的四类寄存器
多任务处理
- LTR
LTR的作用是装载任务寄存器TR。 - STR
SLDT的作用是读取任务寄存器TR中的内容读取出来并存储。
关于TR请见操作系统程序员必须了解的四类寄存器
协同处理和多任务处理
- CLTS
清除CR0寄存器中的TS标志(任务转换标志)。我们在操作系统程序员必须了解到四类寄存器中介绍过,TS标志在每次发生任务切换后由处理器置1. - ESC
逃脱指令。 - WAIT
挂起指令的执行,等待协处理器不忙。 - LOCK
用于声明下一条指令的总线锁信号。在多处理器环境下这条指令可以用来确保对共享内存的独占。
输入输出
IN
IN指令将一个字节(byte)或者一个字(word)的数据从指定端口传送到指定寄存器。
其中端口号存储在DX寄存器中,寄存器由指令指定。OUT
OUT指令将一个字节(byte)或者一个字(word)的数据从指定寄存器传送到指定端口。
其中端口号存储在DX寄存器中,寄存器由指令指定。INS
一般用于从指定端口读入字符串。OUTS
一般用于将字符串输入指定端口。
中断控制
- CLI
关中断。既清除中断使能标记。 - STI
开终端。既将中断使能标记置1. - LIDT
装载IDT(异常描述符表)寄存器。 - SIDT
将IDT中的内容读出来,并存储。
调试
用MOV
指令改变调试寄存器,至于什么是调试寄存器以及有什么作用,请见操作系统程序员必须了解的四类寄存器
TLB检查
用MOV
指令改变检查寄存器,至于什么是检查寄存器以及有什么作用,请见操作系统程序员必须了解的四类寄存器
系统控制
SMSW
设置CR0中的MSW位,既机器状态字(machine status word)。LMSW
设置CR0中的MSW位。HLT
停止指令执行并将处理器置为HALT状态。
MOV
用MOV
指令改变控制寄存器,至于什么是控制寄存器以及有什么作用,请见操作系统程序员必须了解的四类寄存器