- int n指令的最终功能和call指令类似,调用一段程序
- 系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用
- 编程时用
int
指令调用子程序 - 子程序即中断处理程序,简称中断例程
- 中断7CH的中断例程
- 按照中断的运行机制的要求编写
- 参考中断0的中断例程
- 功能:求一个word型数据的平方
- 参数:(ax) = 要计算的数据
- 返回值:dx,ax中存放结果的高、低16位
- 例:
2
×
345
6
2
2\times3456^2
2×34562
- 求平方功能的程序
sqr:mul ax
iret
sqrend:nop
- 安装程序,安装在0:200处
start:mov ax,cs
mov ds,ax
lea si,sqr
mov ax,0
mov es,ax
mov di,200h
mov cx,offset sqrend - offset sqr
cld
rep movsb
- 设置中断向量表,将程序入口对着保存在7CH表项中,使其成为中断7CH的中断例程
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0h
mov ax,4ch
int 21h
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
lea si,sqr
mov ax,0
mov es,ax
mov di,200h
mov cx,offset sqrend - offset sqr
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0h
mov ah,4ch
int 21h
sqr:mul ax
iret
sqrend:nop
code ends
end start
- 再用masm for Windows就不行了,一运行完就关闭,得换命令行的编辑环境
- 编译另外一个程序
- 太久没用命令行了,犯了一个低级错误
- 不得不说,DOS环境下十进制转十六进制真的快
- 成功调用
- 结果如下
- 测试程序是另外存为my.exe
assume cs:code
code segment
start:mov ax,3456
int 7ch
add ax,ax
adc dx,dx
mov ah,4ch
int 21h
code ends
end start
pushf
push CS
push IP
pop IP
pop CS
popf