1分钟了解INT 80h中断

1.简介int 80h

是Linux操作系统中的一个系统调用中断,它提供了一种用户空间程序与内核交互的方式

2.详细解释

在Linux操作系统中,为了保护内核代码和数据不被用户程序直接访问或修改,将其运行环境分为两个部分:用户空间和内核空间。但有时候,用户程序需要请求某些只能由操作系统内核完成的服务(如文件读写、进程创建等),这就需要一种机制来实现从用户态切换到内核态,并传递必要参数。这种机制就是“系统调用”。而int 80h则是x86架构下Linux实现系统调用的一种方式。当执行int 80h指令时,CPU会自动切换到特权级0(即内核态),并跳转到IDT(Interrupt Descriptor Table)表中第0x80项所指向的地址处执行代码。

3.具体举例

例如,在C语言编程中我们想要使用write()函数输出字符串"Hello, World!"到标准输出设备上:c

#include <unistd.h>

int main() {
    write(1, "Hello, World!\n", 14);
    return 0;
}

在底层实现上,write()函数会设置好相应寄存器值后通过执行int $0x80触发一个软件中断来进行对应的系统调用。

执行INT 80h会触发一个软件中断,使得CPU切换到内核模式并开始执行操作系统的系统调用处理程序。这个处理程序会根据在寄存器中设置的参数来决定要执行哪种类型的系统调用。

具体步骤如下

  1. 用户空间应用将系统调用号放入EAX寄存器,同时也将其他必要参数放入其它寄存器。
  2. 应用接着执行int 80h指令,引发软件中断。
  3. CPU保存当前状态,并切换到内核模式
  4. 根据IDT(Interrupt Descriptor Table)表找到对应于80h的处理函数地址并跳转过去。
  5. 内核查看EAX寄存器以确定需要进行何种系统调用,并读取其他相关寄存器获取更多信息。
  6. 系统完成请求后返回结果给用户空间应用。

4.比喻解释

假设你正在饭店吃饭,并且你想点菜。你不能直接去厨房煮菜(因为那里只有厨师可以进入)。所以你告诉服务员你想点什么菜(即使出一个请求)。然后服务员走进厨房并告诉厨师他们需要做什么。这个过程类似于使用 int $0x80 进行 Linux 系统调用:应用程序不能直接运行在 kernel mode 下面进行任务处理,所以它们产生一个 interrupt 来通知 OS kernel 完成任务。

5.优点

  • 提供了安全性: 防止恶意或错误地修改关键资源。
  • 易于管理: 所有权限相关问题都集中处理。
  • 可移植性强: 不同硬件平台之间可以共享大量代码

6.缺点

  • 性能开销: 每次系统调用都需要在用户态和内核态之间切换,这会带来一定的性能损失。
  • 编程复杂度高: 需要对操作系统有深入理解才能正确使用。

7.总结

int 80h是Linux中实现系统调用的一种方式,是系统调用的入口,是用户态到内核态的入口点。它提供了一个安全、可控的机制让用户程序可以请求内核服务。虽然存在一些性能和编程复杂度上的问题,但其优点使得它成为了操作系统设计中不可或缺的部分。

Question:

1. 为什么需要INT 80h中断机制?

因为它提供了一种安全可靠的方式来进行系统级别的操作。如果没有这样一个机制,那么任何用户空间程序都可以直接访问硬件和其他低级资源,这可能导致数据丢失、系统崩溃或者其他严重问题。

2. 还有哪些常见中断?

在x86架构中,除了int 80h系统调用中断外,还有许多其他的硬件和软件中断。
以下是一些常见的例子:

  1. int 0: 这是一个由除以零错误触发的异常。
  2. int 3: 这个被称为断点异常,通常用于调试目的。
  3. int 10h: 这是视频服务中断,在DOS环境下经常使用来进行屏幕操作(如改变颜色、移动光标等)。
  4. int 13h: 这是BIOS磁盘服务中断,可以进行磁盘读写操作。
  5. int 21h: 在DOS环境下这个被广泛应用作为系统调用接口,提供文件管理、设备控制等功能。
  6. IRQs (Interrupt Requests): IRQs 是硬件设备向处理器发送请求时所使用的信号。例如键盘输入或鼠标点击会通过IRQ1和IRQ12分别发送给CPU。

需要注意的是,并非所有这些都适用于Linux。在现代Linux系统上(特别是64位),系统调用主要通过syscall指令完成而不再使用int 80h.

syscall是什么?

3分钟了解syscall

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验三 中断实验 一、实验内容 1.当单片机的INT0端出现负脉冲时,进入相应的中断服务程序,P1口做输出口,接 8只发光二极管,通过程序控制发光二极管依次点亮。 2.选择外部中断0(P3.2)接按键INTO到地,按下出现负脉冲时,进入相应的中断服 务程序,在中断服务程序中,数码管显示加1,在0-9之间循环。 二、实验目的 1、学习外部中断技术的基本使用方法。 2、学习中断处理程序的编程方法。 三、实验原理 (中断原理部分参考教材填写) 本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断 程序执行完毕后能回到交通灯中断前的状态。要保护的地方,除了累加器ACC、标志寄存 器PSW外,还要注意。一是主程序中的延时程序和中断处理程序中的延时程序不能混用, 本实验中,主程序延时用的寄存器和中断延时用的寄存器应不相同。 四、实验电路 (参考学习板说明书Page11) 五、接线方式 (参考学习板说明书Page11) P1口接发光二极管的L1—L8;单脉冲输出端" "接INI0,即接89C51的P3.2管脚。 六、参考程序 "程序一、 " "ORG 0030H " "tmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H " "/*定义常量做为输出*/ " "ORG 0000H " "LJMP MAIN " "ORG 0003H " "LJMP INT " " " "MAIN: SETB EA /*首先开启总中断 */ " "SETB EX0 /*开启外部中断 0 */ " "SETB IT0 /* 设置成 下降沿触发方式*/ " "MOV R7,#8 " "MOV DPTR,#TMPDATE " "L0: SJMP L0 //等待中断 " " " " " "INT: DJNZ R7,L1 /*外部中断 0 每按一次主板上的"INT0"键,中 " "断响应,调用该函数,我们从P1口输出点亮发光二极管*/ " "MOV R7,#8 " "L1: MOV A,R7 " "MOVC A,@A+DPTR " "CPL A " "MOV P1,A " "RETI " "END " " " "程序二、/***************************************************" "************ " "功能:按下按键,数码管加1,用中断的方法 " "作者:txl " "时间:2009-04 " "版本:V1.0 " "************************************************************" "***/ " " " "#include<reg52.h> " "#define uint unsigned int " "#define uchar unsigned char " " " " " "sbit wei1=P2^0; " "sbit key1=P3^2; " " " "uchar code table[]={0xC0,0xF9,0xA4,0xB0, " "0x99,0x92,0x82,0xF8, " "0x80,0x90,0x88,0x83, " "0xC6,0xA1,0x86,0x8E};//共阳数码管码表 " "//全局变量 " "uchar num; " "//函数声明 " "void delay(uint z); " "void led_show(uchar temp); " " " "void main() " "{ " "num=0; " "// IT0=1; //中断以下降沿方式触发 " "IT0=0; //中断以低电平方式触发 " "EX0=1; //允许外部中断0中断 " "EA=1; //总中断开 " " " "wei1=0; " " " "while(1) " "{ " "led_show(num); //显示 " "} " " " "} " " " "/***********************************************************" "**** " "功能:外部中断0入口 " "************************************************************" "***/ " "void EX0_Int() interrupt 0 " "{ " "EX0 = 0; //关中断 " "num++; " "if(num==10) " "num=0; " " " "while(!key1);//消除抖动 " "delay(5); " "while(!key1); " "// for(;!key1;); //等待
秒表计时器设计 学院 土木工程 班级 交运021 设计人 张志东 __ 成绩 __ 1. 设计目的 (1)培养学生综合利用MCS- 51单片机的软硬件知识进行程序设计的能力,解决一些实际问题。 (2)进一步加深对MCS-51单片机内部结构和程序设计方法的理解。 (2)提高学生建立程序文档、归纳总结的能力。 2. 总体设计 1. 所能实现的功能: 1. 计时,计时数值最大为99分59秒99; 2. 停止或继续; 3. 清零。 2. 总体设计方案:用LED数码管显示计时的时间,显示的时间应有百分之一秒位、十分 之一秒位、秒个位、秒十位、分个位、分十位;利用单片机的外中断,某键为低 时产生中断开始计时,再一次为低时产生中断停止计时;另一键为低时产生中断 使时间清0。 3. 硬件系统设计 1. 所需设备:DICE- 5013S实验系统一个,并行接口8155一个,PC微机(P4)一台。 2. 接线设计: 1. 将P1.2(X3)接到按钮开关1上,作为STOP中断; 2. 外部中断0的引脚INT0(X15)接按钮开关2,作为CLEAR中断。 4. 软件系统设计 1. 软件功能模块设计及流程图 先利用计时中断产生百分之一秒基时,将百分之一秒位、十分之一秒位、秒个位 、秒十位、分个位、分十位分别存于片内RAM地址79H,7AH,7BH,7CH,7DH,7EH中, 再由主程序显示程序将其显示在LED显示器上;开始/继续通过STOP中断对P1.2进 行取反,然后在计时中断中对输入口P1.2的位进行判断来实现;清零通过在清零 中断中设置各位初值来实现。 主流程图: Y N Y N Y N 计时中断程序流程图: N Y N Y N Y 2.程序清单和注释 ORG 0000H AJMP MAIN ORG 0003H AJMP CLEAR ;清零中断 ORG 000BH AJMP START ;计时中断 ORG 0013H AJMP STOP ;停止中断 MAIN: MOV TMOD,#01H ;T/C0工作方式为方式0 MOV IE, #87H ;开启INT0 中断 MOV TL0, #78H ;置T/C0初值(216- 10000/2=EC78H) MOV TH0, #0ECH SETB TR0 ;开启各个中断 SETB IT0 SETB IT1 MOV R4, #00H ;1/100秒置初值 MOV R3, #00H ;秒置初值 MOV R2, #00H ;分置初值 MOV 79H, #00H ;1/100秒位置初值 MOV 7AH, #00H ;1/10秒位置初值 MOV 7BH, #00H ;秒位置初值 MOV 7CH, #00H ;十秒位置初值 MOV 7DH, #00H ;分位置初值 MOV 7EH, #00H ;十分位置初值 SETB P1.2 SHOW: MOV SP,#5FH ;显示程序 MOV A,#03H MOV DPTR,#0FF20H ;设置8155初始化 MOVX @DPTR,A DISP4: MOV R5,#01H MOV R0,#79H MOV A,R5 LD0: MOV DPTR,#0FF21H ;字位码送8155A口 MOVX @DPTR,A MOV DPTR,#0FF22H MOV A,@R0 ADD A,#0EH MOVC A,@A+PC ;查字形表 MOVX @DPTR,A ;字型码送8155B口 ACALL DLAY ;延时1MS INC R0 MOV A,R5 JB ACC.5,LD1 RL A MOV R5,A AJMP LD0 LD1: SJMP DISP4 DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,83H,0C6H DB 0A1H,86H,8EH,0FFH,0CH,89H DB 0C8H,0C1H,7FH,0BFH DLAY: MOV R7,#02H ;延时1MS DL1: MOV R6,#0FFH DL2: DJNZ R6,DL2 DJNZ R7,DL1 RET START: MOV TL0, #78H MOV TH0, #0ECH PUSH ACC JNB P1.2,NEXT ;P1.2为0则返回不计时 INC R2 MOV A, R2 MOV B, #10 DIV AB MOV 79H, B ;存1/100秒位 MOV 7AH, A ;存1/10秒位 CJNE R2, #100, NEXT ;1/100秒到100则秒加一 MOV R2, #00H MOV 79H, #00H MOV 7AH, #00H INC R3 MOV A, R3 MOV B, #10 DIV AB MOV 7BH, B ;存秒位 MOV 7CH, A ;存
功能06H 功能描述:设置闹钟 入口参数:AH=06H CH=BCD码格式的小时 CL=BCD码格式的分钟 DH=BCD码格式的秒 出口参数:CF=0——操作成功,否则,闹钟已设置或时钟已停止 (8)、功能07H 功能描述:闹钟复位 入口参数:AH=07H 出口参数:无 (9)、功能0AH 功能描述:读取天数计数,仅在PS/2有效,在此从略 (10)、功能0BH 功能描述:设置天数计数,仅在PS/2有效,在此从略 (11)、功能80H 功能描述:设置声音源信息 入口参数:AH=80H AL=声音源 =00H——8253可编程计时器,通道2 =01H——盒式磁带输入 =02H——I/O通道上的"Audio In" =03H——声音产生芯片 出口参数:无 8、直接系统服务(Direct System Service) INT 00H —“0”作除数 INT 01H —单步中断 INT 02H —非屏蔽中断(NMI) INT 03H —断点中断 INT 04H —算术溢出错误 INT 05H —打印屏幕和BOUND越界 INT 06H —非法指令错误 INT 07H —处理器扩展无效 INT 08H —时钟中断 INT 09H —键盘输入 INT 0BH —通信口(COM2:) INT 0CH —通信口(COM1:) INT 0EH —磁盘驱动器输入/输出 INT 11H —读取设备配置 INT 12H —读取常规内存大小(返回值AX为内存容量,以K为单位) INT 18H —ROM BASIC INT 19H —重启动系统 INT 1BH —CTRL+BREAK处理程序 INT 1CH —用户时钟服务 INT 1DH —指向显示器参数表指针 INT 1EH —指向磁盘驱动器参数表指针 INT 1FH —指向图形字符模式表指针
INT 80H是一个系统调用中断,用于在操作系统中执行各种服务和功能。下面是定义一个INT 80H中断并实现要求的汇编代码: ``` section .data msg db 'INT 80H Interrupt Occurred!', 0 letter db 'a', 1bh, '[44m', 1bh, '[33m', 'a', 0 section .text global _start _start: ; 显示提示信息 mov eax, 4 mov ebx, 1 mov ecx, msg mov edx, 27 int 80h ; 调用INT 80H中断 mov eax, 0 ; 选择屏幕0页 mov bh, 0x01 ; 蓝底 mov bl, 0x0e ; 黄字 mov dh, 7 ; 行数 mov dl, 13 ; 列数 mov ecx, letter ; 字符串 mov ah, 0x09 ; 中断功能号 int 80h ; 调用INT 80H中断 mov eax, 0 ; 选择屏幕0页 mov bh, 0x01 ; 蓝底 mov bl, 0x0e ; 黄字 mov dh, 7 ; 行数 mov dl, 13 ; 列数 mov ecx, letter ; 字符串 mov ah, 0x09 ; 中断功能号 int 80h ; 调用INT 80H中断 mov eax, 0 ; 选择屏幕0页 mov bh, 0x01 ; 蓝底 mov bl, 0x0e ; 黄字 mov dh, 7 ; 行数 mov dl, 13 ; 列数 mov ecx, letter ; 字符串 mov ah, 0x09 ; 中断功能号 int 80h ; 退出程序 mov eax, 1 xor ebx, ebx int 80h ``` 解释: 首先在`.data`段定义两个字符串,一个用于显示提示信息,一个用于显示字符'a'。 然后在`.text`段定义`_start`标签作为程序的入口点。在主程序中,首先使用`mov`指令将参数传递给`eax`、`ebx`、`ecx`和`edx`,然后调用`int 80h`中断以显示提示信息。 接下来,使用`mov`指令将要在屏幕上显示的字符'a'的各个属性传递给寄存器,然后调用`int 80h`中断以在屏幕上显示字符'a'。 最后,使用`mov`指令将参数传递给`eax`和`ebx`,然后调用`int 80h`中断以退出程序。 注意:在程序中使用的字符属性值是根据Linux系统的终端属性来设置的,如果在其他操作系统或终端上运行,可能需要调整这些值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值