1. 7ch中断例程所能进行的最大转移位移是 *** -128 ~ 127 *** ,所以是128位。
2. 用7ch中断例程完成 jmp near ptr s(近转移)指令的功能,用bx向中断例程传送转移位移。
应用举例: `在屏幕第12行,显示data段中以0为结尾的字符串`
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov ah,6 ; 字体颜色,橙色
s: cmp byte ptr[si],0
je ok
mov bx,140h ;140h表示第三行,总共25行 (80*25)
add bx,0ah ;从第10列开始显示
mov al,[si]
mov es:[bx+di],ax
inc si
add di,2
mov bx,offset s-offset ok ; s 子程序中 bx 会被多次的赋值,不同的赋值都有不同的作用
int 7ch ;7ch向量表所对应的中断例程主要的作用就是设置cs-ip,使它指向 s 处 。从而达到循环的目的
ok: mov ax,4c00h
int 21h
code ends
end start
分析:
1. 首先我们知道中断例程是中断处理程序,它是安装在内存的某处地方,并在中断向量表中登记。所以我们可以把这个题目当做是两个程序,一个是安装程序:中断例程,另一个是主逻辑程序。
2. “应用举例”当做主逻辑程序,下面们写安装程序。
安装程序
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset content
mov ax,0
mov es,ax
mov di,200h
mov cx,offset endContent-offset content
cld
rep movsb ; 正向拷贝指令到es:di处
; 设置中断向量
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
content: push bp
mov bp,sp
add [bp+2],bx ; 这里bp+2的原因是 因为当前的栈顶是bp,加2表示bp的下一个出栈对象ip。
pop bp
iret ; pop ip, pop cs, popf
endContent:nop
code ends
end start
网友评论