基本信息
源码名称:北邮信通微机原理软件实验代码包
源码大小:0.17M
文件格式:.zip
开发语言:C/C++
更新时间:2019-05-12
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 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