4143|6

78

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

不理解软件中断。求大家给解释下。 [复制链接]

看到软件中断的定义:人们通常用相应的指令来使CPU相应中断,CPU只要执行这种指令就会转入相应的中断服务程序执行,以完成相应的中断操作。
这看起来怎么像是在一个程序中调用另外一个子程序啊?          软件中断和程序之间的调用有什么区别啊?

最新回复

中断一般不能传参,函数调用可以。(但可以用公用变量来代替传参) 中断可以打断现在正在执行的函数,导致出现中断嵌套,但函数调用不行。  详情 回复 发表于 2012-7-5 08:46

点评

这要先理解函数调用和软中断的概念 函数调用:一个函数执行过程中需要另外一个函数的功能时执行调用,函数调用时将返回地址和CPU状态寄存器内容压栈,当函数执行完毕后弹出上述压栈的内容并回到原函数继续执行 软  详情 回复 发表于 2012-6-29 23:27
 
点赞 关注

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
网上找的,觉得比较能说明问题,分享下
软中断是实现系统API函数调用的手段
  函数调用时将返回地址和CPU状态寄存器内容压栈,函数执行完毕后出栈返回断点继续执行。
  软中断调用时将返回地址和CPU状态寄存器内容压栈,修改特权级,根据中断号查找中断向量表,找到ISR中断服务例程地址,跳转执行。
  综上,函数调用和软中断调用的区别是,软中断多了修改特权级和查找中断向量表的功能,其他部分完全一样。
  一般,系统程序由软件公司实现且不开源,你无法知道系统API函数的偏移地址,而且你写的应用程序和软件公司提供的系统程序是完全分开的,编译器无法将二者链接在一起,同时,系统程序需要核心态特权才能运行,此时用函数调用的办法是无法调用系统API函数的。解决这个问题的方法是使用软中断,当应用程序需要调用API时,就先设置功能号(如AX=0H),然后触发软中断(如INT 80H)。系统程序设置好中断向量表。这样,应用程序就可以间接找到系统API了。
  有了软中断,就可以实现应用程序的动态加载。就像WINDOWS/Linux那样,应用程序和系统程序分别开发,不在一起编译连接,应用程序通过软中断调用系统提供的功能。
 
 

回复

78

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
谢谢shower.xu。
我对应用程序和系统程序的理解的不太好。系统好比uc/osII,系统是开源的,系统API函数好比是“OS_Sched”这个任务调度函数,我们可以直接访问。那我们可不可以不用软中断的方式,而用函数调用的方式来实现呢?

点评

那可能在执行的过程中会被其他高优先级的中断或任务打断,可能不能正确执行。我对系统也不熟悉,但坛子里wstrom和ffxz等TX是系统方面高手,你可以请教他们  详情 回复 发表于 2012-6-26 21:49
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

4
 
原帖由 fendou 于 2012-6-26 20:58 发表 谢谢shower.xu。 我对应用程序和系统程序的理解的不太好。系统好比uc/osII,系统是开源的,系统API函数好比是“OS_Sched”这个任务调度函数,我们可以直接访问。那我们可不可以不用软中断的方式,而用函数调用的方式 ...

那可能在执行的过程中会被其他高优先级的中断或任务打断,可能不能正确执行。我对系统也不熟悉,但坛子里wstromffxz等TX是系统方面高手,你可以请教他们
 
 
 

回复

463

帖子

0

TA的资源

纯净的硅(中级)

5
 

回复 楼主 fendou 的帖子

这要先理解函数调用和软中断的概念
函数调用:一个函数执行过程中需要另外一个函数的功能时执行调用,函数调用时将返回地址和CPU状态寄存器内容压栈,当函数执行完毕后弹出上述压栈的内容并回到原函数继续执行
软中断:类似于中断,只是触发条件不是由硬件触发而是由用户调用的软中断指令触发。软中断产生时压栈的内容与函数调用相同,但是不是直接进入另外一个函数的入口,而是进入中断向量表中查询应该执行的程序PC指向。同时根据需要修改CPU的特权级别。目的是为了保护系统资源被用户程序非法使用。
所以函数调用和软中断调用的区别是,软中断多了修改特权级和查找中断向量表的功能,其他部分完全一样。
一般软中断的使用主要是为了使用户程序进入系统级的函数,如果不是这样就没有必要使用软中断
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(高级)

6
 
谢谢wstrom版主。
 
 
 

回复

1412

帖子

15

TA的资源

版主

7
 
中断一般不能传参,函数调用可以。(但可以用公用变量来代替传参)

中断可以打断现在正在执行的函数,导致出现中断嵌套,但函数调用不行。
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表