1.3 決定程序流程的程序計(jì)數(shù)器
只有1行的有用程序是很少見的,機(jī)器語言的程序也是如此。在對(duì)CPU有了一個(gè)大體印象后,接下來我們看一下程序是如何按照流程來運(yùn)行的。
圖1-4是程序啟動(dòng)后內(nèi)存內(nèi)容的模型。用戶發(fā)出啟動(dòng)程序的指示后,Windows等操作系統(tǒng)會(huì)把硬盤中保存的程序復(fù)制到內(nèi)存中。示例中的程序?qū)崿F(xiàn)的是將123和456兩個(gè)數(shù)值相加,并將結(jié)果輸出到顯示器上。正如前文所介紹的那樣,存儲(chǔ)指令和數(shù)據(jù)的內(nèi)存,是通過地址來劃分的。由于使用機(jī)器語言難以清晰地表明各地址存儲(chǔ)的內(nèi)容,因此這里我們對(duì)各地址的存儲(chǔ)內(nèi)容添加了注釋。實(shí)際上,一個(gè)命令和數(shù)據(jù)通常被存儲(chǔ)在多個(gè)地址上,但為了便于說明,圖1-4中把指令、數(shù)據(jù)分配到了一個(gè)地址中。

圖1-4 內(nèi)存中配置的程序示例(顯示相加的結(jié)果)
地址0100是程序運(yùn)行的開始位置。Windows等操作系統(tǒng)把程序從硬盤復(fù)制到內(nèi)存后,會(huì)將程序計(jì)數(shù)器(CPU寄存器的一種)設(shè)定為0100,然后程序便開始運(yùn)行。CPU每執(zhí)行一個(gè)指令,程序計(jì)數(shù)器的值就會(huì)自動(dòng)加1。例如,CPU執(zhí)行0100地址的指令后,程序計(jì)數(shù)器的值就變成了0101(當(dāng)執(zhí)行的指令占據(jù)多個(gè)內(nèi)存地址時(shí),增加與指令長(zhǎng)度相應(yīng)的數(shù)值)。然后,CPU的控制器就會(huì)參照程序計(jì)數(shù)器的數(shù)值,從內(nèi)存中讀取命令并執(zhí)行。也就是說,程序計(jì)數(shù)器決定著程序的流程。
- C程序設(shè)計(jì)簡(jiǎn)明教程(第二版)
- Modular Programming with Python
- Oracle 11g從入門到精通(第2版) (軟件開發(fā)視頻大講堂)
- 深入理解Django:框架內(nèi)幕與實(shí)現(xiàn)原理
- Instant 960 Grid System
- Java持續(xù)交付
- ADI DSP應(yīng)用技術(shù)集錦
- Python漫游數(shù)學(xué)王國(guó):高等數(shù)學(xué)、線性代數(shù)、數(shù)理統(tǒng)計(jì)及運(yùn)籌學(xué)
- Unity 5.x By Example
- SharePoint Development with the SharePoint Framework
- Learning OpenStack Networking(Neutron)(Second Edition)
- Swift 4從零到精通iOS開發(fā)
- 匯編語言編程基礎(chǔ):基于LoongArch
- Web性能實(shí)戰(zhàn)
- LabVIEW數(shù)據(jù)采集