⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 被除数远小于除数的除法.txt

📁 是我在电子竞赛期间写的一些单片机汇编程序
💻 TXT
字号:
;;;;;;;;;;;;;;;;;;;;;除法,适用于被除数远小于除数,可算出小数部分;;;;;;;;;;;;;;;;;;;;;
;--------------------------商存在r3,r2,r3为低位,r5存小数点位置  r7,存第二位有效数字---
 
	divdll   data    20h     ;定义被除数单元
	divdlh   data    21h
	divdhl   data    22h	 ;存放低位少时的临时空间
	divdhh   data    23h
	divl     data    24h     ;定义除数单元
	divh     data    25h
	templ    data    26h     ;定义余数单元
	temph    data    27h
	decimal  data    28h	 ;定义小数点的位置
	quit     data    29h
	result_0 data    30h
	result_1 data    31h
	
	mov  quit,#1
	mov  divdll,#3h	 	;低位
	mov  divdlh,#0		
	mov  divl,#45h		;低位
	mov  divh,#0

ag_judge:
	mov  a,divdlh
	jnz  divd
	mov  a,divdll		;计算小数点后面一位
	subb a,divl
	jnc  divd
	mov  a,quit
	cjne a,#1,out_1
	inc  decimal
out_1:	mov r3,divdll
	mov r7,#10
	acall mul_10
	mov divdll,r5
	mov divdlh,r4
	ajmp ag_judge



divd:   push   acc
        push   b
    	mov    a,divh    	;判除数是否为零
    	orl    a,divl
    	jnz    divd0
    	setb    ov        	;除数为零,置溢出标志
    	pop    b
    	pop    acc
    	ret
divd0:  mov    templ,#00h    	;除数不为零,进行运算
    	mov    temph,#00h
    	mov    b,#20h        	;置循环次数
divd1:	clr    c            	;进位位、余数单元和
    	mov    a,divdll        	;被除数单元全体逐个
    	rlc    a            	;向左循环移位
    	mov    divdll,a
    	mov    a,divdlh
    	rlc    a
    	mov    divdlh,a
    	mov    a,divdhl
    	rlc    a
    	mov    divdhl,a
    	mov    a,divdhh
    	rlc    a
	mov    divdhh,a
	mov    a,templ
	rlc    a
	mov    templ,a
	xch    a,temph
	rlc    a
	xch    a,temph
	mov    f0,c            	;保存进位位
	clr    c
	subb    a,divl        	;用余数减去除数
	mov    r7,a
	mov    a,temph
	subb    a,divh
	anl    c,/f0            ;判断是否够减
	jc    divd2        	;不够减,移下一位
	mov    templ,r7        	;够减,刷新余数单元
	mov    temph,a
	inc    divdll        	;商上1
divd2:  djnz    b,divd1
    	clr    ov
	pop    b
    	pop    acc

	mov a,quit
	jz  wei_2
	mov r3, divdll		;存商低位
	mov result_0,divdll
	mov r2, divdlh
	mov r0,templ		;存余数低位
	mov r1,temph
	mov result_1,divdll
	dec  quit
	mov  a,r0
	mov  b,r1
	orl  a,b
	jz   ee1

	mov  divdll,r0
	mov  divdlh,r1
	ajmp ag_judge
wei_2:	
	mov r5,decimal
	mov r3,result_1
	mov r7,divdll		;存第二个有效数字
ee1:	jmp $

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;乘法运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
mul_10:
MULD: 	MOV A,R3 
	MOV B,R7
	MUL AB
	MOV R4,B ;  
	MOV R5,A
	MOV A,R3 ;患扑鉘3乘R6
	MOV B,R6
	MUL AB
	ADD A,R4 ;焕奂硬糠只?
	MOV R4,A
	CLR A
	ADDC A,B
	MOV R3,A
	MOV A,R2 ;患扑鉘2乘R7
	MOV B,R7
	MUL AB
	ADD A,R4 ;焕奂硬糠只?
	MOV R4,A
	MOV A,R3
	ADDC A,B
	MOV R3,A
	CLR A
	RLC A
	XCH A,R2 ;患扑鉘2乘R6
	MOV B,R6
	MUL AB
	ADD A,R3 ;焕奂硬糠只?
	MOV R3,A
	MOV A,R2
	ADDC A,B
	MOV R2,A
	ret


	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -