首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux与Windows之间“INT”指令的区别

Linux与Windows之间“INT”指令的区别
EN

Stack Overflow用户
提问于 2017-02-24 13:13:17
回答 2查看 733关注 0票数 2

我编写了一些代码来制作自己的操作系统,并学习x86汇编语言。在学习x86汇编语言时,我开始思考中断的问题。请看下面的程序集代码:

代码语言:javascript
复制
mov ah, 2
mov dl, 'A'
int 0x21

这段代码把'A‘打印到屏幕上。这是给的。

代码语言:javascript
复制
mov eax, 1
mov ebx, 0
int 0x80

这段代码使程序退出。它适用于Linux。最后一个:

代码语言:javascript
复制
mov ah, 2
mov al, 1
mov ch, 0
mov cl, 2
mov dh, 0
mov dl, 0
int 0x13

我编写这段代码是为了从磁盘复制内核代码。此代码包含在MBR扇区中。因此,在执行此代码时,不存在操作系统。我有一个问题要问。

假设有人执行“int”指令来调用中断,如果在MBR扇区上执行“int”指令,则调用BIOS例程。但是我不知道这个“int”指令是在Linux还是Windows上执行的,会发生什么呢?它所指的Linux/Windows中断向量或BIOS例程是否与MBR扇区的情况相同?

坦率地说,我测试了在Linux上执行第一段代码的尝试,但没有成功。我认为“int”指令的结果取决于操作系统。如果不是事实,有没有人能告诉我真相或任何想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-24 13:41:58

int指令引发一个软件中断。这导致CPU从中断描述表(IDT)执行中断处理程序。在启动时,BIOS使用许多执行一些基本服务的中断处理程序来设置IDT。DOS将自己的中断处理程序添加到此表中,以提供特定于DOS的功能。

现代操作系统以保护模式运行。在这种模式下,BIOS服务不起作用,因为BIOS服务是写在实模式下执行的。现代操作系统通常将标准中断描述表替换为自定义表。因此,DOS和BIOS服务都不可用。

票数 5
EN

Stack Overflow用户

发布于 2017-02-25 02:04:40

INT指令触发异常,几乎就像除以零导致异常一样。区别在于INT允许您指定要触发的异常。

操作系统必须定义一个异常和中断处理程序表。表的位置和大小由硬件寄存器IDTR定义。各种异常(如除以零)都有指定的异常号。(INT允许指定任何异常号。)

请参阅table

当出现异常(或中断)时,CPU使用异常/中断号作为表中的索引,并调用特定的处理程序。

操作系统定义了中断和异常的表和处理程序,因此它们是不同数量的操作系统。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42439538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档