汇编:中断小问题
答案:2 悬赏:20 手机版
解决时间 2021-02-03 09:58
- 提问者网友:雨不眠的下
- 2021-02-02 13:53
在WIN32下能调用BIOS的INT命令吗?书上说这些中断是BIOS厂商提供的,可又要要求在REAL-MODE 16位下调用. 为什么32位就不能调用这个中断? 如果不能,那WINXP怎么办?它最终还是要调用BIOS的中断来执行一写输入输出命令.
最佳答案
- 五星知识达人网友:街头电车
- 2021-02-02 15:31
在WIN32下是不能调用BIOS的INT中断服务程序的。但微软为了以前dos系统下的应用程序可在win32系统中继续使用,提供了虚拟8086模式,即虚拟出一个dos系统供以前的dos16位程序运行,但是一些硬件中断功能,如读写硬盘的bios中断请求出于安全等因素考虑,还是不能成功执行。
Windows是出于系统的安全和可方便应用程序编程等方面的考虑,不支持直接的中断调用,因为中断是处于系统底层的东东,像dos下的中断功能,用中断号来指明功能,繁琐又容易出错,实在不方便编程,而且中断号、ah值等表示的功能号又是有限的,不能提供很多的系统功能。windows提供了API编程, 支持用函数名来调用系统服务,如ReadFile等,方便直观,易于编程。
另外win32系统在启动时可能是用到了BIOS中断,但在之后是不用BIOS中断的功能的,因为BIOS的代码是16位的,且只支持单线程,在32位多线程保护模式下工作是不合适而且是不能的。系统里有硬件驱动、内核等代码替代了bios的硬件io等功能。
Windows是出于系统的安全和可方便应用程序编程等方面的考虑,不支持直接的中断调用,因为中断是处于系统底层的东东,像dos下的中断功能,用中断号来指明功能,繁琐又容易出错,实在不方便编程,而且中断号、ah值等表示的功能号又是有限的,不能提供很多的系统功能。windows提供了API编程, 支持用函数名来调用系统服务,如ReadFile等,方便直观,易于编程。
另外win32系统在启动时可能是用到了BIOS中断,但在之后是不用BIOS中断的功能的,因为BIOS的代码是16位的,且只支持单线程,在32位多线程保护模式下工作是不合适而且是不能的。系统里有硬件驱动、内核等代码替代了bios的硬件io等功能。
全部回答
- 1楼网友:有你哪都是故乡
- 2021-02-02 16:36
你如果是软件调试的话,没有中断源当然无法进入中断了
想看到效果只能通过设置断点然后置ex0位进入中断
如果是硬件调试
程序在star: ajmp $处一直等待,相当于死循环
而进入中断后,你中断一直没返回(reti or iret)
也就是你执行了 sjmpnext 后相当于还处在中断里面
在无中断嵌套的条件下,无法继续中断
还有一个写程序习惯上的问题
我觉得程序规范点是写法应该是先把寄存器初始化完成后再开始工作
譬如你先开了中断才配置it0,虽然这个在执行上没多大问题
但应该养成良好的写程序习惯,这点只是建议。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯