软中断指令INT 理解
前言
我们在学习操作系统时,在引导部分代码中,会看到 int 指令,比如:
int 10h
书上会解释说,通过10h中断能够实现显示屏操作。
分析
INT指令为 软件中断指令,是CALL指令的一种特殊形式,call指令调用的子程序是用户程序的一部分,而INT指令调用的则是操作系统或者BIOS提供的特殊子程序。
INT n就好像是调用子程序,只不过其调用的是中断处理程序。
- 格式 : int n
- 功能:转到相应的中断处理程序执行。
举例
mov ah, 1 ; 设置入参
int 21h ; 调用21h中断服务程序
这段代码的含义是,调用中断号为21的终端服务程序的 第1号功能,其中ah是入参。
为什么这样用?
刚开始接触这种使用方式时,我们可能会有疑惑,为什么要使用这种方式来实现程序调用,毕竟中断服务程序也是类似于一个子程序而已,为什么不用call,毕竟使用call,对于程序员来说,更容易理解,这里我简单的分析一下,可能不太正确,但是起码能够帮助我们理解。
- 1、BIOS的全称为 “基本输入/输出系统”,BIOS一般是电脑制作商根据CPU的型号和主板原理图设计的软件,是引导操作系统的关键,对于BIOS来讲,它是不懂windows和linux的,它的主要工作就是上电后第一个运行的程序,能够提供最基本的输入(键盘)和输出(蜂鸣器、显示器VGA)功能,所以BIOS中,是包括了显示器、键盘的驱动的,也预留了键盘、显示器的使用接口。
- 2、那么问题就来了,BIOS预留的使用接口,引导程序怎么能够方便使用呢?由于BIOS和引导程序在不同的存储介质中,基本上可以理解为BIOS和引导程序是两个进程(注意不是线程),代码不在一起,就不存在所谓的调用了,所以需要有个全局的调用接口?
- 3、接着上面的分析,在没有操作系统的情况下,什么是全局可见的接口呢,很明显,中断是全局可见的,但是肯定不能使用硬中断,因为硬中断是与绑定的,那自然就是软中断了,所以BIOS中自然就包括了软中断服务程序,比如 显示器的操作,就是通过 10h中断来实现的,cpu规定好,通过a寄存器来进行传参。这样就实现了在引导程序中,操作显示器的功能。
软中断指令INT 理解相关推荐
- 软中断指令int $0x80的执行过程
软中断指令int $0x80的执行过程 它是陷阱类(编程异常)事件,因此它与异常响应过程一样. 将IDTi(i=128)中段选择符(0x60,内核代码就是这个表项)所指GDT中的内核代码段描述符取出, ...
- 字典(汇编指令 INT 21H)
汇编指令 AAA 未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition) 格式: AAA 功能: 对两个组合的十进制数相加运算(存在AL中)的结果进行调整,产生一个未 ...
- ARM 软中断指令SWI
出处:https://blog.csdn.net/zqixiao_09/article/details/50776191 前面我们学习ARM工作模式中,处理器模式切换可以通过软件控制进行切换,即修改C ...
- [vue] 说说你对v-clock和v-pre指令的理解
[vue] 说说你对v-clock和v-pre指令的理解 v-cloak指令只是在标签中加入一个v-cloak自定义属性,在HTML还编译完成之后该属性会被删除. v-pre可以用来阻止预编译,有v- ...
- [vue] 说下你对指令的理解?
[vue] 说下你对指令的理解? 指令 (Directives) 是带有 v- 前缀的特殊 attribute.指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是 ...
- java 指令级别理解i++和++i
idea安装jclasslib(略) 执行过程 a++ 代码 public class CodeTest {public static void main(String[] args) {int a ...
- 8086汇编-实验8-jmp指令的理解
offset 标号:取标号处的地址 mov 16位 offset 标号:取标号偏移地址 mov 32位 offset 标号:取标号段地址:偏移地址 assume cs:code code segmen ...
- ts 变量后面加问号或者叹号_关于记录型信号量与TS指令的理解
在实现多线程互斥访问共享变量中,除了使用互斥锁之外,还可以使用信号量,当然信号量不仅仅能够实现互斥,还能够实现同步问题. 信号量的历史这里就不写了,信号量的分类也有几种,这里仅仅讨论一下记录型信号量. ...
- 汇编jmp指令的理解与用法
这篇文章是在学习过程中对于转移地址偏移地址的理解以及网上缺乏帮助理解计算转移地址偏移地址的前提下诞生的.初次写知识点分享,如有误,请指出多包含. JMP是在编写程序中经常使用的指令,它的功能是转移到指 ...
最新文章
- pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件
- CTFshow 信息收集 web8
- tensorflow GPU笔记
- WebRTCon 2018 Day Two精彩回顾
- CSP 1.0 语言规范
- 解决python读取pickle报错ValueError: unsupported pickle protocol: 5
- wifi频率和zigbee干扰_浅谈ZigBee和Wi—Fi的共存和干扰
- Integer 与 int 中的 ==
- erlang rebar 配置mysql_Centos6.4安装erlang并配置mysql数据库
- django中ForeignKey指向自身的方法
- ASP.NET 2.0中执行数据库操作命令之二
- 评《货币战争》:问苍茫大地谁主沉浮? 第一次转这样的帖子
- 关于BMZCTF hitcon_2017_ssrfme的解法
- 【UBB】UBB代码简介
- 【论文阅读笔记】Ocean: 目标感知的Anchor-free实时跟踪器,速度70+FPS!刚开源(更新中)
- 华为freelace耳机修整详录
- C# Ajax上传图片同时生成微缩图(附Demo)
- 惠普服务器开机无限重启,电脑开机无限重启的解决方法
- 2021年中国工业互联网安全大赛
- 科研论文阅读与写作实战技巧