汇编语言 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};自动返回

浙公网安备 33010602011771号