常见的系统指令

常见的系统指令

系统指令大概可以用于实现下来功能:

  1. 指针参数验证 Verification of pointer parameters
  2. 描述符表寻址 Addressing descriptor tables
  3. 多任务处理 Multitasking
  4. 协同处理和多任务处理 Coprocessing & Multiprocessing
  5. 输入输出 Input&Output
  6. 中断控制 Interrupt control
  7. 调试 Debugging
  8. TLB检查 TLB testing
  9. 系统控制 System control

接下来我们详细介绍:

指针参数验证

  1. 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。

  2. LAR
    装载读写权限位。

  3. LSL
    装载段界。

  4. VERR
    确定当前特权级能否读段。

  5. VERW
    确定当前特权级能够写段。

描述符表寻址

  1. LLDT
    LLDT的作用是装载局部描述符表寄存器LDTR。
  2. SLDT
    SLDT的作用是读取局部描述符表寄存器LDTR中的内容读取出来并存储。
  3. LGDT
    LGDT的作用是装载全局描述符表寄存器GDTR。
  4. SGDT
    SGDT的作用是读取全局描述符表寄存器GDTR中的内容读取出来并存储。

关于LDTR和GDTR请见操作系统程序员必须了解的四类寄存器

多任务处理

  1. LTR
    LTR的作用是装载任务寄存器TR。
  2. STR
    SLDT的作用是读取任务寄存器TR中的内容读取出来并存储。

关于TR请见操作系统程序员必须了解的四类寄存器

协同处理和多任务处理

  1. CLTS
    清除CR0寄存器中的TS标志(任务转换标志)。我们在操作系统程序员必须了解到四类寄存器中介绍过,TS标志在每次发生任务切换后由处理器置1.
  2. ESC
    逃脱指令。
  3. WAIT
    挂起指令的执行,等待协处理器不忙。
  4. LOCK
    用于声明下一条指令的总线锁信号。在多处理器环境下这条指令可以用来确保对共享内存的独占。

输入输出

  1. IN
    IN指令将一个字节(byte)或者一个字(word)的数据从指定端口传送到指定寄存器。
    其中端口号存储在DX寄存器中,寄存器由指令指定。

  2. OUT
    OUT指令将一个字节(byte)或者一个字(word)的数据从指定寄存器传送到指定端口。
    其中端口号存储在DX寄存器中,寄存器由指令指定。

  3. INS
    一般用于从指定端口读入字符串。

  4. OUTS

    一般用于将字符串输入指定端口。

中断控制

  1. CLI
    关中断。既清除中断使能标记。
  2. STI
    开终端。既将中断使能标记置1.
  3. LIDT
    装载IDT(异常描述符表)寄存器。
  4. SIDT
    将IDT中的内容读出来,并存储。

调试

MOV指令改变调试寄存器,至于什么是调试寄存器以及有什么作用,请见操作系统程序员必须了解的四类寄存器

TLB检查

MOV指令改变检查寄存器,至于什么是检查寄存器以及有什么作用,请见操作系统程序员必须了解的四类寄存器

系统控制

  1. SMSW
    设置CR0中的MSW位,既机器状态字(machine status word)。

  2. LMSW
    设置CR0中的MSW位。

  3. HLT

    停止指令执行并将处理器置为HALT状态。

  4. MOV
    MOV指令改变控制寄存器,至于什么是控制寄存器以及有什么作用,请见操作系统程序员必须了解的四类寄存器