stm8l151,c语言混编汇编,实现16位乘除法

#设计原因#

*8位单片机没有16位的乘法和32位的除法,在AD采样数据处理时需要用到

*16位的乘除法需要用到两个16位变量的带c位移位

*C语言操作cpu寄存器很麻烦,嵌入汇编语言更好

*在iar编译环境中如何函数传递数组变量的方式有些特殊

以下代码运行正常,稍微修改一下可以使用。

#include "stm8l15x.h"

int Mul_16Bit(uint16_t,uint16_t,uint16_t * );

int Div_32Bit(uint16_t ,uint16_t,uint16_t,uint16_t * );

uint16_t a1,a2,a3;

uint16_t mul_rs[2];

int main( void )

{

uint16_t x0,x1;

//a1*a2=0x0626 0060

//a2a1/a3=0x0000 8422

a1=0x5678;

a2=0x1234;

a3=0x2345;

while(1){

Mul_16Bit(a1,a2,mul_rs);

x0=mul_rs[0];

x1=mul_rs[1];

Div_32Bit(a2,a1,a3,mul_rs);

x0=mul_rs[0];

x1=mul_rs[1];

}

return 0;

}

//r1*r2=>mul_rs[0]是低16位,mul_rs[1]是高16位

int Mul_16Bit(uint16_t r1,uint16_t r2,uint16_t *mul_r ){

uint16_t x0,x1,y0,y1,z0;

uint8_t i;

x0=0;

x1=0;

y0=r1;

y1=0;

z0=r2;

for(i=0;i<=15;i++){

if(z0&0x1){

x0=x0+y0;

asm("JRNC s0");

x1=x1+1;

asm("s0:");

x1=x1+y1;

}

y1=y1<<1;

y0=y0<<1;

asm("JRNC s1");

y1=y1+1;

asm("s1:");

z0=z0>>1;

}

mul_r[0]=x0;

mul_r[1]=x1;

return 0;

}

//r2r1/r3=>mul_r[0]是低16位,mul_rs[1]是高16位

int Div_32Bit(uint16_t r2,uint16_t r1,uint16_t r3,uint16_t *mul_r ){

uint16_t x0,x1,y1;

uint16_t z;

uint8_t i;

i=0;

x0=0;

x1=r2/r3;//高位商数

y1=r2%r3;//高位余数

if (y1==0){

x0=r1/r3;//低位商数

}

else{

asm("ds1:");

while((y1&0x8000)!=0x8000){

x0=x0<<1;

y1=y1<<1;

r1=r1<<1;

asm("JRNC ds0");

y1=y1+1;

asm("ds0:");

i++;

if(i>15){break;}

}

z=y1/r3;

x0=x0+z;

y1=y1%r3;

if (i<=15){

asm("JP ds1");

}

}

mul_r[0]=x0;

mul_r[1]=x1;

return 0;

}

相关推荐
hj104321 分钟前
php上传企业微信附件的方法
开发语言·php·企业微信
旺仔老馒头.1 小时前
【数据结构与算法】手撕排序算法(二)
c语言·数据结构·算法·排序算法
起予者汝也1 小时前
Python基础入门
开发语言·python
芯联智造2 小时前
【stm32协议外设篇】- SU03T 智能语音模块
c语言·开发语言·stm32·单片机·嵌入式硬件
川石课堂软件测试2 小时前
Python | 高阶函数基本应用及Decorator装饰器
android·开发语言·数据库·python·功能测试·mysql·单元测试
lqqjuly2 小时前
Matlab2025a实现双目相机标定~业余版
开发语言·matlab·相机标定·双目相机
Brianna Home2 小时前
现代C++:从性能泥潭到AI基石
开发语言·c++·算法
2301_796512522 小时前
Rust编程学习 - 自动解引用的用处,如何进行“解引用”(Deref) 是“取引用”(Ref) 的反操作
开发语言·学习·rust
qq19257230272 小时前
c++特性
开发语言·c++·算法
weixin_307779132 小时前
AWS Elastic Beanstalk 实现 Java 应用高可用部署指南
java·开发语言·云计算·aws·web app