汇编语言 ARM CORTEX4 求闰年

首先要用求倍数的函数 is_Multi(int a,int b)

有了这个函数的前提下,就能对闰年的成立条件进行判断。

一年是闰年的条件:
能被4整除且不能被100整除;(普通闰年)
或能被400整除(世纪闰年)

在已知这两个条件后,概念就很清晰了:
给出一个年份--->R0
将400,4,100分配给寄存器R1,R2,R3
分别用is_Multi函数对R0和R1,R2,R3进行比较。

思路如下:
1.is_Multi是判断第一个参数是否是第二个参数的倍数的函数,若是,则R0<--1,反之R0<--(0
2.若该年份能被400整除,即为400的倍数,则是闰年,跳出求闰年的函数。
3.若该年份不能被400整除,则继续判断:
若不能被4整除,则不是闰年,退出求闰年的函数;
若能被4整除,则继续判断,是否能被100整除,是,则不是闰年,反之则是闰年。
4.结果保存在寄存器R0中,是闰年则寄存器R0结果为1,不是则为0。

点击查看代码
is_LeapYear PROC ;判断闰年函数,是闰年输出1,平年输出0
	PUSH {R1-R12,LR}
	MOV R1,#400
	MOV R2,#4
	MOV R3,#100
	MOV R4,R0 ;由于is_Multi会改变R0结果,所以要把年份存储到R4
	;先判断是否能被400整除
	BL is_Multi
	;返回R0结果
	TEQ R0,#1
	;若R0不为1,则不能被400整除,测试是否能被4整除
	BEQ back;若R0为1,则能被400整除,直接跳出
	MOVNE R1,R2
	MOVNE R0,R4
	BL is_Multi;只有R0不为1才继续比较
	;返回R0结果
	TEQ R0,#1
	;不能被4整除,R0=0;若能被4整除R0=1,再判断是否能被100整除
	BNE back ;不能被4整除,R0=0,直接跳出
	MOVEQ R1,R3
	MOVEQ R0,R4
	BL is_Multi ;只有R0为1时才继续比较,即可以被4整除时看能不能被100整除
	;返回R0结果
	TEQ R0,#1
	MOVEQ R0,#0 ;若能被100整除,R0<--0,不是闰年;
	MOVNE R0,#1;不能被100整除,但能被4整除,R0<--1,是闰年
	POP{R1-R12,PC}
	ENDP
back
	POP{R1-R12,PC};自动返回
		
posted @ 2022-03-03 18:38  DanielTian  阅读(186)  评论(0)    收藏  举报