1. 程式人生 > 其它 >看小說能學計算機原理?!

看小說能學計算機原理?!

《從美國1890年人口普查到IBM公司的崛起——淺談機械式計算機的歷史貢獻》《“分析計算機”的三種基本裝置與通用計算機體系結構的源流》。

The Punched Card Tabulator下面是穿越小說《臨高啟明》中的片段[在原文裡查詢 命題 ]:

第1讀卡位排除第5位不是0的卡片,這就區別了臨高和瓊山,第2讀卡位排除第7位不是4的卡片,這就挑出了加來公社。戶主姓林,林的區位碼是3354。用第3-6讀卡位選出戶主姓氏3354的卡片。7-10位就過濾一下戶主名字的後一個字。區位碼是2752。設定好了分類機後,馮諾打開了機器的開關,卡片開始唰唰地分類了。2個小時多一點。對於分類1萬張卡片來說,速度還挺快。

最多可以支援10條件分類。雖然每套讀卡系統只有1個讀卡觸輥,每次只能讀1個孔。但是這個觸輥的位置是可調的,可以分別調整對準不同的列和行。我在每個送卡繼電器上游又加了一個控制繼電器,上面有個開關,可以選擇啟用或者不啟用。這樣,相當於可以給控制送卡機構的繼電器取反了。既可以選擇送出所有穿孔的卡片,也可以選擇送出所有不穿孔的卡片。

從理論上來分析一下,我們的分類機能解決什麼樣的問題,不能解決什麼樣的問題。

首先,排序。毫無疑問,這個問題是可以解決的,我們把10個讀卡單元上的讀卡觸輥對準同一列的0-9,則卡片就會按照這一列的數字被推送到10個卡袋中,手工把卡片重新合成一疊時,這些卡片就是按這一列數字的大小排序的了。

其次,單條件分類。‘把所有卡片分為男性和女性兩疊’。這個完全可以完成,只需要開啟1個讀卡單元,對準性別列的0孔,性別為0,也就是女性,會被推入卡袋,男性則不會。

第三,多條件分類。這就需要具體分析了。假設我們現在有整個東亞地區的戶籍卡片,我要找出海南臨高加來公社的卡片,該如何操作?

讓1~4號讀卡單元依次篩選出戶籍所在地前4位為‘1001’的卡片;然後讓5號讀卡單元把戶籍所在地第5位為‘1’的卡片推入5號卡袋,這些是三亞榆林的卡片;讓6號讀卡單元把戶籍所在地的第5位不是‘2’的卡片推入6號卡袋,此時機器上剩餘的是三亞田獨的卡片;讓7號讀卡單元把戶籍所在地第6位不為9的卡片推入7號卡袋,這些是三亞田獨11~89公社的卡片;讓8號讀卡單元把戶籍所在地第7位不為9的卡片推入8號卡袋,這些是三亞田獨90-98公社的卡片…… 合併5號、7號、8號卡袋的卡片即為所要的結果。

找出住在十三村和百仞公社的姓名為‘劉四’的人;二,找出原籍為福建和海南的人。這兩個問題都不能解決。為什麼?原因不同,第一個問題不能解決是因為讀卡單元不夠。要確保卡片上的姓名是“劉四”,需要確保卡片上儲存姓名的列是“劉四”的8位區位碼,這需要8個讀卡單元排除不符合條件的卡片,可以說,到達第9個讀卡單元的所有卡片,姓名都是“劉四”。但是,此時分類機只剩下兩個讀卡單元了,百仞公社是‘11’,十三村是‘18’。可以用9號讀卡單元把戶籍所在地的第6位‘公社’不為‘1’的卡片排除,此時機器上剩餘的是11~19公社的‘劉四’。其中,可以用10號讀卡單元把第7位為‘1’的卡片推入卡袋,這是‘百仞公社的劉四’,但不足以把‘十三村的劉四’從剩餘卡片中分類出來了。所以這個應用不能被完成。

不能做‘或運算’。

我們要找任何卡片,總有一系列的條件對目標卡片進行描述,這一系列條件,我們叫做‘命題’。這些條件反應在篩選手段上,就是穿孔卡片上的某個孔‘是否’穿孔。注意,也就是說,每個命題存在兩種可能性,是和否,我們稱之為‘真、假’。”

“現在我們有了兩個概念,命題、真假。最終,一張卡片,是不是我們所要的卡片,往往有許多條件共同限定,每個條件是一個命題,那麼我們的最終目標,就是由許多命題合成的一個新命題,我們可以稱之為‘複合命題’,組成複合命題的每項條件,可稱為‘簡單命題’。自然,‘複合命題’也有‘真假’。”複合命題由一個或多個簡單命題合成,那麼其合成的方式,我們稱之為‘聯結詞’。複合命題的表示式為:‘(a∧b∧c)v(a∧d∧e)’。”

“我們的分類機是如何判斷真假的呢?是通過檢驗穿孔卡是否穿孔,也就是說,分類機的每個讀卡單元,能夠判斷複合命題中的一個簡單命題的真假。同時,通過一個控制繼電器,我們可以讓每個讀卡單元,判斷僅有1個‘非’聯結詞的複合命題,也就是一個簡單命題的非命題的真假。”

而經過k號讀卡單元后機器上剩餘的卡片,可表示為┐p1∧...∧┐pk,即以┐p1為開頭的連續‘與’運算。”

“所以,凡是能變換成上述形式表示式的命題,就是分類機能夠查詢的,否則,就是分類機不能查詢的。”

“而‘(a∧b∧c)v(a∧d∧e)’,無論我們怎樣變換,是不能變換成上述表示式的,因而是當前的分類機所不能解決的。”

“好,問題來了,怎樣變換表示式?”“根據這些運算律,可以把邏輯命題的表示式變換成各種形式,不過,一般我們會變換成連續‘與’的‘或’,或者連續‘或’的‘與’,稱為析取正規化和合取正規化。”

“這就要求我們的每個讀卡單元,不是僅能判斷一個簡單命題的真假,而是能夠判斷多個簡單命題構成的合取項或者析取項的真假。反映在分類機設計上,就是把讀卡單元目前僅包括1個工作繼電器和1個控制繼電器的簡單電路,改造成包含多個繼電器的開關電路。”

你這個製表機不能累加,和驗鈔機有什麼區別?

其一,因為穿孔卡上的資料是在1列或連續若干列上分別打孔表示每位的數字,因此計算總和只需分別統計每一列中的各個孔在所有卡片裡一共被打了幾次,這個靠簡單的計數器就能完成。

接下來,再人工把每列各孔的次數乘以該孔的取值後求和,然後各列的總和再根據該列代表的是十位/百位乘以10或100,最後再求和後就可以了。雖然最終結果要用另一個計算器或者人工單獨計算,不過反正現階段製表機的結果也需要人工抄在記錄裡。

這並不是真正的累加器,但霍勒裡思的製表機就是這麼做的,機械設計也最為簡單,只需要讓繼電器或者繼電器驅動的擒縱叉撥動數盤轉動即可。

其二,先不將主動力齒輪與數盤的轉動軸直接齧合,而是用繼電器控制連線二者的齒輪,只有數字0-9對應的某個繼電器通電時,主動力才能驅動相應的機械結構轉動數盤。

此時,可以分別使0-9對應的機械結構在撥動數盤時的操作不同,或是多次撥動,或是一次撥動多位,達到各孔數字一同累加的目的。至於進位,與第一方案相同,採用在低位數盤的9和0之間新增繼電器驅動高位數盤轉動來完成。

這樣的機械結構略顯複雜,肯定也更佔用空間,優點是合併了每列各孔的累加,避免了大量的人工計算乘法以及求和,進而連進位問題也可以解決。最終數盤上的數字就是累加的結果,所見即所得。

最後,就是單純地用繼電器搭建二進位制累加器的方案了。在理論設計上難度不大。然而,鍾博士在會中散發了他找到的舊時空某繼電器狂熱者搭建的全繼電器版算術邏輯單元ALU圖紙,資料圖片上像蜂巢一般密密麻麻的繼電器令與會者頭皮發麻。某個密集恐懼症患者當即要求出去休息一會“透透氣”。

百度百科

區位碼

“其實中文編碼問題不難解決,問題是佔用空間太大。”

“1980年頒佈的《資訊交換用漢字編碼字符集》,通稱GB2312編碼,不僅僅規定了漢字在計算機上的表示方法,其實也定義了一套使用4位十進位制數字表示漢字的方法,就是區位碼。區位碼收錄了一級漢字3755個,二級漢字3008個,符號682個,基本滿足當前需求。所以最簡單的中文編碼方法就是每4列編碼一個漢字,大家以前高考的時候都塗過自己的姓名,當時用的就是區位碼。”

簡易CPU的設計和實現_阡飛陌-CSDN部落格_cpu設計 1.1 Verilog 教程 | 菜鳥教程 (runoob.com)