我写完C++程序后 进入反汇编 单步运行看到很多int 3 这里的int 3 是什么意思啊
我知道是中断 但具体中断什么我不知道
追答1,示例一
编写、安装中断7ch的中断全程,功能:求一word型数据的平方。
参数:(ax)=要计算的数据。
返回值:dx、ax中存放结果的高16位和低16位。
应用举例:求2*3456^2
assume cs:code
code segment
start:mov ax,3456;(ax)=3456
int 7ch;调用中断7ch的中断例程,计算ax中的数据的平方
add ax,ax
adc dx,dx;dx:ax存放结果,将结果乘以2
mov ax,4c00h
int 21h
code ends
end start
分析,我们要做三部分工作:
1)编写实现求平方功能的程序;
2)安装程序,我们将其安装在0:200处;
3)设置中断向量表,将程序的入口地址保存在7ch表项中,使其成为中断7ch的中断例程。
安装程序如下:
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si, offset sqr;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di, 200h;设置es:di指向目的地址
mov cx, offset sqrend – offset sqr;设置cx为传输长度
cld;设置传输方向为正
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h;设置中断向量表偏移地址
mov word ptr es:[7ch*4+2],0;设置中断向量表,段地址
mov ax,4c00h
int 21h
sqr:mul ax
iret
sqrend: nop
code ends
end start
注意,在中断例程sqr的最后,要使用iret指令。用汇编语法描述,iret指令的功能为:
pop IP
pop CS
popf
CPU执行int 7ch指令进入中断例程之前,标志寄存器、当前的CS和IP被压入栈中,在执行完中断例程后,应该用iret指令恢复int 7ch执行前的标志寄存器和CS、IP的值,从而接着执行应用程序。
int指令和iret指令的配合使用与call指令和ret指令的配合使用具有相似的思路。
我写完C++程序后 进入反汇编 单步运行看到很多int 3 这里的int 3 是什么意思啊