• int指令(软件中断指令)


    INT(软件中断指令)是CALL指令的一种特殊形式。call指令调用调用的子程序是用户程序的一部分,而INT指令调用的操作系统提供的子程序或者其他特殊的子程序。

    中断服务子程序和标准过程的最大区别是 汇编程序可以有任意个过程,中断服务子程序最多有256个过程、

    INT指令共有四中不同的格式:

    《1》  int n

      n是中断号,这就允许用户程序调用256个中断服务子程序。

      该指令2字节长度,第一字节是int机器码,第二字节是8位立即数,表示中断号。

      CPU在执行到INT指令时,通过中断描述符表找到中断号对应的中断服务子程序的地址,(本质上就是一个异常处理程序的软件调用)

    《2》 int 3

      INT 3 是中断指令的一种特殊形式,仅有一个字节长。

      调试器将该指令当作软件中断指令来用。调试的时候,当程序中的某一位置加断点的时候,调试器会把断点处指令编码的第一个字节替换为INT 3指令的编码。

    当程序执行到INT 3,回向调试器申请系统调用,调试器因此获得CPU控制权。之后,再用原先的编码替换INT 3 编码。

    《3》INTO    中断号4

      如果溢出标志位为1,则INTO指令会产生一个软件中断,利用这个指令可以快速测试算术运算指令之后是否有溢出产生。

    《4》BOUND  中断号5

      BOUND reg,mem

      其执行算法为:if(reg<[mem])or(reg>[mem+sizeof(reg)]) then INT 5

      判断数组下表是否在合理范围内,不合理触发INT 5 中断,返回地址仍是BOUND

     不管是哪种,都会发生

    (1)标志寄存器入栈

    (2)CS:EIP 寄存器入栈,

    (3)通过中断号在中断描述符表中找到对应的描述符,并将对应的数据放入CS:EIP中、

    CS入栈和出栈都是一个32位值,只有低16位有效。扩充的高16位无定义,目的是使堆栈保持与4字节边界对齐。这对80386的性能来说很重要。。。么。。。。。

  • 相关阅读:
    redis面试题总结
    TP5隐藏index.php
    php四种文件加载语句
    【Redis缓存机制】1.Redis介绍和使用场景
    Linux cpufreq 机制了解 arm
    数码设备发展的核心:分离,互联网营销 狼人:
    豆瓣:“慢公司”,互联网营销 狼人:
    互联网周刊:互联网进化论,互联网营销 狼人:
    怀念中国雅虎:技术文化和惨淡命运,互联网营销 狼人:
    菜鸟玩GAE(Google App Engine)完全指南,互联网营销 狼人:
  • 原文地址:https://www.cnblogs.com/icqw/p/4915930.html
Copyright © 2020-2023  润新知