陳凱
在計(jì)算機(jī)發(fā)展歷史上,有一些著名的發(fā)明物或者模型的名字,被人們反復(fù)提及,如帕斯卡的機(jī)械加法機(jī)、巴貝奇的差分機(jī)、圖靈的圖靈機(jī)以及被譽(yù)為第一臺(tái)通用電子計(jì)算機(jī)的ENIAC等。
教材或科普讀物上,照片最多顯示這些物品的一個(gè)側(cè)面,圖像往往還不怎么清晰,在博物館里,人們也只能隔著玻璃觀看復(fù)制品。其實(shí),我們可以通過網(wǎng)絡(luò)搜索到許多模擬器,并依靠軟件的力量使這些經(jīng)典計(jì)算機(jī)重新“活”過來(lái)。
在地址為http://zuse-z1.zib.de/simulations/eniac的網(wǎng)頁(yè)上可找到一個(gè)比較完整的ENIAC模擬器(如圖1),既可以在線運(yùn)行,也可以將程序下載到本地運(yùn)行,程序需要Java運(yùn)行環(huán)境。如果在國(guó)外的搜索引擎上搜索“ENIAC simulation”,還可以找到其他類似的模擬器。
這臺(tái)虛擬的ENIAC不僅可以用來(lái)觀賞,還可以像實(shí)物一樣運(yùn)行,模擬器內(nèi)置了三個(gè)可運(yùn)行的程序:①簡(jiǎn)單的四則運(yùn)算,②生成斐波那契數(shù)列,③求兩個(gè)數(shù)字的最大公因子。大家可以試一下運(yùn)行求最大公因子的程序,如圖2中兩排旋鈕輸入的分別是24和16。
輸入數(shù)據(jù)后,點(diǎn)擊運(yùn)行開關(guān)“go”,就能看到一個(gè)累加器模塊面板上的指示燈在不停地跳動(dòng),這些燈從0跳到9,然后又跳回0,同時(shí)發(fā)送一個(gè)信號(hào)給另一個(gè)累加器模塊,可以看出,ENIAC的運(yùn)算方式是逢十進(jìn)一。當(dāng)燈不再跳動(dòng)的時(shí)候,指示燈所在位置就是計(jì)算結(jié)果(如圖3)。
當(dāng)然,如果遇到大量的數(shù)據(jù)需要輸入輸出,就需要用穿孔卡片。ENIAC使用的是IBM生產(chǎn)的穿孔卡片機(jī),有興趣的朋友還可以用國(guó)外的搜索引擎搜索“IBM Cardpunch simulation”,來(lái)試試怎么將信息存儲(chǔ)在穿孔卡片上。
如果要改變運(yùn)算程序,就必須重新連接面板上的電線,大家可以從簡(jiǎn)單的四則運(yùn)算程序著手,學(xué)著重新布線,圖4是5×X+Y的運(yùn)算結(jié)果,圖5是X+5×Y的運(yùn)算結(jié)果,大家可以仔細(xì)找找兩者的區(qū)別,是不是有點(diǎn)像“大家來(lái)找茬”的游戲?所以說,給ENIAC“編程序”是一項(xiàng)十分傷腦筋的任務(wù)。