[STM32F1] 怎么实现除以3的运算

[复制链接]
1703|36
 楼主| huwr 发表于 2021-1-6 22:02 | 显示全部楼层 |阅读模式
听说精简指令集只有移位运算,加减法运算器。
xxrs 发表于 2021-1-6 22:05 | 显示全部楼层

什么意思?不是很明白你说的什么
 楼主| huwr 发表于 2021-1-6 22:08 | 显示全部楼层
比如除以2吧,就是右移1位,乘以2就是左移1位。
乘以3就是=x+(x<<1)
那么除以3改怎么算呢?
dingy 发表于 2021-1-6 22:11 | 显示全部楼层
huanghuac 发表于 2021-1-6 22:16 | 显示全部楼层
他问的是只使用加减法和移位运算怎么实现。。
renyaq 发表于 2021-1-6 22:20 | 显示全部楼层
我也想知道,不知道编译后的汇编代码能否看出来。
supernan 发表于 2021-1-6 22:24 | 显示全部楼层
楼主精神可嘉,还研究这些算**
huanghuac 发表于 2021-1-6 22:27 | 显示全部楼层
写段代码,有-s 参数编译一下,然后查看一下汇编源代码
xxrs 发表于 2021-1-6 22:32 | 显示全部楼层
说句实话,现在的编程真的不需要研究这个了,没RAM换RAM,没FLASH增加FLASH,速度不够可以换芯片,你只要有思路就行了。不差这几行代码
huanghuac 发表于 2021-1-6 22:37 | 显示全部楼层
如果没有除法指令,那么就只好移位/比较/相减了
houcs 发表于 2021-1-6 22:40 | 显示全部楼层
如果要搞编译器开发,我觉得必须的研究这个简单的算法,看似简单,我也没想出来怎么做。
liuzaiy 发表于 2021-1-6 22:47 | 显示全部楼层
// y= x / 3

y = 0;
while (!(x<3))
{
   x -= 3;
   y++;
}
yinxiangh 发表于 2021-1-6 22:50 | 显示全部楼层
有除法指令的啊
 楼主| huwr 发表于 2021-1-6 22:53 | 显示全部楼层
遇到高手了,这个方法果然可以实现任意非移位除法。
 楼主| huwr 发表于 2021-1-6 22:56 | 显示全部楼层
你楼下的高人给出方法了,虽然看似简单,但是能想到真不容易,愁死我了,这个问题。
 楼主| huwr 发表于 2021-1-6 23:00 | 显示全部楼层

突然有个想法了,就是是不是可以移位,就看除数的二进制是不是只有1位是1.
比如2,4,8,16分别是0010,0100,1000,1 0000
ousj 发表于 2021-1-6 23:05 | 显示全部楼层
然而如果数比较大或许会花费非常多的时间。。。。。。
 楼主| huwr 发表于 2021-1-6 23:09 | 显示全部楼层
你说的对啊。所以有的单片机提供了专用的除法器。
zyf部长 发表于 2021-1-6 23:11 | 显示全部楼层
果然有高人,虽然笨拙,但是解决了楼主的问题,就是用有限的指令,实现复杂的功能。
xxmmi 发表于 2021-1-6 23:15 | 显示全部楼层
把y = 0 改成y= x>>2;可以减少75%的循环
您需要登录后才可以回帖 登录 | 注册

本版积分规则

780

主题

8627

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部