CMS汇编比较unsigned int类型的两个数大小,并在其上的延伸

CMS汇编比较unsigned int类型的两个数大小

在项目中需要用到CMS汇编。实现时钟的按键调节。按+键要以10min加,按减键以1min减,范围是00:00-04:00。编写一个子程序来实现,达到这类型的功能通用。
如果要用C来表示如下:

uchar Var_min;  //需要显示的min
uchar Var_hour; //需要显示的hour
void Maink_add_pro(uchar Var_add_value,
				   uchar Var_max_min,
				   uchar Var_max_hour,
				   uchar Var_mini_min,
				   uchar Var_mini_hour)  //需注意Var_add_value不能超过60
{
			if((Var_min+Var_add_value)>=60)
			{	
					Var_min=Var_min+Var_add_value-60;
					Var_hour++;	
			}	
			else
			{
					Var_min=Var_min+Var_add_value;
			}
			
			if(((Var_hour<<8)+Var_min)>(( Var_max_hour<<8)+Var_max_min))
			{
					Var_hour=Var_mini_hour;
					Var_min=Var_mini_min;
			}
			

}

void Maink_dec_pro(uchar Var_dec_value,
				   uchar Var_max_min,
				   uchar Var_max_hour,
				   uchar Var_mini_min,
				   uchar Var_mini_hour) //需注意Var_dec_value不能超过60
{
		if(Var_min>=Var_dec_value)
		{ 
				 Var_min-=Var_dec_value;
		}
		else
		{
				if(Var_hour>0)
				{
						Var_hour--;
						Var_min=Var_min+60-Var_dec_value;
				}
				else
				{
						Var_hour=Var_max_hour;
						Var_min=Var_max_min;
						return;
				}
		}

		if(((Var_hour<<8)+Var_min)<((Var_mini_hour<<8)+Var_mini_min))
		{
				Var_hour=Var_max_hour;
				Var_min=Var_max_min;				
		}

}

改用CMS汇编如下:

VAR1						EQU		?
VAR2						EQU		?
VAR3						EQU		?
VAR4						EQU		?
VAR5						EQU		?
VAR6						EQU		?
VAR7						EQU		?

#define 	VAR_MIN				VAR1
#define		VAR_HOUR			VAR2
#define		VAR_MAX_MIN			VAR3
#define		VAR_MAX_HOUR		VAR4
#define		VAR_MINI_MIN		VAR5
#define   	VAR_MINI_HOUR		VAR6
#define   	VAR_ADD_NUM			VAR7
#define 	VAR_DEC_NUM			VAR7

MAINK_PRO1:
			LD			A,VAR_ADD_NUM
			ADDR		VAR_MIN
			LDIA		.60
			SUBA		VAR_MIN	
			SNZB		FLAGS,C
			JP			MAINK_PRO1_ADD_1
			LD			VAR_MIN	,A
			INCR		VAR_HOUR

MAINK_PRO1_ADD_1:
			LDIA		VAR_MAX_HOUR
			SUBA		VAR_HOUR
			SNZB		FLAGS,C
			JP			MAINK_BAK    			;;<max_hour
			SNZB		FLAGS,Z
			JP			MAINK_PRO1_ADD_2   		;;>max_hour
			LDIA		VAR_MAX_MIN	     		;;==max_hour
			SUBA		VAR_MIN	
			SNZB		FLAGS,C              
			JP			MAINK_BAK  				;;<max_min
			SNZB		FLAGS,Z
			JP			MAINK_PRO1_ADD_2  		;;>max_min			 			
			JP			MAINK_BAK				;;==max_min
			
MAINK_PRO1_ADD_2:
			LD			A,VAR_MINI_MIN
			LD			VAR_MIN,A
			LD			A,VAR_MINI_HOUR
			LD			VAR_HOUR,A
			JP			MAINK_BAK








MAINK_PRO2:
			LD			A,VAR_DEC_NUM
			SUBA		VAR_MIN          
			SNZB		FLAGS,C
			JP			MAINK_PRO2_1     	;;VAR_MIN<VAR_DEC_NUM
			LD			VAR_MIN,A
			JP			MAINK_PRO2_3
						
MAINK_PRO2_1:
			LD		  A,VAR_HOUR
			SZB		  FLAGS,Z
			JP		  MAINK_PRO2_2    	;;VAR_MIN<VAR_DEC_NUM,&&VAR_HOUR==0
			DECR	  VAR_HOUR        	;;VAR_MIN<VAR_DEC_NUM, VAR_HOUR!=0
			LDIA	  .60
			ADDR	  VAR_MIN
			LD		  A,VAR_DEC_NUM
			SUBA	  VAR_MIN
			LD		  VAR_MIN,A      		;;VAR_HOUR-=1
			JP		  MAINK_PRO2_3   		;;60+VAR_MIN-VAR_DEC_NUM   
				
MAINK_PRO2_2:
			LD		  A,VAR_MAX_MIN   
			LD		  VAR_MIN,A
			LD		  A,VAR_MAX_HOUR
			LD		  VAR_HOUR,A				
			JP		  MAINK_BAK	
				

MAINK_PRO2_3:  						    ;;减去VAR_DEC_NUM后与最小值比较大小
			LD		  A,VAR_MINI_HOUR
			SUBA	  VAR_HOUR		
			SNZB	  FLAGS,C
			JP		  MAINK_PRO2_2    ;; VAR_HOUR<VAR_MINI_HOUR 则赋值最大
			SNZB	  FLAGS,Z						
			JP		  MAINK_BAK	      ;; VAR_HOUR>VAR_MINI_HOUR 则不处理
			LD		  A,VAR_MINI_MIN  ;; VAR_HOUR==VAR_MINI_HOUR   VAR_MIN>=VAR_MINI_MIN 不处理
			SUBA	  VAR_MIN		  ;; VAR_HOUR==VAR_MINI_HOUR   VAR_MIN<VAR_MINI_MIN  赋值最大
			SZB		  FLAGS,C			
			JP		  MAINK_BAK				
			JP	      MAINK_PRO2_2


MAINK_BAK:
		RET
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值