近期,接触到深圳IO这个游戏,在学习深度学习网络的主线任务中开启了汇编语言的支线任务,发现学习下汇编语言还是挺有趣的,而且还挺锻炼编程思维。 身为一个完全没学过嵌入式系统或者汇编语言的小白,目前已经“玩”了 38h,玩到了 精确食品称 这一关,记录一些理解。
讽刺的是,这个“Shenzhen IO”游戏并不能在国服玩,要注册海外账号才行。
和我们日常使用的电子秤别无二致,这个秤有“开机”,“关机”,“净重”(去皮)这三个功能。
这个设计实现的思路很简单,左边的芯片用来判断目前电子秤的状态,在按下“按钮”后,应该开机(dat置1),还是关机(dat置0),还是纪录皮重,并把目前重量清零(dat置3)。 这个设计确实可以满足需求,但是看下结果,在全球玩家中属于吊车尾的段位。 而看到产品成本最佳是¥5,那毫无疑问: 这个电子秤是可以用一个MC6000实现的!
在学习高级语言的时候,往往会应用 把多条简单的逻辑组合起来,做很复杂的功能 的逻辑,也就是说,有的时候打代码,都可以“不带脑子”,只要按条件,简单粗暴地全部敲完就完事了。 但是这种做法,在汇编这种“低级”语言,往往行不通,主要因为: 芯片限制了代码行数,而且汇编语言在嵌套逻辑中的能力,比较高级语言确实非常难用。
起码在深圳IO这个游戏中是这样的,涉及到嵌套逻辑,真的是非常头疼,而高级语言直接多写几层if就行了
所以在用汇编的时候,必须要“带脑子”,在写程序之前就要想好代码如何能做的精简且聪明。而我个人总结的最重要的方法就是:进行 条件合并 ,找到关键条件。
如果只使用一块MC6000芯片,那可以操作的acc必须用来做净重,dat用为记录皮重(输入为毛重)
本设计任务的核心重点&难点就在于如何区分“开机”,“关机”,“置零(去皮)”这三个功能。
①开机条件
②关机条件
③置零条件
下面开始整理合并,首先,三个功能可以合并成两个, 开机和置零本质上是一个状态(开机皮重为0) 接下来,只要从以上条件中,找到 最简洁的能区分关机和置零状态的充分条件 就行了。 那就是: ①置零条件
最简洁的能区分关机和置零状态的充分条件
找到这个条件,就可以构建新的设计了。
运行结果,world best design!