感谢各位帮忙,我按大家意思写了如下程序,错在哪?
DAT SEGMENT PARA 'DAT'
ADDRESS DW ?
DAT ENDS
CODE SEGMENT PARA 'CODE'
ASSUME DS:DAT,CS:CODE
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DAT
MOV DS,AX
MOV AL,21H
MOV AH,35H
INT 21H ;取原中断向量到BX中
MOV ADDRESS,BX;保存此中断向量
PUSH DS
MOV AX,0
MOV DS,AX
LEA DX,DOS
MOV AL,21H
MOV AH,25H
INT 21;设置新的中断向量
POP DS
MOV BL,8
MOV AH,0FFH;调用自定义中断处理子函数
INT 21H
RET
MAIN ENDP
DOS PROC FAR
CMP AH,0FFH
JE CHANGE
PUSH CS
JMP ADDRESS ;跳到原中断向量处执行
CHANGE:ADD BL,30H;转成ASCII码
RET
DOS ENDP
有个问题
DAT SEGMENT PARA 'DAT'
ADDRESS DD ?
DAT ENDS
CODE SEGMENT PARA 'CODE'
ASSUME DS:DAT,CS:CODE
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DAT
MOV DS,AX
MOV AL,21H
MOV AH,35H
INT 21H ;取原中断向量到ES:BX中
MOV WORD PTR ADDRESS,BX;保存此中断向量
MOV WORD PTR ADDRESS+2,ES
PUSH DS
MOV AX,CS
MOV DS,AX
MOV DX, OFFSET DOS
MOV AL,21H
MOV AH,25H
INT 21H;设置新的中断向量(执行到这里就自动退出了)
POP DS
MOV BL,8
MOV AH,0FFH;调用自定义中断处理子函数
INT 21H
MOV DX,WORD PTR ADDRESS
MOV DS,WORD PTR ADDRESS+2
MOV AL,21H
MOV AH,25H
INT 21H ;恢复成原来的中断向量
RET
MAIN ENDP
DOS PROC FAR
DAT SEGMENT PARA 'DAT'
ADDRESS DD ?
DAT ENDS
CODE SEGMENT PARA 'CODE'
ASSUME DS:DAT,CS:CODE
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DAT
MOV DS,AX
MOV AL,21H
MOV AH,35H
INT 21H ;取原中断向量到ES:BX中
MOV WORD PTR ADDRESS,BX;保存此中断向量
MOV WORD PTR ADDRESS+2,ES
PUSH DS
MOV AX,CS
MOV DS,AX
MOV DX, OFFSET DOS
MOV AL,21H
MOV AH,25H
INT 21;设置新的中断向量
POP DS
MOV BL,8
MOV AH,0FFH;调用自定义中断处理子函数
INT 21H
RET
MAIN ENDP
DOS PROC FAR
MOV DX,WORD PTR ADDRESS
MOV DS,WORD PTR ADDRESS+2
MOV AL,21H
MOV AH,25H
INT 21 ;恢复成原来的中断向量
CMP AH,0FFH
JE CHANGE