由于内中断(int)事实上是调用预先存在内存中的函数,所以我们可以覆盖掉原函数,自己完成内中断函数的设计
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
db 128 dup(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,128
CALL copy_new_7CH
CALL set_new_7CH
INT 7CH
MOV AH,4CH
INT 21H
;===============================================
new_7CH: MOV AX,1000H
IRET
end_new_7CH:
;===============================================
set_new_7CH: MOV BX,0
MOV ES,BX
MOV word ptr ES:[7CH*4],7E00H
MOV word ptr ES:[7CH*4+2],0
end_set_new_7CH: RET
;===============================================
copy_new_7CH: MOV AX,0
MOV ES,AX
MOV DI,7E00H
MOV AX,CS
MOV DS,AX
MOV SI,OFFSET new_7CH
mov cx,OFFSET end_new_7CH - new_7CH
cld
rep movsb
end_copy_new_7CH: ret
;===============================================
CODES ENDS
END START