int ------》 pushf, push cs, push ip
iret-----》 pop ip, pop cs, popf
编写自己的中断程序. 改写0号中断,当调用0号中断时,屏幕显示'!'字符。
assume cs:code, ds:data, ss:stack
data segment
db 128 dup (0)
data ends
stack segment
db 128 dup (0)
stack ends
code segment
start: mov dx, stack
mov ss, dx
mov sp, 128
call cpy_new_int0
call set_new_int0
int 0
mov ax, 4C00H
int 21H
;================================================
set_new_int0:
mov bx, 0
mov es, bx
cli
mov word ptr es:[0*4], 7E00H
mov word ptr es:[0*4+2], 0
sti
ret
;================================================
new_int0:
push bx
push cx
push dx
push es
mov bx, 0B800H
mov es, bx
mov dl, '!'
mov cx, 2000
mov bx, 0
show_asc: mov es:[bx], dl
add bx,2
loop show_asc
pop es
pop dx
pop cx
pop bx
iret
new_int0_end: nop
;================================================
cpy_new_int0:
mov bx, cs
mov ds, bx
mov si, OFFSET new_int0
mov bx, 0
mov es, bx
mov di, 7E00H
mov cx, OFFSET new_int0_end - new_int0
cld
rep movsb
ret
code ends
end start
实现73H中断, 当调用73H中断时,计算ax的平方。
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment
db 128 dup(0)
stack ends
code segment
start: mov dx, stack
mov ss, dx
mov sp, 128
call cpy_new_int73H
call set_new_int73H
mov ax, 3456
int 73H ; 调用73H中断
mov ax, 4C00H
int 21H
;===============================================
set_new_int73H:
mov bx, 0
mov es, bx
cli
mov word ptr es:[73H*4], 7E00H
mov word ptr es:[73H*4+2], 0
sti
ret
;===============================================
new_int73H:
mul ax
iret
new_int73H_end: nop
;===============================================
cpy_new_int73H:
mov dx, cs
mov ds, dx
mov dx, 0
mov es, dx
mov si, OFFSET new_int73H
mov di, 7E00H
mov cx, OFFSET new_int73H_end - new_int73H
cld
rep movsb
ret
code ends
end start