基本信息
源码名称:北邮信通微机原理软件实验代码包
源码大小: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