int指令
int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。
CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下。
1)取中断类型码n;
2)标志寄存器入栈 ,IF=0, TF=0;
- CS,IP入栈;
4)(IP)=(n4), (CS)=(n4+2)。
int指令的最终功能和call指令相似,都是调用一段程序。
问题一:编写、安装中断7ch的中断例程。
功能:求一word型数据的平方。
参数:(ax)=要计算的数据。
返回值: dx、ax中存放结果的高16位和低16位。
应用举例:求2*34562 。
assume cs:code
code segment
start:
mov ax, 3456
int 7ch
add ax, ax
adc dx, dx
mov ax, 4c00h
int 21h
code ends
end start
我们需要做一下3部分工作。
1)编写实现求平方功能的程序
- 安装程序,将其安装在0:200处
3)设置中断向量表,将程序的入口地址保存在7ch表项中,使其成为中断7ch的中断例程。
安装程序如下。
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset 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], 0
mov ax, 4c00h
int 21h
sqr:
mul ax
iret
sqrend:
nop
code ends
end start
问题二:编写、安装中断7ch的中断例程。
功能:将一个全是字母,以0结尾的字符串,转化成大写。
参数: ds:si指向字符串的首地址
应用举例:将data段中的字符串转化成大写。
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, 0
int 7ch
mov ax, 4c00h
int 21h
code ends
end start
安装程序如下。
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset capital
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset capitalend-offset capital
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
capital:
push cx
push si
change:
mov cl, [si]
mov ch, 0
jcxz ok
and byte ptr [si], 11011111b
inc si
jmp short change
ok:
pop si
pop cx
iret
capitalend:
nop
code ends
end start
网友评论