汇编取模运算

下面以芯海的CSU18M系列单片机的汇编为例,实现取模函数



;==================================================================
;取模运算
;输入:R_Math_A0:3  被模数
;输入:R_Math_C0:3  模数
;输出:R_Math_A0:3  计算结果
;================================================================== 
F_Math_Modulo:     
	movfw	R_Math_C0
	iorwf	R_Math_C1,W
	iorwf	R_Math_C2,W
	iorwf	R_Math_C3,W
	btfss	STATUS,Z					;判断是否模数为0
	goto	L_Math_ModuloLoop1			;否
										;是
	clrf	R_Math_A0
	clrf	R_Math_A1
	clrf	R_Math_A2
	clrf	R_Math_A3					;返回结果清0
	retlw	0							;返回失败

L_Math_ModuloLoop1:
	clrf	R_Math_Temp
	bcf		STATUS,C

L_Math_ModuloLoop2:
	incf	R_Math_Temp,F
	
	rlf		R_Math_C0,F
	rlf		R_Math_C1,F
	rlf		R_Math_C2,F
	rlf		R_Math_C3,F
	btfss	STATUS,C
	goto	L_Math_ModuloLoop2

L_Math_ModuloLoop4:
	rrf		R_Math_C3,F
	rrf		R_Math_C2,F
	rrf		R_Math_C1,F
	rrf		R_Math_C0,F
	
	movfw	R_Math_C0
	subwf	R_Math_A0,W
	movfw	R_Math_C1
	subwfc	R_Math_A1,W
	movfw	R_Math_C2
	subwfc	R_Math_A2,W
	movfw	R_Math_C3
	subwfc	R_Math_A3,W
	btfss	STATUS,C
	goto	L_Math_ModuloLoop3
	movwf	R_Math_A3
	movfw	R_Math_C0
	subwf	R_Math_A0,F
	movfw	R_Math_C1
	subwfc	R_Math_A1,F
	movfw	R_Math_C2
	subwfc	R_Math_A2,F

L_Math_ModuloLoop3:
	bcf		STATUS,C
	decfsz	R_Math_Temp,F
	goto	L_Math_ModuloLoop4
	
	retlw	1							;返回成功

其它:

如果b是2的幂,a % b 可以简化为 a & (b - 1)。    a = 任意数        b = 2^0、2^1、2^2、2^n ....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dear_Wally

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值