CPU如何讀取數(shù)據(jù)?
如果取快遞,我們會(huì)需要一個(gè)取件碼,這個(gè)取件碼對(duì)于CPU來(lái)說(shuō)就是地址;
當(dāng)?shù)刂窞?x0001,CPU控制IBUS(代碼總線)的電平使其呈現(xiàn)出現(xiàn)第一位為高電平,其他均為低電平,并且控制另外的讀/寫(xiě)位為讀,那么DBUS(地址總線)就會(huì)交出0x0001處的數(shù)據(jù)。
就像給了快遞柜收件碼,然后點(diǎn)取件,快遞柜就會(huì)自動(dòng)給出快遞一樣。
CPU寫(xiě)數(shù)據(jù)類似,不過(guò)使能寫(xiě),就像點(diǎn)寄件一樣。
CPU如何執(zhí)行命令
我們可以取數(shù)據(jù)了,當(dāng)然我們也可以取命令數(shù)據(jù),以便CPU得知是用加法還是減法。類似取數(shù)據(jù),我們也需要一個(gè)地址來(lái)取命令,這個(gè)地址一般由一個(gè)計(jì)數(shù)器給出。計(jì)數(shù)器從0x0000開(kāi)始,不斷增加。所以CPU從0x0000的地址開(kāi)始取命令,然后從0x0001取命令,循環(huán)下去。。。
執(zhí)行命令需要不僅需要命令,還需要數(shù)據(jù)。CPU會(huì)把第一個(gè)命令地址的數(shù)據(jù)當(dāng)作操作命令,比如+,把第二個(gè)命令地址的數(shù)據(jù)當(dāng)作數(shù)據(jù)1的地址,把第三個(gè)命令地址的數(shù)據(jù)當(dāng)作數(shù)據(jù)2的地址。
比如命令地址的前三位里的數(shù)據(jù)為[0x0012,0x2000,0x2001],
- CPU讀取到第一個(gè)地址數(shù)據(jù)為0x12,表示要做加法。
- CPU讀取到第二個(gè)地址的數(shù)據(jù)為0x2000,表示為去0x2000的地方取數(shù)據(jù),這里我們假設(shè)0x2000處的數(shù)據(jù)為1。
- CPU讀取到第二個(gè)地址的數(shù)據(jù)為0x2001,表示為去0x2001的地方取數(shù)據(jù),這里我們假設(shè)0x2001處的數(shù)據(jù)為2。
然后CPU就會(huì)計(jì)算得到1+2=3,那么3這個(gè)放到哪里呢,CPU會(huì)放到一個(gè)自己私有的地方先存著,以便之后需要的時(shí)候不用費(fèi)勁去內(nèi)存去拿了。
編程到底在編什么
-
最初階段
由CPU的執(zhí)行過(guò)程可知,編程需要做的就是從地址0x0000開(kāi)始,寫(xiě)一些命令或者數(shù)據(jù)進(jìn)去。
-
匯編階段
后來(lái)有人用最初階段的方法把
add,[0x2000],[0x2001]這種文本數(shù)據(jù)解析成最初階段的數(shù)據(jù)[0x0012,0x2000,0x2001]并寫(xiě)入存儲(chǔ)器,成功執(zhí)行。人可以寫(xiě)一些肉眼可見(jiàn)的操作了。 -
高級(jí)語(yǔ)言
再后來(lái)有人把1 + 2這種文本數(shù)據(jù)解析為把0x2000處的數(shù)據(jù)置為1mov,[0x2000],1,把0x2001處的的數(shù)據(jù)置為2mov,[0x2001],2,然后把這兩個(gè)數(shù)相加add,[0x2000],[0x2001]。有人把這個(gè)文本解析工具寫(xiě)出來(lái),就叫做c語(yǔ)言的編譯器,這些語(yǔ)法規(guī)范就叫做c語(yǔ)言。
再后來(lái)有人用C寫(xiě)了一個(gè)程序,這個(gè)程序可以解析1+2,但是不同與c的是,這個(gè)程序直接就顯示1+2的結(jié)果到屏幕,而不是變成程序?qū)懭氪鎯?chǔ)器執(zhí)行。這個(gè)解析文本,并把結(jié)果直接顯示出來(lái),而不用重新寫(xiě)入到程序存儲(chǔ)器的程序就叫做Python程序。