【深圳IO】精确食品称(汇编语言的一些理解)

简介: 【深圳IO】精确食品称(汇编语言的一些理解)
Steam游戏:深圳IO

近期,接触到深圳IO这个游戏,在学习深度学习网络的主线任务中开启了汇编语言的支线任务,发现学习下汇编语言还是挺有趣的,而且还挺锻炼编程思维。

身为一个完全没学过嵌入式系统或者汇编语言的小白,目前已经“玩”了 38h,玩到了精确食品称这一关,记录一些理解。

讽刺的是,这个“Shenzhen IO”游戏并不能在国服玩,要注册海外账号才行。

精确食品称功能需求

和我们日常使用的电子秤别无二致,这个秤有“开机”,“关机”,“净重”(去皮)这三个功能。

代码实现

这个设计实现的思路很简单,左边的芯片用来判断目前电子秤的状态,在按下“按钮”后,应该开机(dat置1),还是关机(dat置0),还是纪录皮重,并把目前重量清零(dat置3)。

这个设计确实可以满足需求,但是看下结果,在全球玩家中属于吊车尾的段位。

而看到产品成本最佳是¥5,那毫无疑问:

这个电子秤是可以用一个MC6000实现的!

代码的优化思路

在学习高级语言的时候,往往会应用把多条简单的逻辑组合起来,做很复杂的功能的逻辑,也就是说,有的时候打代码,都可以“不带脑子”,只要按条件,简单粗暴地全部敲完就完事了。

但是这种做法,在汇编这种“低级”语言,往往行不通,主要因为:芯片限制了代码行数,而且汇编语言在嵌套逻辑中的能力,比较高级语言确实非常难用。

起码在深圳IO这个游戏中是这样的,涉及到嵌套逻辑,真的是非常头疼,而高级语言直接多写几层if就行了

所以在用汇编的时候,必须要“带脑子”,在写程序之前就要想好代码如何能做的精简且聪明。而我个人总结的最重要的方法就是:进行条件合并,找到关键条件。

代码优化方法
信号规划

如果只使用一块MC6000芯片,那可以操作的acc必须用来做净重,dat用为记录皮重(输入为毛重)

条件整理

本设计任务的核心重点&难点就在于如何区分“开机”,“关机”,“置零(去皮)”这三个功能。

①开机条件

  • 按钮=100
  • 重量(毛重)=0
  • 皮重=999(开机前的状态必定时关机,关机状态定义为净重=-999)

②关机条件

  • 按钮=100
  • 重量(毛重)=0
  • 皮重=0

③置零条件

  • 按钮=100
  • 重量(毛重)>0
  • 皮重=0(目前皮重还是0,在下一个状态,皮重会等于此时的毛重)

下面开始整理合并,首先,三个功能可以合并成两个,开机和置零本质上是一个状态(开机皮重为0)

接下来,只要从以上条件中,找到最简洁的能区分关机和置零状态的充分条件就行了。

那就是:

①置零条件

  • 重量≠皮重

②关机条件

  • 重量=皮重

找到这个条件,就可以构建新的设计了。

设计优化

运行结果,world best design!


相关文章
华为OD机试真题 Java 实现【核酸最快检测效率】【2022.11 Q4 新题】
华为OD机试真题 Java 实现【核酸最快检测效率】【2022.11 Q4 新题】
|
2月前
|
安全 Java API
【Java炸裂更新】JDK 22:区域锚定引领G1垃圾回收革命,性能飙升新高度!
【9月更文挑战第6天】JDK 22的发布,标志着Java在性能优化和垃圾回收技术上的又一次重大突破。区域锚定技术的引入,不仅提升了G1垃圾收集器的效率,也为Java应用的性能提升注入了新的动力。随着Java生态的不断发展和完善,我们有理由相信,Java将继续在编程界保持其铁打英雄的地位,为开发者们带来更多惊喜和可能。 让我们共同期待,Java在JDK 22的引领下,开启一个全新的性能飙升时代!
78 17
|
2月前
|
开发框架 并行计算 .NET
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
23 2
|
3月前
|
存储 数据可视化 新能源
【2023电工杯】A题 电采暖负荷参与电力系统功率调节的技术经济分析 30页论文及python代码
本文介绍了2023电工杯A题的研究成果,详细分析了电采暖负荷参与电力系统功率调节的技术经济性,提出了基于微分方程模型的电采暖负荷特性分析、功率调节能力评估、多用户负荷调节策略、住宅区电网调节能力分析以及削峰填谷的收益评估,并提供了Python代码实现。
48 0
【2023电工杯】A题 电采暖负荷参与电力系统功率调节的技术经济分析 30页论文及python代码
|
4月前
|
开发框架 数据挖掘 .NET
显微镜下的Python并发:细说IO与CPU密集型任务的异步差异,助你精准施策!
【7月更文挑战第16天】在Python并发编程中,理解和区分IO密集型与CPU密集型任务至关重要。IO密集型任务(如网络请求)适合使用异步编程(如`asyncio`),以利用等待时间执行其他任务,提高效率。CPU密集型任务(如计算)则推荐使用多进程(如`multiprocessing`),绕过GIL限制,利用多核CPU。正确选择并发策略能优化应用性能。
69 2
|
5月前
|
算法 Java 定位技术
基于Java的地震震中附近城市分析
基于Java的地震震中附近城市分析
41 0
|
6月前
|
JavaScript Java 测试技术
基于Java的常见小儿疾病中医护理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的常见小儿疾病中医护理系统的设计与实现(源码+lw+部署文档+讲解等)
34 1
|
6月前
|
机器学习/深度学习 算法 Java
Java代码打造气象预测系统
Java代码打造气象预测系统
205 0
|
存储
8086存储器和IO组织【微机原理】
8086存储器和IO组织【微机原理】
151 0
|
存储 算法 Java
Java代码是如何被CPU狂飙起来的?
无论是刚刚入门Java的新手还是已经工作了的老司机,恐怕都不容易把Java代码如何一步步被CPU执行起来这个问题完全讲清楚。但是对于一个Java程序员来说写了那么久的代码,我们总要搞清楚自己写的Java代码到底是怎么运行起来的。另外在求职面试的时候这个问题也常常会聊到,面试官主要想通过它考察求职同学对于Java以及计算机基础技术体系的理解程度,看似简单的问题实际上囊括了JVM运行原理、操作系统以及CPU运行原理等多方面的技术知识点。我们一起来看看Java代码到底是怎么被运行起来的。
6372 7
Java代码是如何被CPU狂飙起来的?