; Asm codes generated by Shanghai Haier C Compiler
; HRCO, Ver: 1.0,0131

#INCLUDE       	<ES7P169C.INC>
#INCLUDE       	<OPERATION.INC>
	EXTERN         	MUL_TEMP
	EXTERN         	MUL_TEMP
	PUBLIC         	_product
	PUBLIC         	_RAMclear
	PUBLIC         	_GPIOInit
	PUBLIC         	_main
_main_#T20443_7	EQU            	_mainDATA + 0X0		; Bank 0
_main_#T20444_7	EQU            	_mainDATA + 0X2		; Bank 0
_main_#T20447_7	EQU            	_mainDATA + 0X0		; Bank 0
#TMP	EQU            	?_TMP+ 0X0		; Bank 0
?_TMP_RET	EQU            	?_TMP		; Bank 0
_MULA_0#sh	EQU            	(MULA - 0X6080) % 0X40 + 0xC0		; Bank 0
_MULB_0#sh	EQU            	(MULB - 0X6080) % 0X40 + 0xC0		; Bank 0
_MULL_0#sh	EQU            	(MULL - 0X6080) % 0X40 + 0xC0		; Bank 0
_MULH_0#sh	EQU            	(MULH - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVEL_0#sh	EQU            	(DIVEL - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVEM_0#sh	EQU            	(DIVEM - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVSL_0#sh	EQU            	(DIVSL - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVSH_0#sh	EQU            	(DIVSH - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVQL_0#sh	EQU            	(DIVQL - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVQM_0#sh	EQU            	(DIVQM - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVRL_0#sh	EQU            	(DIVRL - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVRH_0#sh	EQU            	(DIVRH - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVC_0#sh	EQU            	(DIVC - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVEU_0#sh	EQU            	(DIVEU - 0X6080) % 0X40 + 0xC0		; Bank 0
_DIVEH_0#sh	EQU            	(DIVEH - 0X6080) % 0X40 + 0xC0		; Bank 0
_FRAH_0#sh	EQU            	(FRAH - 0X6080) % 0X40 + 0xC0		; Bank 0
_FRAL_0#sh	EQU            	(FRAL - 0X6080) % 0X40 + 0xC0		; Bank 0
	_DESC          	RAMclear,0X0,0X0
RAMclear#	CSEG           
_RAMclear
; /*********************************************************
; *Copyright (C), 2020, Shanghai Eastsoft Microelectronics Co., Ltd
; *文件名:  multiplication.c
; *作  者:  AE Team
; *版  本:  v1.0，编译于iDesigner(v4.2.3.166) + 工具链HRCC(v1.2.0.118)
; *日  期:  2020/12/28
; *描  述:  硬件乘法器例程
;           宏定义MULA_DATA：乘数A
;           宏定义MULB_DATA：乘数B
; 		  变量product：乘积
;           注意：中断服务程序可能会改变乘数寄存器MULA和MULB，最终导致乘积错误，有二种方式来规避这种风险。
;           方式一：使用硬件乘法器之前，禁止全局中断使能（GIE=0，操作前先判断当前GIE状态）；
; 		          乘法运算完成后，将乘积读出，再恢复全局中断使能（GIE=1）。
;           方式二：先将乘数和被乘数备份在特定的变量中。这样，编译器会在中断服务程序中自动备份和恢复乘数寄存器。
; 		  本例程展示方式二，为方便使用，请使用v1.2.0.113及以上版本的工具链，其头文件包含必要的变量声明和宏定义。
; *备  注:  本软件仅供学习和演示使用，对用户直接引用代码所带来的风险或后果不承担任何法律责任。
; **********************************************************/
; #include <hic.h>
; #define CLRWDT()   {__Asm CWDT;}        //宏定义清狗指令
; #define uchar unsigned char
; #define uint unsigned int
; #define MULA_DATA 0xFE  //乘数A
; #define MULB_DATA 0xDC  //乘数B
; uint product;     //乘积变量
; /******************************************************
; 函数名：void RAMclear(void)
; 描  述：RAM区数据清零，RAM区地址0x0000~0x03FF
; 输入值：无
; 输出值：无
; 返回值：无
; *******************************************************/
; void RAMclear(void)
; {
#line 39	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     for (IAAH=0; IAAH<=0x03; IAAH++)
	CLR            	BKSR
;   39:(    ASGN_1,          0 ,            ,      IAAH)

; ITemplate_CLR1_4_TMP
	CLR            	_IAAH_0
;   39:(     LABEL,    #L20272 ,            ,          )

; ITemplate_LABEL
#L20272
;   39:(    JGT_1U,       IAAH ,          3 ,   #L20349)

; ITemplate_JGT1_4U
	MOV            	_IAAH_0,	0x0
	SUBI           	0x3
	JBS            	PSW,	0x0
	GOTO           	#L20349
;     {
#line 41	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;         for (IAAL=0; IAAL<0xFF; IAAL++)
;   41:(    ASGN_1,          0 ,            ,      IAAL)

; ITemplate_CLR1_4_TMP
	CLR            	_IAAL_0
;   41:(     LABEL,    #L20289 ,            ,          )

; ITemplate_LABEL
#L20289
;   41:(    JGE_1U,       IAAL ,        255 ,   #L20290)

; ITemplate_JGE1_4U
	MOVI           	0xff
	SUB            	_IAAL_0,	0x0
	JBC            	PSW,	0x0
	GOTO           	#L20290
#line 42	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;             IAD = 0x00;
;   42:(    ASGN_1,          0 ,            ,       IAD)

; ITemplate_CLR1_4_TMP
	CLR            	_IAD_0
;   41:(     ADD_1,       IAAL ,          1 ,      IAAL)

; ITemplate_INC_1_TMP
	INC            	_IAAL_0
;   42:(       JMP,            ,            ,   #L20289)

; ITemplate_JMP
	GOTO           	#L20289
;   42:(     LABEL,    #L20290 ,            ,          )

; ITemplate_LABEL
#L20290
#line 43	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;         IAD = 0x00;
;   43:(    ASGN_1,          0 ,            ,       IAD)

; ITemplate_CLR1_4_TMP
	CLR            	_IAD_0
;   39:(     ADD_1,       IAAH ,          1 ,      IAAH)

; ITemplate_INC_1_TMP
	INC            	_IAAH_0
#line 44	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     }
;   44:(       JMP,            ,            ,   #L20272)

; ITemplate_JMP
	GOTO           	#L20272
#line 45	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ; }
;   45:(     LABEL,    #L20349 ,            ,          )

; ITemplate_LABEL
#L20349
;   45:(       RET,            ,            ,          )

; ITemplate_RET
	RET            			; Bank 0		; ShBank 0
	_DESC          	GPIOInit,0X0,0X0
GPIOInit#	CSEG           
_GPIOInit
; /******************************************************
; 函数名：void GPIOInit(void)
; 描  述：首先初始化所有未用到的IO口为输出低电平
; 输入值：无
; 输出值：无
; 返回值：无
; *******************************************************/
; void GPIOInit(void)
; {
#line 56	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     ANSL = 0xFF;        //选择对应端口为数字IO功能
	CLR            	BKSR
;   56:(    ASGN_1,        255 ,            ,      ANSL)

; ITemplate_ASGN1_4_R
	MOVI           	0xff
	MOVA           	_ANSL_0
#line 57	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ; 	ANSH = 0xFF;
;   57:(    ASGN_1,        255 ,            ,      ANSH)

; ITemplate_ASGN1_4_R
	MOVI           	0xff
	MOVA           	_ANSH_0
#line 58	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     PAT = 0x00;         //所有IO设为输出低电平
;   58:(    ASGN_1,          0 ,            ,       PAT)

; ITemplate_CLR1_4_TMP
	CLR            	_PAT_0
#line 59	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     PBT = 0x00;
;   59:(    ASGN_1,          0 ,            ,       PBT)

; ITemplate_CLR1_4_TMP
	CLR            	_PBT_0
#line 60	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     PCT = 0x00;
;   60:(    ASGN_1,          0 ,            ,       PCT)

; ITemplate_CLR1_4_TMP
	CLR            	_PCT_0
#line 61	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     PA = 0x00;
;   61:(    ASGN_1,          0 ,            ,        PA)

; ITemplate_CLR1_4_TMP
	CLR            	_PA_0
#line 62	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     PB = 0x00;
;   62:(    ASGN_1,          0 ,            ,        PB)

; ITemplate_CLR1_4_TMP
	CLR            	_PB_0
#line 63	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     PC = 0x00;
;   63:(    ASGN_1,          0 ,            ,        PC)

; ITemplate_CLR1_4_TMP
	CLR            	_PC_0
#line 64	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ; }
;   64:(       RET,            ,            ,          )

; ITemplate_RET
	RET            			; Bank 0		; ShBank 0
	_DESC          	main,0X0,0X0,RAMclear,GPIOInit

SECTION1main	UNINTIAL       	0		; Bank 0
	ORG            	0X80		; Bank 0
_mainDATA	RSEG           	0X4		; Bank 0
main#	CSEG           
_main
; /**********************************************
; 函数名：void main(void)
; 描  述：主函数，SET_MULA、SET_MULB设置乘数A、乘数B的值，头文件已包含宏定义和声明，product存储乘积值。
; 输入值：无
; 输出值：无
; 返回值：无
; **********************************************/
; void main(void) 
; {
#line 75	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     RAMclear();
	CLR            	BKSR
;   75:(      CALL, (RAMclear.0) ,            ,          )

; ITemplate_CALL
	SEGMENTSEL     	_RAMclear
	CALL           	_RAMclear		; Bank 0		; ShBank 0
	SEGMENTSEL     	$
#line 76	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     GPIOInit();
;   76:(      CALL, (GPIOInit.0) ,            ,          )

; ITemplate_CALL
	SEGMENTSEL     	_GPIOInit
	CALL           	_GPIOInit		; Bank 0		; ShBank 0
	SEGMENTSEL     	$
#line 78	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ; 	SET_MULA(MULA_DATA);
;   78:(    ASGN_1,        254 ,            ,  __MULA__)

; ITemplate_ASGN1_4_R
	MOVI           	0xfe
	MOVA           	(MUL_TEMP) & 0X7F		; Bank 0
;   78:(    ASGN_1,   __MULA__ ,            ,      MULA)

; ITemplate_ASGN1_4_R
	MOV            	(MUL_TEMP) & 0X7F,	0x0		; Bank 0
	MOVA           	_MULA_0
#line 79	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ; 	SET_MULB(MULB_DATA);
;   79:(    ASGN_1,        220 ,            ,  __MULB__)

; ITemplate_ASGN1_4_R
	MOVI           	0xdc
	MOVA           	(MUL_TEMP + 1) & 0X7F		; Bank 0
;   79:(    ASGN_1,   __MULB__ ,            ,      MULB)

; ITemplate_ASGN1_4_R
	MOV            	(MUL_TEMP + 1) & 0X7F,	0x0		; Bank 0
	MOVA           	_MULB_0
#line 81	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     product = (MULH << 8) | MULL;
;   81:(   CVUC_SI,       MULH ,            ,   #T20443)

; ITemplate_CVTMS_U
	SECTION        	0x1
	CLR            	(_main_#T20443_7+0x1) & 0X7F		; Bank 1
	MOV            	_MULH_0,	0x0
	MOVA           	(_main_#T20443_7) & 0X7F		; Bank 1
;   81:(    LSH_2S,    #T20443 ,          8 ,   #T20444)

; ITemplate_LSH1_4_8
	MOV            	(_main_#T20443_7) & 0X7F,	0x0		; Bank 1
	MOVA           	(_main_#T20444_7+0x1) & 0X7F		; Bank 1
	CLR            	(_main_#T20444_7) & 0X7F		; Bank 1
;   81:(   CVUC_SI,       MULL ,            ,   #T20447)

; ITemplate_CVTMS_U
	CLR            	(_main_#T20447_7+0x1) & 0X7F		; Bank 1
	MOV            	_MULL_0,	0x0
	MOVA           	(_main_#T20447_7) & 0X7F		; Bank 1
;   81:(     BOR_2,    #T20444 ,    #T20447 ,   product)

; ITemplate_BOR1_4
	MOV            	(_main_#T20447_7) & 0X7F,	0x0		; Bank 1
	IOR            	(_main_#T20444_7) & 0X7F,	0x0		; Bank 1
	MOVA           	(_product) & 0X7F		; Bank 1
	MOV            	(_main_#T20447_7+0x1) & 0X7F,	0x0		; Bank 1
	IOR            	(_main_#T20444_7+0x1) & 0X7F,	0x0		; Bank 1
	MOVA           	(_product+0x1) & 0X7F		; Bank 1
#line 83	C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\multiplication.c ;     while(1);
;   83:(     LABEL,    #L20449 ,            ,          )

; ITemplate_LABEL
#L20449
;   83:(       JMP,            ,            ,   #L20449)

; ITemplate_JMP
	GOTO           	#L20449

SECTION1C__Users_lisq_Desktop_AN135_Examples_ES7P169C_MUL_multiplication_multiplication_c_STATIC	UNINTIAL       	0		; Bank 0
	ORG            	0X84		; Bank 0
_product	RSEG           	0X2		; Bank 0

SECTION8D__Program_Files__x86__HRCC_Tools_HRCC_v1_2_0_118_tools_INCLUDE_ES7P169C_h_STATIC	UNINTIAL       	0		; Bank 0
	ORG            	0XFF80		; Bank 0
_IAD_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF81		; Bank 0
_IAAL_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF82		; Bank 0
_IAAH_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF88		; Bank 0
_MULA_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF88		; Bank 0
_MULL_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF89		; Bank 0
_MULB_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF89		; Bank 0
_MULH_0	RSEG           	0X1		; Bank 0
	ORG            	0XFF8D		; Bank 0
_ANSH_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFA8		; Bank 0
_PA_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFA9		; Bank 0
_PB_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFAA		; Bank 0
_PC_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFAD		; Bank 0
_PAT_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFAE		; Bank 0
_PBT_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFAF		; Bank 0
_PCT_0	RSEG           	0X1		; Bank 0
	ORG            	0XFFBC		; Bank 0
_ANSL_0	RSEG           	0X1		; Bank 0
	END
