实例介绍
【实例简介】北京邮电大学信息与通信工程学院微机原理课程随课软件实验部分全部实验代码。
【实例截图】
【核心代码】
;----微原软件实验四代码----
;----数据段定义----
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论