![]() |
#2
bausrpgf9992009-12-26 22:00
![]() 这个折磨我三天了的问题被我摆平了.... ![]() 也感谢这个坛子,刚在这里发了贴子,没一会工夫,也感谢DEBUG.是用它跟踪的时候发现代码一直在内存里猛冲,IRET,DOS调用04C00也行,突然脑代里灵光一现就有了恩路,会不会是CPU这时候一直保持着被中断的状态呢.于是马上就实验 ![]() ![]() ;改写0号中断并驻刘,MASMPLUS编释 ASSUME CS:CODE CODE SEGMENT START: nop nop nop nop MOV AX,CS ;这些是复制代码到指定空间 MOV DS,AX MOV SI,OFFSET INT0CODE XOR AX,AX MOV ES,AX MOV DI,200H MOV CX,OFFSET INT0CODEEND-INT0CODE+1 CLD REP MOVSB XOR AX,AX ;改写中断向量表 MOV ES,AX MOV WORD PTR ES:[0*4],200H MOV WORD PTR ES:[0*4+2],0H MOV AX,CS ;这些是为了测试字符显示正常于否 MOV DS,AX MOV SI,OFFSET OVERCHAR MOV AX,0B800H MOV ES,AX MOV DI,12*160+36*2 MOV CX,OEND-OVERCHAR+1 MOV AX,0CA00H S2: MOV AL,[SI] MOV ES:[DI],Ax INC SI ADD DI,2 LOOP S2 mov ah,10 int 21h MOV AX,4C00H INT 21H INT0CODE: cli PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI PUSH ES PUSH DS MOV AX,CS MOV DS,AX MOV si,offset OVERCHAR MOV AX,0B800H MOV ES,AX xor di,di MOV CX,OEND-OVERCHAR MOV AX,0CA00H S: MOV AL,[SI] MOV ES:[DI],ax INC SI ADD DI,2 LOOP S jmp short SS1 OVERCHAR DB 'Overflow...VA' OEND DB 'R' SS1: POP DS POP ES POP SI POP DI POP DX POP CX POP BX POP AX sti pushf ;就是这里..手动修改CPU状态标示. pop ax and ax,512 push ax popf MOV AX,4C00H INT 21H INT0CODEEND: ;IRET nop nop CODE ENDS END START |

;改写0号中断并驻刘,MASMPLUS编释
ASSUME CS:CODE
CODE SEGMENT
START: nop
nop
nop
nop
MOV AX,CS ;这些是复制代码到指定空间
MOV DS,AX
MOV SI,OFFSET INT0CODE
XOR AX,AX
MOV ES,AX
MOV DI,200H
MOV CX,OFFSET INT0CODEEND-INT0CODE+1
CLD
REP MOVSB
XOR AX,AX ;改写中断向量表
MOV ES,AX
MOV WORD PTR ES:[0*4],200H
MOV WORD PTR ES:[0*4+2],0H
MOV AX,CS ;这些是为了测试字符显示正常于否
MOV DS,AX
MOV SI,OFFSET OVERCHAR
MOV AX,0B800H
MOV ES,AX
MOV DI,12*160+36*2
MOV CX,OEND-OVERCHAR+1
MOV AX,0CA00H
S2: MOV AL,[SI]
MOV ES:[DI],Ax
INC SI
ADD DI,2
LOOP S2
mov ah,10
int 21h
MOV AX,4C00H
INT 21H
INT0CODE:
cli
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
PUSH SI
PUSH ES
PUSH DS
MOV AX,CS
MOV DS,AX
MOV si,offset OVERCHAR
;mov si,ax
MOV AX,0B800H
MOV ES,AX
xor di,di
MOV CX,offset OEND-offset OVERCHAR
MOV AX,0CA00H
S: MOV AL,[SI]
MOV ES:[DI],ax
INC SI
ADD DI,2
LOOP S
jmp short SS1
OVERCHAR DB 'Overflow...VA'
OEND DB 'R'
SS1: POP DS
POP ES
POP SI
POP DI
POP DX
POP CX
POP BX
POP AX
sti
; mov ax,1068h
; push ax
; mov ax,0a7h
; push ax
; ret
INT0CODEEND: IRET
nop
nop
CODE ENDS
END START