現(xiàn)在的計(jì)算機(jī)都是以二進(jìn)制存儲的程序,這樣的計(jì)算機(jī)都叫馮諾依曼計(jì)算機(jī)。
馮諾依曼計(jì)算機(jī)特點(diǎn)
1馮諾依曼計(jì)算機(jī)有5大組成部分,運(yùn)算器,控制器,存儲器,輸入設(shè)備,輸出設(shè)備
2指令和數(shù)據(jù)以同等地位存于存儲器,可以按地址尋訪
3指令和數(shù)據(jù)以二進(jìn)制表示
4指令由操作碼和地址碼組成
5能存儲程序
6以運(yùn)算器為中心
現(xiàn)階段指令和數(shù)據(jù)是可以放在不同的cash中,如運(yùn)算器和控制器整合到CPU中

如上,我們的計(jì)算機(jī)硬件框圖可以如上,實(shí)線表示數(shù)據(jù),虛線表示控制指令。
運(yùn)算器,進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算
控制器,提供控制指令控制程序運(yùn)行
輸入設(shè)備,將信息轉(zhuǎn)換成機(jī)器識別形式
輸出設(shè)備,將機(jī)器信息轉(zhuǎn)換成人熟悉的形式
存儲器,存放數(shù)據(jù)和程序
馮諾依曼計(jì)算機(jī)的瓶頸
1以運(yùn)算器為中心,導(dǎo)致運(yùn)算器成為瓶頸
2不具有層次劃分

我們創(chuàng)建了以存儲器為中心的計(jì)算機(jī)框圖如上,但是這樣的系統(tǒng)仍然存在層次不夠分明的情況

如上,我們進(jìn)行層次劃分,運(yùn)算器ALU,控制器CU,一起構(gòu)成CPU,存儲器分為主存和輔存,又和CPU一起構(gòu)成主機(jī),輸入輸出設(shè)備作為IO設(shè)備,和主機(jī)一起構(gòu)成了硬件
系統(tǒng)復(fù)雜性管理的方法3Y
層次化Hierachy,將被設(shè)計(jì)的系統(tǒng)劃分為多個模塊或子模塊
模塊化Modularity,有明確定義的功能和接口
規(guī)則性regularity,模塊更容易被重用
用程序來理解計(jì)算機(jī)系統(tǒng)模型
比如說我想一個問題來讓計(jì)算機(jī)解決,我們需要先考慮計(jì)算機(jī)能否實(shí)現(xiàn),即可計(jì)算性的問題,是否存在y=f(x)這樣的映射,如果問題就是計(jì)算機(jī)能解決的,我們就可以加工計(jì)算機(jī)程序
1上機(jī)前準(zhǔn)備:
建立數(shù)學(xué)模型,比如我們確定了要計(jì)算y=sinx
確定計(jì)算方法,計(jì)算機(jī)指令集并不包括sin求法,我們可以轉(zhuǎn)為泰勒公式展開計(jì)算
編制解題程序,程序,運(yùn)算的全部步驟,指令,每個步驟
舉個例子計(jì)算y=ax2+bx+c,我們假設(shè)a,b,c已經(jīng)保存到存儲器,將x取到運(yùn)算器,乘x放置運(yùn)算器中,乘a放到運(yùn)算器,把a(bǔ)x2放到存儲器,b放到運(yùn)算器中,乘x放到運(yùn)算器,最后加ax2+c計(jì)算結(jié)果,輸出到輸入設(shè)備。
當(dāng)然我們可以使用因數(shù)提取方法,x提取至運(yùn)算器,乘以a放在運(yùn)算器+b放在運(yùn)算器,乘以x放到運(yùn)算器,最后加c放到運(yùn)算器,可以看到執(zhí)行的步驟會減少
指令格式舉例
操作碼? ? ? ? ? ?地址碼? ? ? ? ? ? ? ? ? ? 實(shí)現(xiàn)操作
000001? ? ?0000001000? ? ? ? ? ? ? a-[ACC]
假設(shè)a的地址8,取數(shù)操作是000001,則指令實(shí)現(xiàn)將a放到累加器中
當(dāng)然還有很多指令

如上,我們對計(jì)算多項(xiàng)式結(jié)果的指令程序清單放到上面,上面就是馮諾依曼計(jì)算機(jī)的指定演示。
存儲器的基本組成
存儲體由若干存儲單元組成,存儲單元又有多個存儲元件組成,存儲單元存放一串二進(jìn)制代碼,存儲單元存放二進(jìn)制代碼的組合稱為存儲字,存儲字長-存儲單元二進(jìn)制碼

我們可以看到存儲體包含MAR,MDR,其中MAR是存儲器地址寄存器,反映存儲單元的個數(shù),MDR存儲器的數(shù)據(jù)寄存器,反映存儲字長
我們假設(shè)MAR是4位,MDR8位,則存儲字長8,設(shè)存儲單元16,則可按下圖的長方體理解

上面我們就知道了存儲器的基本結(jié)構(gòu)和工作過程
運(yùn)算器的基本功能
運(yùn)算器的功能:完成算數(shù)邏輯運(yùn)算,ALU
我們需要累加器ACC,還有數(shù)據(jù)存儲器存儲數(shù)據(jù),如果我們做乘法或還需要考慮MQ來實(shí)現(xiàn)處理多出來的位數(shù)

如上x就是放在數(shù)據(jù)寄存器

如上,我們計(jì)算加法,那X就是放在數(shù)據(jù)寄存器,被加數(shù)是放在ACC中,計(jì)算結(jié)果也是在ACC中,如果是減法,類似。乘法呢,由于可能會出現(xiàn)越界,把結(jié)果放到ACC和MQ分高低位存儲,使用累加和移位實(shí)現(xiàn)乘法計(jì)算。除法則商放到MQ,余數(shù)放到ACC
加法操作過程

如上加法過程:我們首先有指令? 加M(M為X的地址),然后ACC就存儲被加數(shù),數(shù)據(jù)存儲器(內(nèi)存單元)就存放X,我們把X提取,和ACC中的數(shù)值相加存儲到ACC中(注意,我們所有的操作都默認(rèn)是被操作數(shù)已經(jīng)被讀取到相應(yīng)的單元)
減法操作過程

如上,和加法類似,也是指令為減M,然后ACC存儲被減數(shù),M為存放X的地址,取值后放到ACC中減法操作
乘法操作過程

乘法過程如上,稍微復(fù)雜點(diǎn)。獲得指令后,把乘數(shù)放到MQ中,把ACC的內(nèi)容即被乘數(shù)放到x中,這是ACC要進(jìn)行清零,然后將X,MQ的乘積結(jié)果高、低位分別放到ACC和MQ中,我們的4條過程是有一定順序的,但是前兩條先后順序不限,是可以同時(shí)進(jìn)行的,這部分的順序控制就是控制器CU進(jìn)行
除法操作過程

上面也沒什么說的,就是ACC讀取被除數(shù),M地址獲得X除數(shù),將余數(shù)放到ACC中,將商放到MQ中,所以我們看到MQ乘除法都有放結(jié)果,也叫乘商寄存器