由於操作失誤,不知道最後做的計算機去哪了,也沒做成壓棧彈棧的那一關(我誠實的通過了)。沒有辦法,最後的幾個變成關卡只能每一關做一個特定的硬件來過關。
下面的圖片是所有關卡里使用到的啟動硬件的脈衝發生器。

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。遍歷完成,輸出求和結果。