鱼C论坛

 找回密码
 立即注册
查看: 1813|回复: 6

关于内中断,请大牛解惑

[复制链接]
发表于 2013-1-5 21:46:15 | 显示全部楼层 |阅读模式
5鱼币
书中13.1的问题一、问题二 的中断程序7ch中安装 中断程序之后都有一个
mov ax,4c00h
mov 21h
这段代码不是返回上级程序的吗
也就是说这个 中断程序的运行流程是这样的吗?
debug=》实例程序=》中断=》(子程序)中断程序初始化=》(实例程序)返回=》0:200h 处代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-1-5 22:03:06 | 显示全部楼层
所以说 内中断 的执行顺序是
1 取得中断代码类型n;
进行初始化程序
2 标志寄存器入栈
3 CS IP入栈
4 IP=(N*4) CS=(N*4+2)
5 执行CS IP中代码
6 iret
7 cs ip出栈 标志寄存器出栈
8 继续执行int 后代码

即是说如果我在中断之前给ax赋值为1
而在安装程序中改变ax值为2

我在执行中断程序的时候ax的值是多少?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-1-6 09:40:44 | 显示全部楼层
mov ax,4c00h
mov 21h
错了
正确的是:
mov ax,4c00h
int 21h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-1-6 10:16:39 | 显示全部楼层
mov ax,4c00h
int 21h
表示程序执行21号中断例程的4ch号功能,功能为程序返回,可以提供返回值作为参数,ah是功能号,al里面是参数。
以上也可写为:
mov ah,4ch   ;程序返回功能
mov al,0                  ;返回值
int 21h
相关内容可以在13.7找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-1-6 10:32:01 | 显示全部楼层

你这个是专指int中断,内中断还有其他方式可以触发的,总共有4种方式,具体内容见12.1
int n指令相当于引发一个n号中断的中断过程,过程如下:
1、取中断类型码n;
2、标志寄存器入栈,IF=0,TF=0;
3、CS、IP入栈;
4、IP=(N*4) CS=(N*4+2)
5、执行中断
6、iret (此命令的意思就是你所说的第七步,不过注意顺序,汇编代码是)
iret
pop IP
pop CS
popf
就是说IP出栈,CS出栈,标志寄存器出栈,刚好和入栈顺序相反
iret的详细解释见:12.5

现学现卖,献丑了。兄弟学的够深的,在这之前我还没涉猎呢,只是初步了解,汗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-6 21:53:34 | 显示全部楼层
1 除法溢出中断是 貌似调用的 int 0
2 单步中段 貌似调用的是int 1
3 into 指令
4 int 指令
因为1 2 号中断对应的中断向量表地址分别为0:2 0:0 0:6 0:4
所以cpu 的内中断机制分为 int into两种也不为过吧
我记得视频中有直接调用int 0 就执行除法溢出中断的片段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-6 21:58:28 | 显示全部楼层
还有那个问题我想通了
中断安装程序中的功能性代码只是以数据形式存储在0:200段中
安装程序只是把这些代码写入内存 并没有执行 然后调用int 21h 返回DOS
然后在执行程序中执行int 7ch的时候去调用0:200中存储的新int 7ch代码
安装程序和执行程序是两个程序
所以在安装程序中的ax值 不会影响执行程序中ax的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 00:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表