;The Num of Instruction(Size):65. The Max Address(Begin with 0):64 

                MCU  ES7P169C

A    equ    0
R    equ    1
HRAM_0X0  equ  0X0
HRAM_0X1  equ  0X1
HRAM_0X2  equ  0X2
HRAM_0X3  equ  0X3
HRAM_0X83  equ  0X83
HRAM_0X84  equ  0X84

                ORG             0X00
HADR_0X0:
:0X0  c703f000                  AJMP            HADR_0X3
                                ORG             0X2
:0X2  6800                      GOTO            HADR_0X0
HADR_0X3:
;
;/**********************************************
;函数名：void main(void)
;描  述：主函数，SET_MULA、SET_MULB设置乘数A、乘数B的值，头文件已包含宏定义和声明，product存储乘积值。
;输入值：无
;输出值：无
;返回值：无
;**********************************************/
;void main(void) 
;{
;    RAMclear();
:0X3  e783                      CLR             HRAM_0X83
:0X4  ec00                      PAGE            (_RAMclear)>>11
:0X5  6023                      CALL            HADR_0X23
:0X6  ec00                      PAGE            (_0)>>11
;    GPIOInit();
:0X7  ec00                      PAGE            (_GPIOInit)>>11
:0X8  6035                      CALL            HADR_0X35
:0X9  ec00                      PAGE            (_1)>>11
;
;	SET_MULA(MULA_DATA);
:0Xa  e5fe                      MOVI            0XFE
:0Xb  e600                      MOVA            (MUL_TEMP)&7f                         ;(MUL_TEMP)&7f: Bank 0    Addr: 0     
:0Xc  5000                      MOV             (MUL_TEMP)&7f,  A                     ;(MUL_TEMP)&7f: Bank 0    Addr: 0     
:0Xd  e688                      MOVA            _MULA_0                               ;_MULA_0: Bank 511    Addr: 65416    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;	SET_MULB(MULB_DATA);
:0Xe  e5dc                      MOVI            0XDC
:0Xf  e601                      MOVA            (MUL_TEMP+1)&7f                       ;(MUL_TEMP+1)&7f: Bank 0    Addr: 1     
:0X10  5001                     MOV             (MUL_TEMP+1)&7f,                A    ;(MUL_TEMP+1)&7f: Bank 0    Addr: 1     
:0X11  e689                     MOVA            _MULB_0                              ;_MULB_0: Bank 511    Addr: 65417    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;
;    product = (MULH << 8) | MULL;
:0X12  ea01                     SECTION         0X1
:0X13  e701                     CLR             HRAM_0X1
:0X14  5089                     MOV             _MULH_0,        A                    ;_MULH_0: Bank 511    Addr: 65417    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X15  e600                     MOVA            HRAM_0X0
:0X16  5000                     MOV             HRAM_0X0,       A
:0X17  e603                     MOVA            HRAM_0X3
:0X18  e702                     CLR             HRAM_0X2
:0X19  e701                     CLR             HRAM_0X1
:0X1a  5088                     MOV             _MULL_0,        A                    ;_MULL_0: Bank 511    Addr: 65416    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X1b  e600                     MOVA            HRAM_0X0
:0X1c  5000                     MOV             HRAM_0X0,       A
:0X1d  5802                     IOR             HRAM_0X2,       A
:0X1e  e604                     MOVA            (_product)&7f                        ;(_product)&7f: Bank 0    Addr: 4     
:0X1f  5001                     MOV             HRAM_0X1,       A
:0X20  5803                     IOR             HRAM_0X3,       A
:0X21  e605                     MOVA            (_product+1)&7f                      ;(_product+1)&7f: Bank 0    Addr: 5     
HADR_0X22:
;
;    while(1);
:0X22  6822                     GOTO            HADR_0X22
HADR_0X23:
;/*********************************************************
;*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)
;{
;    for (IAAH=0; IAAH<=0x03; IAAH++)
:0X23  e783                     CLR             HRAM_0X83
:0X24  e782                     CLR             _IAAH_0                              ;_IAAH_0: Bank 511    Addr: 65410    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
HADR_0X25:
:0X25  5082                     MOV             _IAAH_0,        A                    ;_IAAH_0: Bank 511    Addr: 65410    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X26  ce03                     SUBI            0X3
:0X27  9084                     JBS             HRAM_0X84,      0
:0X28  6834                     GOTO            HADR_0X34
;    {
;        for (IAAL=0; IAAL<0xFF; IAAL++)
:0X29  e781                     CLR             _IAAL_0                              ;_IAAL_0: Bank 511    Addr: 65409    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
HADR_0X2A:
:0X2a  e5ff                     MOVI            0XFF
:0X2b  ee81                     SUB             _IAAL_0,        A                    ;_IAAL_0: Bank 511    Addr: 65409    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X2c  9884                     JBC             HRAM_0X84,      0
:0X2d  6831                     GOTO            HADR_0X31
;            IAD = 0x00;
:0X2e  e780                     CLR             _IAD_0                               ;_IAD_0: Bank 511    Addr: 65408    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X2f  5581                     INC             _IAAL_0,        R                    ;_IAAL_0: Bank 511    Addr: 65409    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X30  682a                     GOTO            HADR_0X2A
HADR_0X31:
;        IAD = 0x00;
:0X31  e780                     CLR             _IAD_0                               ;_IAD_0: Bank 511    Addr: 65408    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
:0X32  5582                     INC             _IAAH_0,        R                    ;_IAAH_0: Bank 511    Addr: 65410    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    }
:0X33  6825                     GOTO            HADR_0X25
HADR_0X34:
;}
:0X34  c183                     RET
HADR_0X35:
;
;/******************************************************
;函数名：void GPIOInit(void)
;描  述：首先初始化所有未用到的IO口为输出低电平
;输入值：无
;输出值：无
;返回值：无
;*******************************************************/
;void GPIOInit(void)
;{
;    ANSL = 0xFF;        //选择对应端口为数字IO功能
:0X35  e783                     CLR             HRAM_0X83
:0X36  e5ff                     MOVI            0XFF
:0X37  e6bc                     MOVA            _ANSL_0                              ;_ANSL_0: Bank 511    Addr: 65468    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;	ANSH = 0xFF;
:0X38  e5ff                     MOVI            0XFF
:0X39  e68d                     MOVA            _ANSH_0                              ;_ANSH_0: Bank 511    Addr: 65421    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    PAT = 0x00;         //所有IO设为输出低电平
:0X3a  e7ad                     CLR             _PAT_0                               ;_PAT_0: Bank 511    Addr: 65453    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    PBT = 0x00;
:0X3b  e7ae                     CLR             _PBT_0                               ;_PBT_0: Bank 511    Addr: 65454    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    PCT = 0x00;
:0X3c  e7af                     CLR             _PCT_0                               ;_PCT_0: Bank 511    Addr: 65455    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    PA = 0x00;
:0X3d  e7a8                     CLR             _PA_0                                ;_PA_0: Bank 511    Addr: 65448    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    PB = 0x00;
:0X3e  e7a9                     CLR             _PB_0                                ;_PB_0: Bank 511    Addr: 65449    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;    PC = 0x00;
:0X3f  e7aa                     CLR             _PC_0                                ;_PC_0: Bank 511    Addr: 65450    C:\Users\lisq\Desktop\AN135_Examples_ES7P169C\MUL\multiplication\debug\multiplication.obj 
;}
:0X40  c183                     RET

                                END
