脑筋急转弯,廉价MCU没有加法器,如何实现加法 功能?

[复制链接]
4652|19
 楼主| Cortex-M0 发表于 2011-9-19 12:42 | 显示全部楼层 |阅读模式
本帖最后由 Cortex-M0 于 2011-9-19 16:18 编辑

前言:

有个小童鞋在问,某廉价MCU不但没有减法器,也没有加法器,如何做减法?
借此机会,俺突发奇想,来个脑筋急转弯,某些廉价MCU(如松翰SN56000系列)没有加法器如何做加法?


要求:
用MCU其他通用指令写出个加法器来,接下去做减法就超级简单啦,减数求补再相加即可。
关键是这个加法器,位数不限,4位8位16位32位均可,讲明实现原理即ok
在1分钟内写出者,为顶级电工。
在3分钟内写出者,为优秀电工。
在5分钟内写出者,为良好电工。
在10分钟内写出者,为合格电工。
超过10分钟未能写出者,建议重新回炉,或改行别当电工了~~~  :lol
liang7143 发表于 2011-9-19 12:53 | 显示全部楼层
本帖最后由 liang7143 于 2011-9-19 12:56 编辑

还是别用MCU了 直接数字电路 直接实现
先写真值表 然后例逻辑表达式
然后在化简 最后用与非门 或者 或非门实现
gx_huang 发表于 2011-9-19 12:58 | 显示全部楼层
哪个MCU没有加法指令?没有乘除的倒有不少。
Dyn11 发表于 2011-9-19 13:07 | 显示全部楼层
有的人,一言一行,一个签名,让能让人想起令人恶心的某衣衣
雪山飞狐D 发表于 2011-9-19 13:15 | 显示全部楼层
本帖最后由 雪山飞狐D 于 2011-9-19 13:17 编辑

IO 口逻辑位操作,一进一出,串行或者并行都可以,还可以做流水线,嗯。30秒
szshawn2010 发表于 2011-9-19 14:06 | 显示全部楼层
一不小心,变成 顶级电工了 我*!
chunk 发表于 2011-9-19 16:01 | 显示全部楼层
加就是个异或,进位就是个与。
陈永宾0 发表于 2011-9-19 18:29 | 显示全部楼层
我    回    炉
sxhhhjicbb 发表于 2011-9-19 21:09 | 显示全部楼层
CPU是由运算器和控制器组成的....加法器是运算器中最原始的运算...可能没有吗?加没器占的资源是最低的了.比异或逻辑还低.
sysdriver 发表于 2011-9-19 22:15 | 显示全部楼层
我是小童鞋。。。
 楼主| Cortex-M0 发表于 2011-9-20 05:10 | 显示全部楼层
某些MCU(如松翰SN56000系列) ,  由于是语音专用芯片,很多指令派不上用场,因此,不带加法器也很正常~~~
ccmc 发表于 2011-9-20 08:26 | 显示全部楼层
PC就是一加法器
ST_Z 发表于 2011-9-20 14:29 | 显示全部楼层
廉价到没有加法的MCU,老子就不用了!
 楼主| Cortex-M0 发表于 2011-9-22 04:26 | 显示全部楼层
LS各位盆友答的都不错~~~

给个 51模拟加减法器 程序供参考~~~

                   ORG   0
                   MOV   R7,#0A8H                          
                   MOV   R5,#05FH
                   LCALL ADD_UINT8
                   NOP
                   NOP
                   NOP
                   MOV   R7,#0A8H                          
                   MOV   R5,#0EFH
                   LCALL SUB_UINT8
                   NOP
                   NOP
                   NOP
                   SJMP $



ADD_UINT8:
                   MOV   R0,#8                   ;R7 + R5 --> R7
ADD_1:
                   MOV   A,R7
                   XRL   A,R5
                   XCH   A,R7
                   ANL   A,R5
                   CLR   C
                   RLC   A
                   MOV   R5,A
                   DJNZ  R0,ADD_1
                   RET

SUB_UINT8:
                   MOV   A,R5                   ;R7 - R5 --> R7
                   CPL   A
                   INC   A
                   MOV   R5,A
                   LCALL ADD_UINT8
                   RET

                   END
ayb_ice 发表于 2011-9-22 08:07 | 显示全部楼层
首先1BIT的加法器大家应该都没有问题,其它的8~32位扩展就是了,注意进位处理
ccmc 发表于 2011-9-22 15:19 | 显示全部楼层
INC A 是不是也属于加法指令.....................
 楼主| Cortex-M0 发表于 2011-9-22 19:52 | 显示全部楼层
如认为增量指令 INC A 也属于加法指令.....................

完全可替代掉..............................

SUB_UINT8:
                   MOV   A,R5                   ;R7 - R5 --> R7
                   CPL   A
                   MOV   R5,A
                   MOV   A,#1
                   XCH   A,R7
                   MOV   R1,A
                   LCALL ADD_UINT8
                   MOV   A,R1
                   MOV   R5,A
                   LCALL ADD_UINT8
                   RET

                   END
ahgao 发表于 2011-9-22 22:16 | 显示全部楼层
悲哀啊,现在看51的汇编看不懂了。10几年不用51了。

楼主的程序中使用了C和带C移位,这个对于一个不支持加法的单片机而言似乎不可能存在的。
linbei1988 发表于 2011-9-23 10:07 | 显示全部楼层
廉价到加法都没有的东西,是不是本身就应该淘汰
这好像在问:哪个童鞋知道钻木取火的具体方法
 楼主| Cortex-M0 发表于 2011-9-23 12:33 | 显示全部楼层
悲哀啊,现在看51的汇编看不懂了。10几年不用51了。

楼主的程序中使用了C和带C移位,这个对于一个不支持加法的单片机而言似乎不可能存在的。
ahgao 发表于 2011-9-22 22:16


那很简单,下面这两条指令:

               CLR    C
               RLC    A
改为:
               RL      A
               ANL    A, #0FEH
即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:学习chunyang和maychang两位老师,努力练好基本功。 学习HOT大叔,学好“Cortex-M0”,做“Cortex-M0”之菜鸟。

7

主题

4820

帖子

12

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