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

📄 8位1024到2000映射.txt

📁 用汇编语言写的
💻 TXT
字号:
;////////////////////////////////////////////////////////////////
;功能:实现2个16位数的乘法,结果仍然位16位数
;运算结果放到 R6(高), R7(低) 中
;基本思想:将除法转换为乘法和右移运算
;例如:将0~1024,映射到0~2000。
;首先,2000/1024 = 1.953125。即:1024*(1 + 9531*10000次方) 10000大约等于2的13次方JIEGUO_YOUYI	EQU	#0DH
;JIEGUO:最终结果	YUANSHU:需要转换的数	SHANG:上式整数部分	YUSHU:上式小数部分	JIEGUO_YOUYI:参考上式
;JIEGUO == YUANSHU * SHANG + (YUANSHU * YUSHU) >> JIEGUO_YOUYI
;/////////////////////////////////////////////////////////////////

;预先设定部分
YUANSHU_LOW	EQU	#FFH
YUANSHU_HIGH	EQU	#03H
SHANG		EQU	#03H
YUSHU_LOW	EQU	#3BH
YUSHU_HIGH	EQU	#25H
JIEGUO_YOUYI	EQU	#0DH



;功能:实现JIEGUO == YUANSHU * SHANG + (YUANSHU * YUSHU) >> JIEGUO_YOUYI 结果放R2R3
;入口参数:参见开始说明
CONVERT:
	MOV R2, YUANSHU_LOW	;计算 (YUANSHU * YUSHU)
	MOV R3, YUANSHU_HIGH
	MOV R4, YUSHU_LOW
	MOV R5, YUSHU_HIGH
	LCALL MUL_16b
	
	MOV R7, JIEGUO_YOUYI 	;计算(YUANSHU * YUSHU) >> JIEGUO_YOUYI	
	LCALL LRRC_16b
	PUSH R2
	PUSH R3

	MOV R2, YUANSHU_LOW	;计算 (YUANSHU * SHANG)
	MOV R3, YUANSHU_HIGH
	MOV R4, SHANG
	MOV R5, #00H
	LCALL MUL_16b

	POP R5			;计算  YUANSHU * SHANG + (YUANSHU * YUSHU) >> JIEGUO_YOUYI 
	POP R4
	LCALL ADD_16b

	   RET

;功能: (R2R3) * (R4R5) R2R4放低8位,R3R5放高8位, 结果放R2R3R4R5(从低到高)  
;入口参数:R2 R3 R4 R5
MUL_16b:
	MOV A, R2
	MOV B, R4
	MUL AB
	PUSH A		;低8位入栈保存,最终结果的低8位
	
	MOV R6, B	; 高八位存R6
	MOV A, R4
	MOV B, R3
	MUL AB		;R3 * R4
	ADD A, R6
	MOV R6, A
	MOV R7, B

	MOV A, R5	
	MOV B, R2
	MUL AB		;R5 * R2
	ADDC A, R6	

	POP R2		;R2存低八位
	MOV R3, A	;R2R3放低16位

	MOV A, R7
	ADDC A, B	;16~24位,防止8~16进位
	MOV R7, A	;缓存A
	
	MOV A, R3
	MOV B, R5
	MUL AB
	ADDC A, R7
	MOV R4, A	;16~24位存R4
	
	MOV A, B
	ADDC A, #00H	;防止16~24进位
	MOV R5, A	;存24~32位

	  RET


;功能: (R2R3) + (R4R5) 结果放R2R3  R2R4放低8位,R3R5放高8位
;入口参数:R2 R3 R4 R5
ADD_16b:
	MOV A, R2
	ADD A, R4
	MOV R2, A

	MOV A, R3
	ADDC A, R5	;要加上低八位的进位
	MOV R3, A

	  RET

;功能: (R2R3R4R5)>>R7 结果放R2R3  R2放低8位,R3放高8位
;入口参数:R2 R3 R4 R5 R7
LRRC_32b:
	MOV R6, R4	;此处R4肯定大于0,因为小数部分肯定不止一位
   LOOP:
	CLR C		;进位位清0

	RRC  R5		;R2低位放C
	RRC  R4		;R3的高位放C
	RRC  R3
	RRC  R2

	DJNZ R6, LOOP
 
	  RET

⌨️ 快捷键说明

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