簡述計算機軟硬件系統的必要基礎知識;
著重討論數據處理這一概念——包括數據的收集、轉換、表示、傳輸和處理(以及處理的環境及標準化和應用的特點)。
對於數據處理的許多基本技術、設備和概念都做了詳細的圖解和說明。
第一章 數據處理概述
本章就數據處理的一些基本概念作一般地討論。
數據處理(Data Processing),常記作DP或EDP(電子數據處理),此詞在商業方面用得較多。
何謂“數據處理”?
首先,我們要知道什麽叫做“數據”。
數據可簡單定義為——那些被處理后能產生信息的東西。即,數據可被認為是任何的基本事實。而信息可被看作是我們借助於數據(基本事實)作出行動或決定的有用的東西。→那麼,利用一組基本事實去產生信息的過程就是所謂的處理。
商業上,數據可以是關於工作時間、接收票據、庫存量以及供貨單位和顧客地址的事實。所有這些大量的數據都需要去收集、排成順序并組合或表示出來,以利於人們去管理商業。如,一份交給顧客全部貨物的清單以及他們所付的款數就是一組數據。現在對數據作出處理——把那些過期還未付款的顧客挑選出來,列成一份清單,這份清單上的數據是有用的(對商家而言),這些數據就是信用管理員所需要的信息。
認識到數據的定義之後,我們就必須考慮其中所涉及的定義要素。
首先是處理。
數據一般被認為是能輸入到某個處理系統中去的一些事實。而就處理而言,不局限於計算機系統。因為不僅計算機能對數據進行處理,人也能對其進行處理。因此,觀察人如何處理數據信息,我們可以找到計算機進行數據信息處理的模仿對象/方式。
你可以對日常數據進行觀察。OK,我們的結論是:數據的表示存在三方面要素。就數據本身而言,其是以符號/文字/圖案等具象方式存在的。因此數據的表示使得數據得以存在,而能為人所處理/感知的數據。因此其表示附帶相應的要求。
一則,以適當的方式提供——即數據應該用一種可以被我們理解/懂得的語言來表示/書寫。
二則,數據要求有適當的精確度。例如,天氣預報不可能給出準確的數字,但實際上,觀眾只需要能夠感官上認知天氣冷暖的數據即可;而牛奶成份指示器則需要絕對的精確和正確,因為顧客需要這個精確度來判斷牛奶的質量。這說明數據表示時需要恰當的精確度。
三則,數據需要形象的表示方法。既然人對數據的表示是有要求的,(即並不是任何形式的數據都可被人接受/理解,更別說處理了)那麼恰當/正確的數據表示方法就是能讓數據滿足這些要求的存在。例如,公墓的墓碑上刻有碑文,碑文要求保留很長一個時期,因此用石刻的方式。而路況廣播所傳遞的信息只是憑司機當時的聽覺,因此可以用無線電波的方式傳遞數據信息——滿足了瞬時效應和清晰度要求。
數據是用來幹什麼的,這一目的就決定了信息的特徵。
數據經過處理便產生輸出——信息。這種處理也許很簡單,也有可能很複雜。
買東西的例子事實上還說明了數據處理系統的另一個共同特性。如果主婦本人不親自到商店去,怎麼辦呢?她可以拜託她的鄰居去幫她買這些東西啊。她只要把購物清單交給鄰居就可以了。這時,主婦這個處理系統的輸出就變成了鄰居這一處理系統的輸入了!數據處理系統常常就是一環扣一環,這一階段的輸出構成下一階段的輸入!
明確了數據處理的輸入和輸出內容,我們還需要瞭解處理的內容。
科學家經過觀察,總結認為,處理可以看成由下列活動的一個或多個組成:
——計算(例如,需要的食品量與庫存的食品量之差)
——比較(例如,已有的方案里,是否有某種情況存在?)
——邏輯(例如,按正確的順序進行算術運算)
——決定(例如,賭馬,猜測哪匹獲勝)
上面的例子,都沒有涉及到任何機械或電子的處理形式,因為它們都是比較瑣碎的事情或者說完全不適合機械處理。適合機械處理的多數作業是在商業和工業領域中,而非普通家庭環境中。
那麼,適合機械處理的一個數據處理系統是什麽樣的呢?
機械適合于做一些涉及到重複性工作的事情。
只有一個作業要做的地方,採用一個簡單的機械就行。若有多個作業或者多個子處理一次完成,那麼有可能要考慮全部的機械化。
因此,重複性的工作是一個有利條件,而可自動操作的順序是另一個有利條件。
從而,我們可以設定計算機作為處理電子數據的機器,按照輸入-處理-輸出的順序來進行。對於這三個不同的階段,通常都設有一個單獨的設備。
首先來看輸入。人類通過感覺來獲取外界數據/信息,文字中傳遞的數據/信息通常是由我們的眼睛獲取到的。計算機并沒有眼睛,但它有一個能完成類似工作的設備——輸入設備。例如,某些計算機的輸入設備設有光敏元件,它們可以掃描預先準備的數據,并把明暗不同的圖案轉換成計算機可用的電子信號。這就相當於人的眼睛將信號送給大腦。
另一種形式的輸入設備,即打字機上的鍵盤。它連於計算機,按一下鍵就產生一個代碼電子信號。
同樣,有多種方法能是計算機產生它的輸出。恰當地從這些方法選取才能順利地完成計算機作業。
輸出可以通過一台打印設備,一台和打字機一樣的小型設備或一台高速的大型設備產生。對於那些不需要打印的記錄,可用電視螢光屏顯示輸出。
再來討論處理。上文已闡述過,計算機是一個處理系統,我們通過對人這一處理系統的觀察,進行了計算機處理系統的設計。因此,處理系統的要素不變,仍是輸入,處理,以及輸出。
計算機由輸入、輸出設備和一個中央處理器(CPU)組成。
CPU擔負處理的職責,處理的內容就有——計算、比較、邏輯、決定。
目前,CPU設計有一個運算器(AU)——負責算術、比較、決定;一個存貯器(內部存儲器/內存)——存放輸入的數據、中間結果、最後結果、程序(即使一個簡單的任務,長春也涉及到一個以上的操作。如(5+6)×26這個代數式的運算,並且,除了不只一個操作這一特點外,運算時,正確的運算順序也十分重要,譬如(5+6)×26與5+6×26的運算結果不一樣。);一個控制器(CU)——控制程序的執行順序。
通常,當我們給定一作業讓計算機來做時,必須將作業排成一個操作表,我們把這種表稱為程序。一個表就代表一個計算機的程序或一個事件的程序。程序/操作表跟數據一樣,存放在CPU的內存中。通過以上敘述,現在可直接對數據處理的兩個系統進行比較。
對於這兩個處理系統,我們做了如下抽象:
在人工數據處理系統中,辦事員按照自己的手工操作過程親自控制操作順序,並且每當完成一步,他就去處理下一步。當他完全處理了輸入,並且產生了輸出;他有得繼續進行下一個輸入的處理工作。這種採用相同方法的重複工作一直到IN文件架上空了,或者他要轉到某個其他的任務(比如午餐間隙)才會中斷。
而計算機完成這種處理,通常是直到那裡沒有任何的輸入了或者遇到了一個終端信號,改終端信號發送給控制器(CU)并告訴它轉到更高優先級的作業。
第二章 處理的主要類型
本章對那些特別是在商業環境中適合計算機的集中數據處理類型進行討論。
一個操作執行的越頻繁,適合自動化處理的可能性就越大。
工資管理一直是計算機的一個傳統任務。
每個雇員的數據量是相當小的,例如工作小時、等級、發款日期等。需要的主要結果也很小,如工資變動情況;儘管計算工資的規則相當複雜,但是這個規則對每個雇員卻是完全相同的。因此,一旦設計好這種指令程序,就可用於任意多個雇員了。
這一類的應用就叫做成批處理——以信息週期為單位,把數據收集起來,集中進行處理,這種處理需要一些時間,一次處理結束之後,在下一個週期重複進行相同的整個處理過程。
處理系統的應用還有另外一種類型——聯機處理,這時信息並非成批收集起來進行處理,而是立即進行處理。有些作業按這種方式進行處理會更加有效。
第一章中,家庭主婦總需要不斷重複家裡食品的儲備工作,工業中也有類似。爲了保持必不可少的物品的儲備,必須按照下列因素來重新訂購物品:什麽物品預計會被使用;當前的庫存量;預計的交貨日期;以及購買策略。→並非所有庫存物品都要進行一次重新訂貨,而計算機的速度卻是允許把整個庫存量檢查一遍并指出短缺物品項目的,這可以大大提升工業運作的穩定性。
計算機還能隨時保存使用的記錄,然後按一定比例進行綜合預報。這項工作如果用手工來做會花費很多的時間、金錢,但人們使用計算機卻可以在費用和對大數據量的處理需求之間找到平衡。這是成批處理的一種應用。
廣義來講(泛泛而言),一個工資管理系統就是一個辦公室工作過程的在線,但在一個庫存控制系統中,一個計算機化的系統要比一個辦公室工作系統的執行能力強的多。
儘管處理過程簡單,但若涉及到大量需要被處理的數據/對象/文件的時候,使用計算機很是非常值得的。例如,政府互助協會需要對投資者和借款者的帳目做大量的存儲記錄;類似銀行要保留其大量顧客的帳目文件等等。
目前,我們只討論了人言所能識別的數據——如字母或數字,並非所有的數據都是如此的!在過程控制中,數據可能是溫度,物資的流量或者重量,或許還會存在著一種要求,使上述數量限制在可容許的範圍之內。這時,每一個數據採樣經過檢查也許會引起校正動作,最好在下一個數據取樣之前完成這個校正動作。這類處理就叫做實時處理。
當前,實時處理已經越來越多,如導彈系統,反導彈系統和交通管理系統。
2.7 分佈式數據處理
很多商業機構分佈在廣闊的地理區域內:如銀行、國稅局、民航局。同一商業機構,都需要存取公用的商業信息。一種辦法是一個中央計算機內保留所有的信息,并在遠程(遠處)的辦公室打電話更計算機中心聯繫,讓一個操作員去詢問計算機。另一種辦法是直接將遠距離辦公室跟忠言計算機聯結起來,這要借助於這個國家的郵政電話服務機構。
這樣,在一個銀行的分行,就可以從計算機文件中查找出任何帳目的平衡情況,並且能就地顯示出來,同時將請求發送給計算機中心,然後通過電話線再把回答送回到分行。有時對一個本地的辦公室來說,在送往計算機設備之前和從該設備接收之後,最好先把本地辦公室的信息處理一下——這件事由本地的CPU來做。
用這種方法,一個零售的分理處就可以在本地計算機上提供發票和加工訂單,為匯總帳目而把這些數據發送到中央處理機,而且還能接收到其他分理處庫存情況的信息。這種計算機和終端的網絡就叫分佈式數據處理,包括了數據傳輸。
第三章 存儲程序的概念
計算機程序在CPU的存儲器里。
最早的一個程序的定義是:一個程序是一個指令表。
或者更確切地說:一個程序是一個計算機可識別的指令表。
上文中,我們說要執行某個作業,我們需要把它的執行步驟變成一個操作表,即程序。而由程序的定義(一個程序時一個指令表),我們可以知道,指令表就是操作表。則指令即操作。
而我們確切地指出了——一個程序是一個計算機可識別的指令表。那麼,什麽樣的指令才能被計算機識別呢?
還記得前文中我們對操作的分類么?
指令即操作,則指令也可分為計算、比較、邏輯、決定四個內容。
在計算機中,它們分別對應於算數運算指令、判別指令、轉移指令和I/O指令。數據的獲取(輸入)是爲了用來運算,運算是爲了比較(判零),比較是爲了改變執行順序(轉移),按要求的順序執行是爲了得到結果(輸出)。
把一個程序直觀地描述出來,最簡單的方法就是用一系列的方框,每一個方框里都含有一個說明,並且把這些方框用流線按其先後順序連接起來。這就是所謂的一個“流程圖”。
程序流程圖就是前文中所述操作表/指令表,這個名稱只是對四種類型進行不同的表示及關聯方法設定后取的一個新的稱呼,代表它符合公認的表示規範。
下面舉個例子說明。例子:根據本周周號推算下周周號(周號範圍在1-52)。
上文中的流程圖直觀地反映了一個作業的完成步驟,它就是我們最早提到的操作表!我們用有統一規範的語句將它們表示出來,這就是源程序啦,源程序的每一個步驟就是一個指令/操作。圖中同樣還反映出計算機在做判別時是需要判零的哦。
基於上文已做的鋪墊,我們來細細考慮一下計算機數據處理系統的處理過程吧!
首先,獲取數據(輸入)。誒?不對啊,計算機不是很笨嗎?小猴子說,它只能判零啊,既然如此,這麼笨的傢伙怎麼知道什麽叫做獲取數據?
好吧,讓我們來看看目前的技術是怎樣解決這個問題的。
(某些頭腦異常的傢伙)經過仔細觀察,得出結論——程序中所用到的數據可以分為兩種:
——輸入數據,通常是變量和未知量(如,上例中的本周周號),以及變量結果(如:下周周號);
——程序數據,多事不變的已知量(如,上例中1和52);
想辦法讓程序知道要找的數據在什麽地方,並且讓它知道去做什麽。所以可以把一個程序步或指令剖分為下列步驟:
——去做啥,即操作;
——在哪兒,找到參加運算的數據存放地。
利用計算機可以進行判零的特性,我們把計算機存儲器編以不同的地址標號。事實上,一台計算機的存儲器可分成許多大小相等的存儲單元,并給每個單元都分配一個標誌號,稱之為地址。由於從一開始,地址系統就是從零開始算起的,因此,通行的規範是從零開始對存儲器編號。
上文就已經說過,我們把程序也同數據一樣存放在存儲器里。如此,程序指令和數據都有了可以被計算機判零的編號,傻傻的計算機就可以干各種複雜的工作了!
歷史上,第一台大規模計算機(1946年美國製造),即電子數字計分計算機,它在具有好幾百個插頭和導線的插件板上設置了程序代碼!這種辦法在程序之間差異大的情況下,極易出錯,而且很費時;而就在新中國成立的同一年(1949年),劍橋大學研製出第一台內部存儲程序計算機(EDSAC),EDSAC就是把程序同數據一樣存放在存儲器里的,然後計算機從程序起點處的指令開始一次執行這個程序。當一條判別指令到了滿足條件的地方時,它就必須轉到別處去執行另一條指令。OK,如此,計算機需要的就只有兩個東西了——指令/操作和地址。
由此得出計算機存儲器編址的三個要義:
——存儲器里的數據和指令時存在不同的位置的;
——每條指令包含一個指令內容(即操作)和一個地址(至少一個地址);
——地址就像門牌號,一個地址號對應的內存單元存放的可以是數據,也可以是一條指令。
計算機最強大的功能之一就是重複執行一個過程哦,所以我們往往需要一條轉移指令來讓它重新進入前面已執行過的程序。
下圖就是一個典型的存儲程序的邏輯圖。
3.6 累加器與寄存器
在周號的例子中,當我們從本周周號里減去52時,那麼原來的結果就被破壞了。這種破壞性的運算可能是非常麻煩的,因此通常都用另外的叫做寄存器的存儲單元(可以對初始數據、中間結果及結果都分配內存空間,使數據可以逆向尋回)來做這種運算,而這些寄存器中的主寄存器常常又叫做累加器——如果累加器的內容為0/非0,那麼就轉移。
其他寄存器是用來做算術的,這種算術有些指令本身就可以做,尤其是修改地址——叫做“變址”,這些寄存器就稱為變址寄存器。它們和累加器一樣,也能做判別,但只能判零。
對不同的操作數(它們的地址有一個簡單的相互關係)進行同一種操作時,就要用到變址寄存器。
如,我們要把地址100,101,102,……,109的內容加起來,那麼程序就應該像下面這樣:
0 清累加器[將累加器置零]
1 Add(100)[將100的內容加到累加器中]
2 Add(101)
3 Add(102)
4 Add(103)
5 Add(104)
6 Add(105)
7 Add(106)
8 Add(107)
9 Add(108)
10 Add(109)
11 Print(累加器的內容)
3.7 修改地址是個問題
如果我們能把一個變址寄存器的內容跟地址加起來表示修改地址,那上面的程序就可以短多了!行不行呢?
作如下嘗試:
恩,我們把變址寄存器加上一個圓括號,就像(IR)一樣,用來表示一個變址寄存器的內容。現在,一個地址的內容就可以寫成(100+(IR)),如果IR地址的內容是5,則這個式子表示的就是地址100+5或105的內容~。
這時程序可以改寫成:
0 清累加器
1 清IR
2 Add(100+(IR))
3 Add 1 to (IR)[(IR)+1→IR]
4 IF(IR)=10,Jump 6
5 Jump 2
6 Print(累加器的內容)
如此,我們已經節省了幾條指令,雖然在此省的不多,但要是在一個很長的程序按這個比例去省的話,那麼將會省很多指令。所以,這樣的考慮是有價值的。
程序中的另一種要求就是在不同的地方要作同一種處理。爲了避免多次寫這段程序,我們只須對該程序引入一個專門的入口和出口過程,使其在整個程序中只出現一次。這就是子程序。
在進入一個子程序之前,程序必須在當該子程序執行完時,把要被執行的指令的地址存儲起來。這種附加的地址叫做“鏈地址”(指針),而且子程序的最後一條指令總是“GOTO鏈地址”(首/尾指針)。
目前我們談到的程序實際上都在計算機的存儲器里,這樣的程序,要能夠被使用就要有各自的實際地址,計算機根據這些地址來識別它們。而真正的計算機指令是下面這樣的:
11100101
10001000
11011101
……
這是“機器代碼”指令,計算機只認識這種形式的指令(即可以判零)。
你願意用上面這低級又特別繁雜的方法來寫程序?
如此浪費時間,還容易出錯,這可不是明智的選擇。這不,後來就發展了更好的辦法。這裡,我們只討論兩個主要的改進——自動翻譯程序和高級程序語言。
爲了和只會說機器代碼(即0和1)的計算機進行交流,我們做的第一個改進,就是發展了一個自動的翻譯程序。
利用這個自動翻譯程序,就不必用二進制數11000011來表示地址195了,只需要給這個地址取一個名字,比如“A”,“B”,或“TAX-PAID”。每次用到這個地址的時候,翻譯程序就可以自動地將他轉換成正確的二進制代碼。
這樣,我們要記的就是名字,而計算機來記憶那個名字對應的二進制數字地址,找到該地址里存放的數據或指令。
還是爲了和只會0和1的計算機溝通,第二個改進可謂聲名遠播——它就是我們現在編程時使用的高級程序語言。
這個改進是基於第一個改進的。有了自動翻譯程序后,我們可以使用人意識里已有意義的代號來表示不同的二進制數,而如何映射全憑自動翻譯程序的設計者喜歡。我們對自己說的語言進行剖析,然後再仿照我們的日常語言給那些莫名其妙的二進制數加上代號,如此,高級語言就誕生了。
高級語言使人的工作變簡單了,好記又快,而且又精確(一個代號對應其固有的二進制數,而人工輸入二進制數的話很容易被密密麻麻的0和1弄得眼花繚亂以致出錯)。用高級語言寫的程序指令就需要多一步處理——由機器/翻譯系統翻譯成機器代碼。各種高級語言都各自有一個專門的翻譯系統。
翻譯系統事實上是一個計算機程序,我們稱之為“編譯”程序,它能接受程序員的指令,又能輸出機器碼指令。
現在,你對計算機是否有一個明確的認識了呢?
一個計算機程序就是計算能能夠按其說明的順序去執行的一組指令。指令有四種類型,即算術指令,判別指令,轉移指令,輸入/輸出指令。
高級語言允許用較簡單的,更容易明白的形式去編寫計算機程序,但用高級語言編寫出來的程序要通過編譯程序翻譯成機器碼。
計算機的存儲器是由一組經過任意編號的單元組成的,這種單元能保存指令和數據。尋址一個存儲單元常常是通過一個名字或者標號,而非難於記憶的二進制單元號(還容易出錯)。
在高級語言和機器碼之間的語言是彙編語言或低級語言。這種語言也是要通過翻譯程序才能變成機器碼。
讓我們回到開始,我們對生活中的工作進行了觀察,發現我們在做的事情實際上大多數都是數據處理。接著我們對“數據”的概念進行了思考,給出了一個可行的原理體系——數據-數據處理-處理系統-輸入,操作/處理過程與輸出-操作/處理過程-操作表-指令表/程序-指令-機器碼指令-改進指令-翻譯系統/編譯程序-高級程序語言指令,至此,我們對問題的處理才從身體力行轉變到了只要動動手指頭交給計算機去做的地步,而這樣的變化在計算機及高級程序語言誕生了迅速蔓延開來,我們的社會發生了巨大的變化——這邊是二十世紀中後期發生的轟轟烈烈的第三次技術革命!
事實上,我們意識里的數字幾乎都是默認其為十進制數為前提的。
十進制只是一種計量數量的方式,我們剛好有十個手指,所以人類選擇了十進制,但計算機沒有十個手指,它只有高電位(電路通路)和地電位(電路斷路)兩種狀態,所以它只認識0和1,因此,計算機使用二進制。
就像九九乘法表一樣,進制轉換表需要你爛熟於心。當記住,我們已經學過的加、減、乘、除都是十進制的,因此,你做進制轉換運算時,若沒有特殊聲明,都被認作(包括你自己)是十進制運算哦!
下面給出一個進制轉換的例子:
需注意,計算機不僅只是“數字”計算機,還有模擬計算機。
模擬計算機中,我們用量來表示數(無論採用生麼數字)。量就是只有帶上單位以後才具有意義的數據。並且,“數字”意味著數據以離散的方式在計算機內表達,“模擬”意味著數據以連續的方式在計算機內表達。
第五章 中央處理器/CPU
前面已給出了數據處理與計算機的大致輪廓。因此,現在我們可從計算機CPU出發,進一步分析數據處理系統的各個部份。
CPU含有三個部份:
——運算器(AU):進行算術和邏輯運算;
——控制器(CU):控制作用;
——存儲器:保存程序和數據。
接下來,我們依次討論。
運算器只做加減法,每一次只能處理兩個值。
AU中有一個累加器和一個計數器。如果累加器(初值必須是零)搭配上計數器一起使用,就可以進行乘法和除法運算。有了加減乘除,就可以編寫簡單的數學函數,通常我們把這些函數設計成專用電路,并把這些運算構成的專用電路叫做“微程序”,裝入AU。
微程序裝入硬件后,我們可以通過簡單的機器代碼指令,如乘法,去調用這些微程序,避免代碼的繁複。
邏輯器執行的功能是按位/逐位進行比較。
計算機內有三個邏輯比較運算符:AND、OR、NOT EQUIVALENT(=NOR)。這三個邏輯運算符的主要用途之一就是對一長串的位的模式進行比較。
AU除了算術運算和邏輯運算外,另一功能是當程序指定有“轉移”或“GOTO”時進行判定操作。一個轉移的作用,就是改變計算機所遵循的嚴格的順序操作,使它去執行與緊跟著的存儲單元內的下一條指令不同的另一條指令。
轉移是AU對自身基本功能——邏輯/算術運算的再運用,可以理解為:當程序中出現“轉移”或“GOTO”→判斷是條件轉移還是無條件轉移→
→無條件轉移:給出轉移目的地地址號。
→條件轉移:判斷條件是否為真/符合事實(1)→真:轉移;假(0):不轉移。
CU實際上是一個轉接中心。它只會和協調程序指令以調用全部操作,其中包括輸入或輸出設備的啟動或停止,包括將數據送到存儲器和從存儲器接收數據,也寶庫存儲器與AU之間的數據傳送。
CU將保持計算機處理直到遇到下列三種情況之一才會停止:
1) 全部數據處理完畢,并在作業末位發現HALT指令;
2) 在系統的某處發現了一個故障;
3) 停止或中斷計算機。
由於控制器實際上是一個轉接中心,所以,我們可以通過日常生活中非常熟悉的電話交換系統(也是一個轉接中心)來間接認識它。
下圖給出一個電話交換系統:
由此,你可以想像出控制器的工作情形——一個控制器具有所有可能的數據通路,它按指令(根據自身的指令條件/原則)對這些通路的要求進行必要的連接。
當我們說到“分佈式數據處理”或“連接處理器”時,不難想像它們不過是上述這些交換機連在一起的簡單表達而已。
5.4 實際的算術運算
這裡我們以加法為例。
問題:A+B,產生一個結果C。
一條完整的指令將完成系列操作:把地址A的內容和地址B的內容相加,結果放在地址C中,然後到地址D中取下一條指令。
這個求和過程需要在基本硬件上來討論,因此,我們需要先認識三個基本硬件概念:寄存器、加法器、機器週期。
下面給出一個CPU結構抽象圖:
那麼實際的加法運算究竟是怎樣完成的呢?
首先,我們解釋一下上文所提到的三個概念:
——寄存器:一個能接收信息,保存信息以及在控制器只會下傳輸信息的設備。不同寄存器的名字跟它的用途有關。一個地址寄存器保留一個存儲單元的地址或者一個IO設備的地址;一個指令寄存器含有代執行的指令;一個累加器保留累加的值(最後結果或中間結果);一個存儲寄存器含有送往存儲器的數據以及從存儲器接收的數據。
——加法器:將兩個寄存器的數據相加,結果放在第三個寄存器里。這就是加法器。
——機器週期:計算機中,所有的操作都發生在固定的時間間隔內。通過一個i的電子時鐘一告訴發出有規則的脉衝信號來確定這些時間間隔。這些時間間隔便是機器週期,即一個機器週期(=固定數量的脉衝)就是計算機完成一個機器操作的時間。完成一條指令所需的機器操作次數取決於它的複雜性。
下面,我們回到上文的問題,我們用指令表示之:ADD A,B,C,D。
它的時序(即微程序)是:
0 把指令從所在的存儲單元(指令地址寄存器含有該指令的存儲地址)取出,放到IO寄存器。
1 把該指令放在線性的指令寄存器中。
2 把叫做ADD微程序的第一部份進行譯碼。
3 ADD微程序將住存儲地址A放入現行地址寄存器中。
4 通過讀取週期來去地址A的內容并放到IO寄存器中。
5 IO寄存器的內容放入第一個加法寄存器(如x)中。
6 ADD微程序吧B主存儲地址放到線性的地址寄存器中。
7 同5.
8 同6,將本內容放到加法寄存器y中。
9 把x和y從最低有效位(右手邊)開始想家,結果放在加法寄存器z中。
10 z的內容傳送到存儲IO寄存器中。
11 從現行指令寄存器中取出地址C并放入線性地址寄存器中。
12 通過寫週期將其結果放入C中。
13 對D做同12的處理。
14 通過讀週期吧D的內容取出并放入IO寄存器中。
15 把內容傳送到線現行指令寄存器中。
這些微程序都在控制器(也包括時鐘)的控制下進行,它們作為一個完整的功能硬化在硬件裏面。(待续)