mul_unsign_16.c
来自「P18F4610的有符号16*16运算C结合汇编.很好的学习例子.MCC18编译」· C语言 代码 · 共 58 行
C
58 行
#include <p18f4610.h>
#include "mul.h"
void main()
{
int a;
unsigned long temp_u;
signed long temp_s;
temp_u=mul_unsign_16(360,360);
}
//***********16位无符号乘法********************
//入口参数为unsigned int nmb1_s和unsigned int nmb2_s.
//入口参数的取值范围[0,65535]
//带一个返回值(MUL_RESULT全局变量),值为乘法的积。
//积的范围[0,4294836225]
//*********************************************
unsigned long int mul_unsign_16(unsigned int nmb1_u,unsigned int nmb2_u)
{
SULTOR.SULTOR_U=nmb1_u;
SULND.SULND_U=nmb2_u;
_asm
MOVF 0x008,0,0
MULWF 0x00a,0
MOVFF PRODH,0X005
MOVFF PRODL,0X004
MOVF 0x00b,0,0
MULWF 0x009,0
MOVFF PRODH,0X007
MOVFF PRODL,0X006
MOVF 0x008,0,0
MULWF 0x00b,0
MOVF PRODL,0,0
ADDWF 0X005,1,0
MOVF PRODH,0,0
ADDWFC 0X006,1,0//06单元内容+乘积(008单元内容*00b单元内容)的高位+(005单元到006单元的)进位
CLRF 0X0FE8,0 //清W寄存器
ADDWFC 0X007,1,0 //(006单元到007单元的)进位
MOVF 0x009,0,0
MULWF 0x00a,0
MOVF PRODL,0,0
ADDWF 0X005,1,0
MOVF PRODH,0,0
ADDWFC 0X006,1,0//06单元内容+乘积(009单元内容*00a单元内容)的高位+(005单元到006单元的)进位
CLRF 0X0FE8,0 //清W寄存器
ADDWFC 0X007,1,0//(006单元到007单元的)进位
_endasm
return MUL_RESULT;
}
//16位无符号乘法计算E
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?