基本信息
源码名称:北邮信通微机原理软件实验代码包
源码大小:0.17M
文件格式:.zip
开发语言:C/C++
更新时间:2019-05-12
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
北京邮电大学信息与通信工程学院微机原理课程随课软件实验部分全部实验代码。
北京邮电大学信息与通信工程学院微机原理课程随课软件实验部分全部实验代码。
;----微原软件实验四代码---- ;----数据段定义---- 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