由于操作失误,不知道最后做的计算机去哪了,也没做成压栈弹栈的那一关(我诚实的通过了)。没有办法,最后的几个变成关卡只能每一关做一个特定的硬件来过关。
下面的图片是所有关卡里使用到的启动硬件的脉冲发生器。

1. 编程-迷宫

编程-迷宫
实现了最简单的摸着一边的墙走就一定能走到迷宫出口,但该装置无法吃掉所有的金币。
2. 汇编挑战-AI打牌

汇编挑战-AI打牌
一共有12张牌,AI第一次拿走牌的数量只有三种可能(1-3张)。我只需要在我第1次拿走牌后,还剩下5张;这样AI在第二次拿走(1-3张)牌后,一定能够剩余2-4张牌;所以我第二次只需要拿走1-3张牌后,AI下一次一定会拿取最后一张牌。(下方左半部分是根据AI第一次拿取结果,我进行第一次拿取;右半部分是获得AI第二次拿取结果后,我进行第二次拿取)。
3. 汇编挑战-机器赛跑

汇编挑战-机器赛跑
只是很简单的把机器人走的路线压缩了一下放进了program里,顺带调了一下program读取移位的速度。steam社区里面似乎有完全不需要program的更简便的版本。
4. 汇编挑战-新品上市

汇编挑战-新品上市
上面是操作机器人走到指定的操作位置,下面是对所有的水果(输入值)进行判断,如果出现第一次,寄存器被会永久置1。这样当同一个数字出现第二回的时候,机器人就会移动到按钮的位置,按下按钮。
5. 汇编挑战-美味排序

起始,中间,末尾三个模块

把中间部分多复制几个,连在一起,再连上首尾部分
原理是使用数组,从最右侧的最大数字开始,在新数据插入的同时进行排序。首先通过<=比较找到插入位置(通过要求上一位<=为真,下一位<=为假,避免多个相同数字)。之后把该位置及所有更低位里的数字左移(同时向左覆盖)1位,空余出该插入位置。最后把这个数字覆盖这一位就完成了一个排序插入。(由于所有寄存器的初始值是0,所以插入第一个数和插入一个最大的数的过程是一样的;而所有数字都是正数(全部大于0),所以不会出现-1插入到最左边,然后被弃置的问题(其实就算是插入0也没有问题,和前面的逻辑一样,会插入到所有0的最右侧))。
6. 汇编挑战-跳舞机器

汇编挑战-跳舞机器
题目要求的运算正好是基础运算,所以直接按要求做就行。
7. 汇编挑战-合金汉诺塔

汇编挑战-合金汉诺塔
题目中明确表示,合金汉诺塔的层数在3-5层之间(一共就3种可能)。所以直接把三种移动过程写进了program(写入program的没有具体的从哪里移动到哪里,对于三个位置,只是用很简单的0,1,2进行储存。虽然题目中起始位置和要求移动到的位置是随机的,但是只需要按照题目要求映射一下就可以(题目要求会在程序启动后读入到存在右上角的寄存器里,第一个寄存器存储这是几层的汉诺塔(指定program内读取的初始位置),第2-4个寄存器是汉诺塔的初始位置,目标位置,空闲位置))。
8. 汇编挑战-行星之名

汇编挑战-行星之名
题目要求让所有首字母大写,所以先强制让第一个字母大写,然后判断是否遇到空格。如果遇到空格,将下一位大写;否则原样输出。(大写对于ascii码来讲,就是单纯的加减法)。
9. 汇编挑战-水世界

起始部分和基础单元(上半部分存数据,下半部分运算)

末尾部分

复制的部分
基础单元分为2个部分,从上面一半实现了防止覆盖的存储(用于主线输入多个数据),下面一半是数据实际运算部分。整体的执行逻辑如下。
从输入里把数据读到单元上层
把单元上层里的数据存入单元下层运算部分
实际运算是将数据分为两个部分,一部分重新存入单元上层(通过主线的存储方式来防止空位的问题);另一部分进行求和计算,在所有求和都完成后,输出。
如果计数器里的数字不为1,重复2.和3.,计数器里的数字-1
输出最后求和的结果
下面是设计思路:
从墙的最高6格子开始向下逐一遍历(最低为2)(实际是从5到1,因为使用的是大于进行判断)。先以第1遍的6格高为例,通过计算单元中间部分的双向扫描棍,扫描出左右最靠边的>5格高的墙(只有6格高的墙符合要求):如果没有,数据全部返回到上面的寄存器,进入下一次循环;如果有2个6格高的墙,对这两个墙之间的水位(6-墙高)进行求和(涉及到求和的数字不会存回单元上层寄存器,会被舍去),同时将第一个6以及更左边的数字以及第二个6的更右边的位置,按照原来的顺序存入单元上层的寄存器。(需要保留一个6:如果下一层只有一个5,那么5和6之间的水位,由于所有的6都被舍去,就无法求和;如果下一层有2个5,那么需要求参与和的数字必须是正数:如果是565的结构,中间的6不会求和,并会被同时舍去;如果是556的结构,由于第二回扫描的条件是>4,所以6会被相当于5对待,中间的5是0,不会参与求和,会被同时舍去)。之后按照顺序遍历>4,>3,>2,>1。遍历完成,输出求和结果。