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

📄 汇编除法有小数.txt

📁 是我在电子竞赛期间写的一些单片机汇编程序
💻 TXT
字号:
;----------------------------单字节除法运算,约到小数点后面两位小数-----------------------
;--------------------------------------------------------------------------------------
;-------------------------入口条件:被除数在R7,除数在R6,商在R1,小数在R0-------------------
;--------------------------------------------------------------------------------------
 	quotient equ 70h
	decimal  equ 71h

	org 0000h
	ajmp main
	org 0030h
main:	mov sp,#3fh
	mov r7,#100				;十进制为96	1100000b
	mov r6,#35 				;十进制为65   	1000001b
	clr a
	mov r1,a				;存商   应为1
	mov r0,a				;存小数 应为48
	mov a,r7
	mov b,r6
	div ab
	mov quotient,a				;存商1
;;;;;;;;;;;;;;;;;;;;;计算小数部分;;;;;;;;;;;;;;;;;;;;;;
	mov r2,#0				;高位
	mov r3,#10
	mov r6,#0				;高位
	mov r7,#100
	acall mul_10				;此时R2=R3=0,R4=03,R5=C0,3C0=960;扩大了十倍.


	mov r6,#0
	mov r7,#35
	acall div_1
	mov r1,quotient
	acall htod
	anl a,#0fh
	mov r0,a
	sjmp $


;;;;;;;;;;;;;;;;;;;;;乘法运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口条件:被乘数在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
;;;;;;;;;;;;;;;;;;;;;;;;;;除法运算;;;;;;;;;;;;;;;;;;;;;;;;;;

;入口条件:被除数在 R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节

div_1:

DIVD:	CLR C ;比较被除数和除数
	MOV A,R3 
	SUBB A,R7
	MOV A,R2
	SUBB A,R6
	jc DVD1
	SETB OV ;溢出
	jmp $
DVD1: 	MOV B,#10H ;计算双字节商
DVD2: 	CLR C ;部分商和余数同时左移一位
	MOV A,R5
	RLC A
	MOV R5,A
	MOV A,R4
	RLC A
	MOV R4,A
	MOV A,R3
	RLC A
	MOV R3,A
	XCH A,R2
	RLC A
	XCH A,R2
	MOV F0,C ;保存溢出位
	CLR C
	SUBB A,R7 ;计算(R2R3-R6R7)
	MOV R1,A
	MOV A,R2
	SUBB A,R6
	ANL C,/F0 ;结果判断
	JC DVD3
	MOV R2,A ;够减,存放新的余数
	MOV A,R1
	MOV R3,A
	INC R5	;商的低位置一
DVD3: 	DJNZ B,DVD2 ;计算完十六位商(R4R5)
	MOV A,R4 ;将商移到R2 R3中
	MOV R2,A
	MOV A,R5
	MOV R3,A
	CLR OV ;设立成功标志
	ret
;;;;;;;;;;;;;;;;;;;;十六进制转十进制;;;;;;;;;;;;;;;;;;;	
;入口条件:待转换的单字节十六进制整数在累加器A中。
;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源:PSW、A、B、R3 堆栈需求: 2字节
htod:
	MOV B,#100 ;分离出百位,存放在R3中
	DIV AB
	MOV R3,A
	MOV A,#10 ; 余数继续分离十位和个位
	XCH A,B
	DIV AB
	SWAP A
	ORL A,B   ; 将十位和个位拼装成BCD码
	RET
	end

⌨️ 快捷键说明

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