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_rs2;

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_rs0;

x1=mul_rs1;

Div_32Bit(a2,a1,a3,mul_rs);

x0=mul_rs0;

x1=mul_rs1;

}

return 0;

}

//r1*r2=>mul_rs0是低16位,mul_rs1是高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_r0=x0;

mul_r1=x1;

return 0;

}

//r2r1/r3=>mul_r0是低16位,mul_rs1是高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_r0=x0;

mul_r1=x1;

return 0;

}

相关推荐
千谦阙听14 分钟前
C++篇:类和对象(上)
开发语言·c++
许彰午30 分钟前
07-SqlBuilder六法
java·开发语言·低代码·架构
LONGZETECH33 分钟前
新能源汽车动力电池实训教学痛点与虚拟仿真技术解决方案
c语言·3d·unity·架构·汽车·汽车教学软件
BS30813_vx34 分钟前
【编号:01652】Spring Boot村务管理系统:财务公开、党建活动与计生服务一体化实战
开发语言·python
Jul1en_37 分钟前
【Java 脚手架】封装通用工具类-3
java·开发语言·redis·缓存·ai·bootstrap·rabbitmq
学习星球44 分钟前
2026年AI Agent全栈开发实战——从Prompt到Production
开发语言·人工智能·prompt
Fluxart.ai1 小时前
商品多角度图怎么做?Flux Art 从白底图到规格图、包装图的 10 步教程
开发语言·前端·javascript
captain3762 小时前
文件与IO(2)
java·开发语言·windows·java-ee
mqiqe2 小时前
AgentScope Java 2.0 集成 Chat Completions Web:一行依赖让你的 Agent 变身 OpenAI 兼容服务
java·开发语言·前端