【深圳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!


相关文章
|
10月前
|
存储 SQL 网络协议
C语言C/S架构PACS影像归档和通信系统源码 医院PACS系统源码
医院影像科PACS系统,意为影像归档和通信系统。它是应用在医院影像科室的系统,主要的任务是把日常产生的各种医学影像(包括核磁、CT、超声、各种X光机、各种红外仪、显微仪等设备产生的图像)通过各种接口(模拟、DICOM、网络)以数字化的方式海量保存起来,并在需要的时候在一定授权下能够快速地调回使用。同时,PACS系统还增加了一些辅助诊断管理功能。
150 11
|
5月前
|
监控 网络协议 Java
IO 多路复用? 什么是 IO 多路复用? 简单示例(日常生活)来解释 IO 多路复用 一看就懂! 大白话,可爱式(傻瓜式)教学! 保你懂!
本文通过日常生活中的简单示例解释了IO多路复用的概念,即一个线程通过监控多个socket来处理多个客户端请求,提高了效率,同时介绍了Linux系统中的select、poll和epoll三种IO多路复用的API。
265 2
|
6月前
|
开发框架 并行计算 .NET
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
44 2
|
7月前
|
数据采集 监控 安全
Io 语言在公司电脑监控软件中的应用可能性
在数字化办公时代,企业对电脑监控软件需求增长,以确保信息安全与合规。Io语言独特的编程特性为监控软件开发带来新可能。其简洁动态的语法适合处理复杂监控任务。通过Io语言,可轻松实现网络数据采集及系统资源监控,如CPU使用率与内存状态的实时获取。Io的消息传递机制支持模块间高效通信,尽管存在社区小和库资源有限等挑战,但仍展现出在企业监控领域的应用潜力。
50 1
|
8月前
|
开发框架 数据挖掘 .NET
显微镜下的Python并发:细说IO与CPU密集型任务的异步差异,助你精准施策!
【7月更文挑战第16天】在Python并发编程中,理解和区分IO密集型与CPU密集型任务至关重要。IO密集型任务(如网络请求)适合使用异步编程(如`asyncio`),以利用等待时间执行其他任务,提高效率。CPU密集型任务(如计算)则推荐使用多进程(如`multiprocessing`),绕过GIL限制,利用多核CPU。正确选择并发策略能优化应用性能。
109 2
|
缓存 Unix Linux
linux系统编程 标准io
linux系统编程 标准io
139 0
|
存储 测试技术
探索性能巅峰:io_uring用户态接口的神奇之处
这篇文章将带你深入探索io_uring用户态接口的神奇之处,它是一项引人注目的技术,能够显著提升IO操作的性能。我们将介绍io_uring的工作原理,并解释它为什么在性能方面与传统接口相比具有明显优势。你将了解到io_uring的异步特性是如何实现的,以及它如何减少了对内核的系统调用次数。我们还将探讨io_uring在实际应用中的潜力和使用场景,以及如何利用它来优化你的应用程序。无论你是开发人员还是系统管理员,本文都将帮助你了解并掌握io_uring用户态接口的神奇之处,助你实现卓越性能的应用程序。
144 0
|
Linux C语言
【Linux系统编程】IO标准缓冲区
【Linux系统编程】IO标准缓冲区
165 0
|
存储
8086存储器和IO组织【微机原理】
8086存储器和IO组织【微机原理】
202 0
|
小程序 Java API
涨知识!一文带你读懂空气质量数据(附Java 和小程序接入示例代码)
涨知识!一文带你读懂空气质量数据(附Java 和小程序接入示例代码)
10978 0
涨知识!一文带你读懂空气质量数据(附Java 和小程序接入示例代码)

热门文章

最新文章