| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 849 人关注过本帖
标题:王爽的作业题改写0类型中断并驻留,好心人帮忙看看为什么运行后死机啊!
取消只看楼主 加入收藏
bausrpgf999
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-7-1
收藏
 问题点数:0 回复次数:1 
王爽的作业题改写0类型中断并驻留,好心人帮忙看看为什么运行后死机啊!
我用DEBUG看了看,发现这个代码确实改写了CS:IP=0:0,并且指向了自定义的地址0:200H处,0:200处也有驻留的代码,但一运行就死机....,好心人帮忙看看...


;改写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



搜索更多相关主题的帖子: 类型 作业 王爽 驻留 
2009-12-26 20:49
bausrpgf999
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-7-1
收藏
得分:0 
哈哈..感谢万能的我啊.....我太感动了......
        这个折磨我三天了的问题被我摆平了....
             也感谢这个坛子,刚在这里发了贴子,没一会工夫,也感谢DEBUG.是用它跟踪的时候发现代码一直在内存里猛冲,IRET,DOS调用04C00也行,突然脑代里灵光一现就有了恩路,会不会是CPU这时候一直保持着被中断的状态呢.于是马上就实验,OK.一释出来一执行,哈哈...一切正常...把这个正常的代码贴出来,留给刚学汇编的和我一样菜的人们...

;改写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

林子大了,嘛鸟都有了
            
2009-12-26 22:00
快速回复:王爽的作业题改写0类型中断并驻留,好心人帮忙看看为什么运行后死机啊 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016902 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved