实例介绍
【实例简介】北京邮电大学信息与通信工程学院微机原理课程随课软件实验部分全部实验代码。
【实例截图】
【核心代码】
;----微原软件实验四代码---- ;----数据段定义---- DATA SEGMENT INPUTTIP DB 'PLEASE INPUT THE DIVIDEND (32)',0AH,0DH,'$';输入被除数提示 INPUT2TIP DB 0AH,0DH,'PLEASE INPUT THE DIVISOR (16)',0AH,0DH,'$';输入除数提示 ERRORTIP DB 0AH,0DH,' INPUT ERROR',0DH,0AH,'$';输入错误提醒 ERROR2TIP DB 0AH,0DH,'DIVISOR EQUALS 0.',0DH,0AH,'$';除数为零提示 OUTPUTTIP DB 0AH,0DH,'THE QUOTIENT IS:','$';商输出 OUTPUT2TIP DB 0AH,0DH,'THE REMAINDER IS:','$';余数输出 DATA ENDS ;----堆栈段定义---- STACK SEGMENT STACK 'STACK' DB 100 DUP(0) STACK ENDS ;----代码段定义---- CODE SEGMENT ASSUME CS:CODE, SS:STACK, DS:DATA, ES:CODE START PROC FAR PUSH DS;入栈保护 MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX STI;TF中断标志置1 MOV AL,0;保存原中断向量 MOV AH,35H INT 21H PUSH ES PUSH BX PUSH DX;写中断向量表 MOV AX,SEG INT00 MOV DS,AX MOV DX,OFFSET INT00 MOV AL,0 MOV AH,25H INT 21H POP DS MOV AH,09H MOV DX,SEG INPUTTIP;提示输入32位二进制0或1 MOV DS,DX MOV DX,OFFSET INPUTTIP INT 21H MOV CX,10H MOV AX,0000H PUSH AX CIN:MOV AH,01H;接收输入 INT 21H CMP AL,'0';输入数字与0比较 JZ JUMP1 CMP AL,'1';输入数字与1比较 JNZ ERROR1;输入有误则跳错误显示程序 STC;为1则将CF置1 RCL DX,1;DX左移,移进一个1 LOOP CIN JMP JUMP2 JUMP1:CLC;为0则将CF置0 RCL DX,1;DX左移,移进一个0 LOOP CIN JUMP2:MOV CX,10H CIN2:MOV AH,01H;接收输入 INT 21H CMP AL,'0' JZ JUMP3 CMP AL,'1' JNZ ERROR2 STC POP AX RCL AX,1 PUSH AX LOOP CIN2 JMP TIP JUMP3:POP AX CLC RCL AX,1 PUSH AX LOOP CIN2 TIP: MOV AH,09H MOV DX,SEG INPUT2TIP;提示输入16位0或1除数 MOV DS,DX MOV DX,OFFSET INPUT2TIP INT 21H MOV CX,10H JUMP4: MOV AH,01H INT 21H CMP AL,'0' JZ JUMP5 CMP AL,'1' JNZ ERROR2 STC RCL BX,1 LOOP JUMP4 JMP JUMP6 JUMP5: CLC RCL BX,1 LOOP JUMP4 JMP JUMP6 ERROR1: MOV AH,09H;输入错误提示 MOV DX,SEG ERRORTIP MOV DS,DX MOV DX,OFFSET ERRORTIP INT 21H JMP CIN ERROR2: MOV AH,09H MOV DX,SEG ERRORTIP MOV DS,DX MOV DX,OFFSET ERRORTIP INT 21H JMP TIP JUMP6: MOV CX,0000H POP AX DIV BX CMP BX,20H JZ RE PUSH DX PUSH AX MOV AH,09H MOV DX,SEG OUTPUTTIP MOV DS,DX MOV DX,OFFSET OUTPUTTIP;商输出显示 INT 21H MOV BX,08H CALL SHOW MOV BX,08H POP CX CALL SHOW MOV AH,09H MOV DX,SEG OUTPUT2TIP MOV DS,DX MOV DX,OFFSET OUTPUT2TIP;余数输出显示 INT 21H MOV BX,08H POP CX CALL SHOW RE: POP DX;恢复中断向量表 POP CX PUSH DS MOV DS,CX MOV AL,0 MOV AH,25H INT 21H POP DS RET START ENDP SHOW PROC NEAR NEXT1:TEST CX,10000000B JZ NEXT2 MOV AH,02H MOV DL,'1' INT 21H SAL CX,1 DEC BX JNZ NEXT1 JMP NEXT3 NEXT2: MOV AH,02H MOV DL,'0' INT 21H SAL CX,1 DEC BX JNZ NEXT1 NEXT3:RET SHOW ENDP INT00 PROC FAR;修改后的中断服务子程序 POP CX;修改返回地址 ADD CX,2 PUSH CX CMP BX,0 JNE NEXT MOV AH,09H MOV DX,SEG ERROR2TIP;除数为0,显示错误信息 MOV DS,DX MOV DX,OFFSET ERROR2TIP INT 21H MOV BX,20H JMP FINISH; 退出 NEXT: PUSH AX;做除法,被除数低16位AX暂存于堆栈 MOV DX,AX;被除数高16位改为低16位 MOV DX,0;被除数高16位为0 DIV BX; 第一次除法 MOV CX,AX;保存高16位的商于CX POP AX;恢复低16位被除数,高16位是上次的余数 DIV BX;商是CX:AX,余数是DX FINISH:IRET INT00 ENDP ;----程序结束---- CODE ENDS END START
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论