电玩圈游戏网 搜一搜

安卓手游去频道 >

角色扮演 射击枪战 棋牌卡牌 体育运动 角色扮演 赛车竞速 休闲益智 音乐舞蹈 模拟经营 战棋塔防 推理解谜 策略战争

安卓应用去频道 >

社交通讯 系统工具 影音视听 拍摄美化 效率办公 学习教育 生活服务 旅游出行 资讯阅读 金融理财 网络购物 游戏助手

游戏视频去频道 >

动作冒险 射击枪战 棋牌卡牌 体育运动 角色扮演 赛车竞速 音乐舞蹈 模拟经营 战棋塔防 推理解谜 策略战争 休闲益智

资讯攻略去频道 >

手游资讯 手游攻略 手游问答 游戏资讯 游戏杂谈 游戏攻略 软件教程 软件资讯

专题合集去频道 >

游戏专题 应用专题

排行榜单去频道 >

游戏排行 应用排行
首页 游戏 应用 视频 资讯 专题 榜单

首页>资讯>游戏攻略>深圳SHENZHENIO第20关袖珍易经预测仪攻略

深圳SHENZHENIO第20关袖珍易经预测仪攻略

作者:佚名来源:百度2022/06/07

深圳IO是一款硬核的编程游戏,有着严谨的游戏内容,那么一起来看看第20关的袖珍易经预测仪的攻略吧。

主界面

由于游戏过分硬核,先放个手册中的图看看冰山一角:

不过这也正对应了嵌入式开发中会遇到的海量数据手册,相当程度上还原了嵌入式日常开发的情景。

游戏中设计到部分的编程有些类似于汇编语言,这里上手还是有一些些难度的,大家请做好准备,继续直接扔核弹:

不用害怕,在游戏过程中,会逐步引导你学会使用新的指令,对于新的器件,也是随着主线的进行逐步开放的

在游戏中,你不仅可以完成指定的基本目标,还可以挑战全网玩家,看谁能达成最佳优化目标。

鱼和熊掌不可兼得,多数情况下想要达成更好的性能就要增加成本啦,不过这正是优秀的嵌入式开发人员的意义所在——比你好,还比你的便宜。

第 20 关:袖珍易经预测仪

关卡展示

本关要求当出现【按钮】信号时,读取【预测符】里接下来 6 个时钟周期的信号,并将最终的占卜结果写到显示屏上。【预测符】里的 6 个时钟周期的信号依次对应显示屏上从下到上的正方形是否点亮,100 为点亮,0 为熄灭。

这一关不算太难,我们用两个 DX-300 连接右边的显示屏,然后用位运算生成两个三位数,等两个三位数都正确生成后,同时发给两个 DX-300 即可。电路图和代码如下:

我们首先将占卜信号用 DX-300 转换一下,将 100 信号转换成 1 信号,以方便后续使用置位指令将对应位置成 0 或 1。

这里,我们使用 dat 寄存器来存储前 3 个占卜信号的 DX-300 值。但是当前 3 个占卜信号还没有出现时,我们要把什么值放到 dat 里呢?0 显然不行,因为完全可能出现前三个都是关闭的 000 信号,当 dat 是 0 时,你根本无法分辨目前是“尚未收到前 3 个信号”还是“前 3 个信号都是 0”。所以我们必须要选择一个和 DX-300 的 8 种三位数完全不一样的数字,定义为“尚未收到前 3 个信号”。这里我们选择了 999。

那么我们现在来看程序。首先我们判断当前的按钮信号是不是大于 0(tcp p0 0)。如果按钮信号为 0,不执行任何操作,关闭一切 + - 前缀指令,直接跳到最后休眠(slp 1)。当按钮信号为 100 时,我们先将 dat 初始化为 999,表示“正在等待前 3 格信号”(+ mov 999 dat)。然后,我们在接下来的 3 个周期里,根据 0/100 的【预测符】信号,将 acc 的个位、十位、百位依次设为 0/1(+ dst 0 x0, + slp 1, + dst 1 x0, + slp 1, + dst 2 x0)。设置完毕后,判断 dat 是否是 999(+ teq dat 999)。目前很明显是 999,那么我们将 acc 里表示的前 3 格的状态值存入 dat(+ mov acc dat),休眠一秒后(+ slp 1)回到第 3 行(+ jmp 3),继续设置后 3 格的状态。等再次到达第 8 行时,dat 已经不再是 999,那么说明 6 格状态全部设置完毕,我们将前 3 格和后 3 格的状态值依次发给两个 DX-300,更新显示屏的占卜状态(- mov dat x2, - mov acc x3)。做完以上操作后,休眠一秒,等待下一次占卜任务(slp 1)。

点击左下角的【模拟】,稍等片刻,便会弹出结算界面:

优化代码行数

第八行 + teq dat 999 后,我们将“不成立”的逻辑写在前面,“成立”的逻辑写在后面。代码就变成了下面这样:

9:- mov dat x2

a:- mov acc x3

b:+ mov acc dat

c:+ slp 1

d:+ jmp 3

e: slp 1

然后我们惊奇地发现,第 12 行的 + slp 1 和第 14 行的 slp 1 可以合并,最终代码变成下面的样子:

9:- mov dat x2

a:- mov acc x3

b:+ mov acc dat

c: slp 1

d:+ jmp 3

如此,代码行数便减少到了 13 行。

评论 (0)

相关阅读
网友评论0条评论

上拉或点击查看更多