北邮微机原理软件实验.docxVIP

  • 2
  • 0
  • 约4.77千字
  • 约 10页
  • 2019-09-27 发布于广东
  • 举报
实验五中断程序设计 一、 实验目的 初步掌握中断程序的设计方法; 初步掌握修改DOS系统中断,以适应实际使用的方法。 二、 实验内容 编写一个32位二进制数除以16位二进制数的除法程序。观察当除数为0, 或超过相应寄存器范围时,程序执行的结果。 修改零号中断服务程序,使它具有以下功能: 1) 判断除数是否为0,当除数为0时,显示相应的结果; 2) 当除数不为0时,采用适当的方法完成商超过16位的二进制数的除法 运算。 注意必须保护原有中断服务程序的入口地址,并在程序完毕前加以恢复。 选作题: 1) 用二进制将结果在屏幕上显示。 2) 从键盘输入二进制数。 三、 预习思考 如何保护原有中断向量表中的中断服务程序的入口地址? 答:先读取中断向量表中0号中断的地址,压入堆栈,程序结束时弹出堆 栈,写回中断向量表即可。 如何将你的中断服务程序入口地址置入中断向量表? 答:有两种基本方法:一是直接写入法,使用指令将中断服务程序入口地 址的IP写入nX4的RAM位置,中断服务程序入口的CS写入nX4+2的 位置;二是DOS功能调用,25H用來写屮断向量表,35H读屮断向量表。 四、实验过程 (―)流程图 (二)源代码 DATA SEGMENT XX DD ?;被除数 32bit YY DW ?;除数 16bit TMP DW ? FLAG DB 0 ;是否调用了中断处理程序的标志位,即是否溢出 ;一些提示信息 ERR0 DB 1 ERROR! Divide by ZERO! 1 , 1 $1 TIPI DB 1 Quotient : TIP2 DB 1 Remainder: TIP3 DB 1 Input high 16-bit of dividend:* z * $ TIP4 DB 1 Input low 16-bit of dividend: z * $ 1 TIP5 DB 1 Input 16-bit divisor:1z 1 $ 1 CR DB ODH,OAHJ$T 回车换行 ONE DB ?$ ZER DB *0, ?$ TAB DB 09H, $ BUFF DB 17 ;输入缓冲区,可容纳包括回车在内的17个字符 PRES DB 0 CHAR DB 17 DUP(0) DATA ENDS ;定义堆栈 STACK SEGMENT STACK STACK1 DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,ES:CODE,SS:STACK ;打印字符串的宏 PRINT MACRO PARA PUSH AX PUSH DX MOV AH,09H MOV DXZOFFSET PARA INT 21H POP DX POP AX ENDM f ;主程序入口 MAIN: MOV AX,DATA MOV DS,AX MOV AX,0 MOV ES,AX ;保存原中断向量表 MOV AX,WORD PTR ES:[0000H] PUSH AX MOV AX,WORD PTR ES:[0002H] PUSH AX ;写入新的中断处理子程序地址 MOV WORD PTR ES:[0000H],OFFSET INTO MOV WORD PTR ES:[0002H],SEG INTO CALL INPUT;获取输入 MOV DX, WORD PTR XX; 移入被除数高16位 MOV AX, WORD PTR XX+2;移入被除数低16位 MOV BXZ YY ;移入除数 DIV BX;进行32位除法运算 CMP FLAG,。;查看是否调用了中断处理程序,即可判断是否溢出 JNE ISOF;溢出跳转,到扩充除法的结果输出 ;否则直接输出没有溢出的正常除法结果 PRINT TIPI MOV BX,AX CALL DISP2 PRINT CR PRINT TIP2 MOV BX,DX CALL DISP2 JMP EOP ;有溢出的时候需要输出32位商和16位余数 ISOF: PRINT TIPI MOV BX,DX CALL DISP2 MOV BX,AX CALL DISP2 PRINT CR PRINT TIP2 MOV BX,CX CALL DISP2 EOP: POP AX;程序结束出口 ;恢复中断向量表 MOV WORD PTR ES:[0002H],AX POP AX MOV WORD PTR ES: [0000H] ,AX MOV AX,4C00H; 返回DOS INT 21H ;新的0号中断子程序 INTO : POP SI ADD SI, 2;修改:LP的值,指向DIV后的指令 PUSH SI CMP BX, 0;判断除数是否为0 JE DIV0;为零则提示除数为

文档评论(0)

1亿VIP精品文档

相关文档