1. 7ch中斷例程所能進(jìn)行的最大轉(zhuǎn)移位移是 *** -128 ~ 127 *** ,所以是128位。
2. 用7ch中斷例程完成 jmp near ptr s(近轉(zhuǎn)移)指令的功能,用bx向中斷例程傳送轉(zhuǎn)移位移。
應(yīng)用舉例: `在屏幕第12行,顯示data段中以0為結(jié)尾的字符串`
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 會(huì)被多次的賦值,不同的賦值都有不同的作用
int 7ch ;7ch向量表所對(duì)應(yīng)的中斷例程主要的作用就是設(shè)置cs-ip,使它指向 s 處 。從而達(dá)到循環(huán)的目的
ok: mov ax,4c00h
int 21h
code ends
end start
分析:
1. 首先我們知道中斷例程是中斷處理程序,它是安裝在內(nèi)存的某處地方,并在中斷向量表中登記。所以我們可以把這個(gè)題目當(dāng)做是兩個(gè)程序,一個(gè)是安裝程序:中斷例程,另一個(gè)是主邏輯程序。
2. “應(yīng)用舉例”當(dāng)做主邏輯程序,下面?zhèn)儗懓惭b程序。
安裝程序
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處
; 設(shè)置中斷向量
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0 ; 只有被向量表登記了才能算是安裝程序,不然只能算是內(nèi)存中的一段數(shù)據(jù)。
mov ax,4c00h
int 21h
content: push bp
mov bp,sp
add [bp+2],bx ; 這里bp+2的原因是 因?yàn)楫?dāng)前的棧頂是bp,加2表示bp的下一個(gè)出棧對(duì)象ip。
pop bp
iret ; pop ip, pop cs, popf
endContent:nop
code ends
end start