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 + -
显示快捷键?