求助汇编除法

[复制链接]
4809|11
 楼主| momonivvuu 发表于 2007-11-28 16:42 | 显示全部楼层 |阅读模式
用减法做的话很费时间,而移位的话除数只能是2的指数。请问高手们有没有其他方法啊?
 楼主| momonivvuu 发表于 2007-11-28 16:44 | 显示全部楼层

自己顶下先

自己顶下先,不要掉下去了
 楼主| momonivvuu 发表于 2007-11-28 16:50 | 显示全部楼层

没人理啊

自己安慰下
computer00 发表于 2007-11-28 18:54 | 显示全部楼层

换个带除法指令的处理器

lkkjob 发表于 2007-11-28 19:11 | 显示全部楼层

直接用除法指令不就行了

直接用除法指令不就行了, DIV AB
不是可以直接做除法吗?
mohanwei 发表于 2007-11-28 20:13 | 显示全部楼层

用C编写:Z=X/Y;……

生成SRC文件,打开,发现是c编译成汇编了,有对应的,改改就可以了。
ywqywqywq 发表于 2007-11-28 22:22 | 显示全部楼层

移位减

小小小菜鸟 发表于 2007-11-29 00:03 | 显示全部楼层

最惨的是用PIC16系列的,就是uchar/uchar就要20余行ASM

 楼主| momonivvuu 发表于 2007-11-29 08:46 | 显示全部楼层

谢谢各位

谢谢。我用的是PSOC,没有除法啊,对了,移位减?怎么做呢?提示下啊,我想不明白
 楼主| momonivvuu 发表于 2007-11-29 08:54 | 显示全部楼层

To:mohanwei

我去试试看看,谢谢
mohanwei 发表于 2007-11-29 22:58 | 显示全部楼层

C调用汇编以实现高效、实时、可控的算法的时候

我都是先用C写好算法,然后编译成汇编文件进行优化的。这样框架和接口编译器都给都做好了,实现起来比较简单。
xiaoerge 发表于 2007-11-30 19:13 | 显示全部楼层

说明一下

其实子程序做除法是用的二进制做的,跟十进制的是一样的,下面我演示一下: 
比如:85H÷12H(随便取的)算是8位除以8位吧,无符号,写成二进制为10000101B/00010010B 
                111 
          __________  
00010010 / 10000101 
       -    10010 
        ------------ 
             11110 
       -     10010 
        ------------ 
              11001 
       -      10010 
        ------------ 
                111 
具体的方法(用上例解释):先将被除数10000101左移,直到大于或等于除数10010,即移出部分为100001,记录移位次数6,商1,移出的被除数减去除数,用8减去移位次数保存,下面是循环,循环次数就是8-6=2,循环体为(被除数(包括前面移出的共两个8位二进制数)左移一位,判断高8位是否大于等于除数,小于则进位位清零,大于等于则置1,商带进位位左移)。最后被除数的高8位为余数,商和被除数可以公用一个寄存器。 
16/16,16/8等其他的依此类推,只是循环次数多一些而已 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

18

帖子

1

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