题目:编写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