一 中断处理过程(和iret命令过程相反):
1、获取中断码n
2、flag(标志)寄存器入栈
3、CS、IP入栈
4、设置IP=4*n CS=4*n+2
二 中断处理程序编写
1、mov ax,cs
mov ds,ax
mov si,offset sqr ;设置ds:si指向sqr源地址
2、mov ax,0
mov es,ax
3、mov di,200h ;设置es:di指向目标地址
mov cx,offset sqrend-offset sqr ;设置cx为传输长度 offset设置偏移地址
4、cld ;设置传输方向为正向
rep movsb ;将sqr代码送至0:200h
;rep是重复repeat(重复)的缩写,是重复执行指令的前缀。用于重复执行后面的指令,它通过设置cx来控制重复次数
;movsb以字节为单位进行移动 movsd以双字为单位进行移动 movsw以字为单位进行移动
5、mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h ;设置中断向量表
mov word ptr es:[7ch*4+2],0 ;设置中断向量表
6、mov ax,4c00h ;也可以写成mov AH
int 21h ;DOS系统功能调INT 21H功能中的一种,表示带返回码结束用户程序
;AH、功能、调用参数、返回参数
;AH存入00,功能:程序终止(同INT 20H),调用参数:CS=程序段前缀
;AH存入01,功能:键盘输入并回显,调用参数:AL=输入字符
;AH存入02,功能:显示输出,调用参数:DL=输出字符。
;AH存入03,功能:异步通迅输入,调用参数:AL=输入数据。
;AH存入04,功能:异步通迅输出,调用参数:DL=输出数据
7、sqr: mul ax ;无符号乘法
iret ;IRET(interrupt return)中断返回,推入堆栈的段地址和偏移地址弹出,使程序返回到原来发生中断的地方。其作用是从中断中恢复中断前的状态
;功能 恢复IP:pop IP; 恢复CS:pop CS; 恢复中断前标志寄存器装态popf;恢复ESP(返回权限发生变化);恢复SS(返回权限发生变化)
8、sqrend:nop ;空指令 什么都不做,但是会占用一个指令的时间;用于程序指令的对齐,比如字对齐