在計算機中,二進制數是以補碼的形式進行運算的。
這樣做的目的,是爲了用統一的方式,來進行有符號數的加減法運算,使得件複雜度最小化。
關於補碼的運算規則比較複雜,這裡不多展開。
江寒首先要實現的,是最簡單的“半加”。
其功能十分簡單,就是實現兩個二進制位的加法。
之所以“半加”,是因爲輸只有兩個,不考慮其他運算產生的進位。
它的兩個輸位,只允許傳兩個1位的二進制數:1或者0。
輸出的運算結果,也有兩個二進制位。
一個SUM位,表示“和”;另一個則是Carry位,保存著“進位”信息。
比如……
輸:【1,1】,則輸出【1,0】
輸:【1,0】,則輸出【0,1】
輸:【0,1】,則輸出【0,1】
輸:【0,0】,則輸出【0,0】
輸出中,前面的是Carry位,後面的是SUM位。
如果單看SUM位的取值,這不就是把輸進行了XOR(異或)運算的結果嗎?
再看Carry位,它的取值也很有規律,就是個AND(與)邏輯。
沒錯,就是這麼簡單。
只要將一個“異或門”,並聯上一個“與門”,一隻半加就做了。
做好了這隻半加後,江寒又將其改造了一下。
爲了減工藝難度,統一基本元件的種類,可以只用“與非門”,去實現所有的邏輯運算。
江寒很快就完了這個計劃。
畢竟一隻“半加”的構造,實在很簡單。
當然,這裡也可以使用“異或門”或其他什麼門,效果都差不太多,沒什麼本質的區別。
江寒試著將這隻半加扔進了“回收站”。
也不知道,這麼簡單的“半加”,到底值多積分?
結果沒什麼驚喜,只有可憐的1.6分,遠遠不能保本。
好吧,繼續改進。
接下來,江寒將“半加”改造了“全加”。
和“半加”相比,“全加”只多了一個輸位。
也就是說,輸端包含了3個二進制位。
之所以這麼做,是考慮到了來自其他數位的進位。
“全加”有多種設計。
最簡單的設計,可以用兩個“半加”,加上一個“或門”來實現。
多個“全加”級聯,就了“多位全加”,也“加法”。
隨後,江寒還實現了另一個基本運算件:“增量”。
“增量”的功能只有一個,給輸的數據加1。
隨後,在以上工作的基礎上,就可以打造出可運算n位二進制數的“加法”了。
但在實現之前,江寒再次打開“商品列表”,買了幾張“空白圖紙”。
這玩意是他前幾天翻閱元件列表時,無意中發現的。
其功能也很簡單。
將其與任何作品一起回收,系統都會自生對應的圖紙,並將其收納於【圖紙列表】中。
說實話,江寒對這個功能還是欣賞的。
儘管要多花一些積分,但至省了手繪圖紙的麻煩。
江寒將一隻“與非門”和空白圖紙一起扔進了【回收站】。
點擊了確認以後,作品與空白圖紙同時消失。
幾乎與此同時,圖紙列表更新了,多出了一個《與非門》的條目。
這樣,以後再構建複雜元件時,就不用每一個“與非門”都手了。
代價只是稍微多花一點點積分而已。
江寒試驗了一下,發現自構建一個“與非門”,需要花費27.2分。
這個電路只需要5個晶管,價值25分;導線等等算0.2分。
這樣,江寒只需要額外多花費不到8%的積分,就可以自化生產基本部件,從而避免了大量的重複機械勞。
接下來,他又將“半加”、“全加”、“增量”……全都製作了圖紙,留待以後使用。
沒辦法,誰還沒有一點兒收集癖呢?
接下來,江寒就讓系統幫忙,大批量生產“與非門”。
點開圖紙列表,然後手指飛速點:【與非門】、【確認】、【與非門】、【確認】……
十分鐘後,工作臺上已經出現了一大堆“與非門”電路。
與手工打造相比,自構建的與非門有一個明顯的優點:規格、造型都極爲統一。
這無疑是一件很好的事。
接下來,江寒將這些“與非門”連接了“加法”。
這是一隻32位的加法,最多支持32位有符號數的加法。
接下來,江寒開始進行今天的最後一個大工程,打造一隻“算數邏輯單元”,也就是ALU。
其包括32+32位的輸(x,y),和32位的輸出(out)。
此外,部還實現了一些函數,並設計了6個輸標誌位:zx、nx、zy、ny、f、no。
每個標誌位分別實現不同的基本指令。
如zx表示輸的x置0,nx表示對輸x取反,no表示對結果按位取反……
f爲0時,執行add指令,做加法運算;
f爲1時,則執行and指令,進行位與運算……
通過這些標誌位的不同組合,還可以實現更加複雜的功能。
6個標誌位,最多允許理2^6,也就是64種不同的指令。
此外還有兩個狀態位:zr和ng,據運算結果,將它們置0或1。
這個ALU可實現的功能,包括輸數相加、相減、位與、位或、取反、取相反數、自加1,自減1、清0、置1、置-1……
隨後,江寒利用剛纔生產的一系列“與非門”,將其手工搭建了出來。
經過反覆測試,所有功能都能正確執行,這也就意味著,這隻超簡易的ALU,到這裡就算打造功了。
接下來,當江寒試著將其扔進回收站時……
“咦?居然值3024分?”
而本纔不過1800多分,也就是說,每臺淨賺將近1200!
雖然回報率很可觀,但用這玩意來刷分,並不會比“無線電發送裝置”更有效率。
因爲,打造起來實在太麻煩了,足足3個多小時,才能打造出一個。
而且,每時每刻都要極度小心、細心、耐心,無論哪個地方,都不能出一點點小問題,否則,都會導致全盤失敗!
不過,江寒很快就想到了一個可能。
江寒將其和一張“空白圖紙”一起扔進了“回收站”,賣掉。
然後去圖紙列表裡看了一眼。
【需要花費積分1890+1238點,是否自構建?確認/取消。】
江寒開心一笑。
不錯!
隨後點擊了【確定】。
只多花了不到100分,就將ALU再次購買了回來,還額外獲得了一張圖紙。
接下來,就是繼續提高設計複雜度,做出真正的CPU來!
當然,這不是一朝一夕之功。
今天已經很累,就先到這裡。
以後每天晚上來做一點,估計幾天之後,一個簡單的晶管計算機就能出爐了。
至於X86兼容機,就稍微麻煩一些,可能得努力一個月以上……