您的位置:首页 > 其它

第十二章实验任务:编写0号中断的处理程序

2009-09-09 14:19 597 查看
题目:编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到dos

要求:仔细跟踪调试。

源代码:

ASSUME CS:CODESG

CODESG SEGMENT
START:
    ;这时设置ds:[si]指向需要复制的代码处
    MOV AX,CS
    MOV DS,AX
    MOV SI,OFFSET DO0;offset DO0是把程序开始到do0的偏移地址给si
    
    MOV AX,0000
    MOV ES,AX
    MOV DI,0200H;设置es:[di]指向要复制程序的目标处
    
    MOV CX,OFFSET DO0END - OFFSET DO0;设置复制的循环次数,这里的循环次数就是要复制程序的开始地址到程序的结束地址
    
    CLD;设置si、di按1增长
    
    REP MOVSB;进行复制的循环过程
    
    ;设置中断向量表,由于是N号中断,其段地址放在0000:[N*4]字单元中,其偏移地址放在0000:[N*4+2]字单元中。所以0号中断的
    ;中断程序的段地址放在0000:[N*4]字单元,其偏移地址放在0000:[N*4+2]字单元中。
    MOV WORD PTR ES:[0*4],200H
    MOV WORD PTR ES:[0*4+2],0000
    
    ;这里是写的测试程序,当然也可以在debug时在写入执行
    ;MOV AX,1000H
    ;MOV BH,1
    ;DIV BH
     
    MOV AX,4C00H
    INT 21H

;此处是中断处理程序
DO0:
    ;开始时是是定义要输出的字符串,其不能执行,所以跳转到DO0START处开始执行
    JMP SHORT DO0START
    DB 'DIVIDE ERROR!'
    
DO0START:
    MOV AX,CS
    MOV DS,AX
    MOV SI,0202H;设置ds:[si]指向所定义的字符串'DIVIDE ERROR!'
    
    MOV AX,0B800H
    MOV ES,AX
    MOV DI,12*160+36*2;设置es:[di]指向屏幕的中央处
    
    MOV CX,13;这里是设置显示字符串的循环次数
    
  S:
    MOV AL,DS:[SI]
    MOV AH,02H;设置显示的字体颜色
    MOV ES:[DI],AX
    ADD DI,2
    INC SI
    LOOP S 
    
    MOV AX,4C00H
    INT 21H
DO0END:
    NOP 
CODESG ENDS
END START


调试过程:

-r

AX=0000  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0000   NV UP EI PL NZ NA PO NC 
0B85:0000 8CC8          MOV	AX,CS                              
-u

0B85:0000 8CC8          MOV	AX,CS                              
0B85:0002 8ED8          MOV	DS,AX                              
0B85:0004 BE2800        MOV	SI,0028                            
0B85:0007 B80000        MOV	AX,0000                            
0B85:000A 8EC0          MOV	ES,AX                              
0B85:000C BF0002        MOV	DI,0200                            
0B85:000F B93300        MOV	CX,0033                            
0B85:0012 FC            CLD	                                   
0B85:0013 F3            REPZ	                                   
0B85:0014 A4            MOVSB	                                   
0B85:0015 26            ES:	                                   
0B85:0016 C70600000002  MOV	WORD PTR [0000],0200               
0B85:001C 26            ES:	                                   
0B85:001D C70602000000  MOV	WORD PTR [0002],0000               
-t

AX=0B85  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0002   NV UP EI PL NZ NA PO NC 
0B85:0002 8ED8          MOV	DS,AX                              
-t

AX=0B85  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B85  ES=0B75  SS=0B85  CS=0B85  IP=0004   NV UP EI PL NZ NA PO NC 
0B85:0004 BE2800        MOV	SI,0028                            
-t

AX=0B85  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0028  DI=0000  
DS=0B85  ES=0B75  SS=0B85  CS=0B85  IP=0007   NV UP EI PL NZ NA PO NC 
0B85:0007 B80000        MOV	AX,0000                            
-t

AX=0000  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0028  DI=0000  
DS=0B85  ES=0B75  SS=0B85  CS=0B85  IP=000A   NV UP EI PL NZ NA PO NC 
0B85:000A 8EC0          MOV	ES,AX                              
-t

AX=0000  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0028  DI=0000  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=000C   NV UP EI PL NZ NA PO NC 
0B85:000C BF0002        MOV	DI,0200                            
-t

AX=0000  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0028  DI=0200  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=000F   NV UP EI PL NZ NA PO NC 
0B85:000F B93300        MOV	CX,0033                            
-t

AX=0000  BX=0000  CX=0033  DX=0000  SP=0000  BP=0000  SI=0028  DI=0200  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=0012   NV UP EI PL NZ NA PO NC 
0B85:0012 FC            CLD	                                   
-t

AX=0000  BX=0000  CX=0033  DX=0000  SP=0000  BP=0000  SI=0028  DI=0200  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=0013   NV UP EI PL NZ NA PO NC 
0B85:0013 F3            REPZ	                                   
0B85:0014 A4            MOVSB	                                   
-p

AX=0000  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=005B  DI=0233  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=0015   NV UP EI PL NZ NA PO NC 
0B85:0015 26            ES:	                                   
0B85:0016 C70600000002  MOV	WORD PTR [0000],0200               ES:0000=1068
-t

AX=0000  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=005B  DI=0233  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=001C   NV UP EI PL NZ NA PO NC 
0B85:001C 26            ES:	                                   
0B85:001D C70602000000  MOV	WORD PTR [0002],0000               ES:0002=00A7
-t

AX=0000  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=005B  DI=0233  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=0023   NV UP EI PL NZ NA PO NC 
0B85:0023 B8004C        MOV	AX,4C00                            
-t

AX=4C00  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=005B  DI=0233  
DS=0B85  ES=0000  SS=0B85  CS=0B85  IP=0026   NV UP EI PL NZ NA PO NC 
0B85:0026 CD21          INT	21                                 
-d 0000:0200

0000:0200  EB 0D 44 49 56 49 44 45-20 45 52 52 4F 52 21 8C   ..DIVIDE ERROR!.
0000:0210  C8 8E D8 BE 02 02 B8 00-B8 8E C0 BF C8 07 B9 0D   ................
0000:0220  00 8A 04 B4 02 26 89 05-83 C7 02 46 E2 F3 B8 00   .....&.....F....
0000:0230  4C CD 21 00 00 00 00 00-00 00 00 00 00 00 00 00   L.!.............
0000:0240  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:0250  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:0260  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-t


测试程序:

紧接着在debug中写入如下命令,并执行

MOV AX,1000H
MOV BH,1
DIV BH
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: