jiuri 发表于 2025-8-24 11:49

这款芯片的16位数据的乘法和除法怎么弄

哪位大侠有没有相关的子程序(kf8f2020)

最好是汇编的代码
谢谢

钟爱柳州 发表于 2025-8-25 08:47

C语言直接写乘除即可:

钟爱柳州 发表于 2025-8-25 08:47

long multiply_16bit(unsigned int a, unsigned int b);
int divide_16bit(int dividend, int divisor);

long product;
int quotient;

// Main Function
int main()
{
    unsigned int a = 1000;
    unsigned int b = 2000;
    int dividend = 10000;
    int divisor = 200;

    // 16位乘法
    product = multiply_16bit(a, b);
    printf("16位乘法结果: %u\n", product);

    // 16位除法
    quotient = divide_16bit(dividend, divisor);
    printf("16位除法结果: %d\n", quotient);

    while (1)
    {
    }
}

// 16位乘法函数
long multiply_16bit(unsigned int a, unsigned int b)
{
    return (unsigned long)a * b;
}

// 16位除法函数
int divide_16bit(int dividend, int divisor)
{
    if (divisor == 0)
    {
      // 处理除零错误
      return 0;
    }
    return dividend / divisor;
}

钟爱柳州 发表于 2025-8-25 08:50

汇编指令在lst文件中可以查看

jiuri 发表于 2025-8-25 12:49

感谢回复

xch 发表于 2025-8-25 13:16

没乘除法指令。你得用加减法拼凑

cooldog123pp 发表于 2025-8-25 18:32

钟爱柳州 发表于 2025-8-25 08:47
long multiply_16bit(unsigned int a, unsigned int b);
int divide_16bit(int dividend, int divisor);



貌似这不是汇编吧,不过现在用汇编搞的话已经很少了

钟爱柳州 发表于 2025-8-26 08:16

cooldog123pp 发表于 2025-8-25 18:32
貌似这不是汇编吧,不过现在用汇编搞的话已经很少了

用C编译以后在编译文件夹里面找到lst文件,搜函数名查看汇编代码

jiuri 发表于 2025-8-31 16:06

st文件里可以看到汇编程序,但不是很清楚,本想想直接调用,没成功,后来还是自己慢慢敲汇编代码实现了两个16位数据的除法、乘法、比较子程序。
总体来讲这款芯片对应的指令较少还是容易上手的。最搞的是sub r0,r1这指令与常规的不一样。
页: [1]
查看完整版本: 这款芯片的16位数据的乘法和除法怎么弄