官术网_书友最值得收藏!

1.2 CPU是寄存器的集合體

CPU的四個(gè)構(gòu)成部分中,程序員只需要了解寄存器即可,其余三個(gè)都不用太過(guò)關(guān)注。那么,為什么必須要了解寄存器呢?這是因?yàn)?span id="niz4hml" class="bold">程序是把寄存器作為對(duì)象來(lái)描述的。

首先我們來(lái)看一下代碼清單1-1。這是用匯編語(yǔ)言(assembly)把匯編語(yǔ)言轉(zhuǎn)化成機(jī)器語(yǔ)言的程序稱為匯編器(assembler)。有時(shí)匯編語(yǔ)言也稱為匯編。詳情可參閱第10章。編寫(xiě)的程序的一部分。匯編語(yǔ)言采用助記符(memonic)來(lái)編寫(xiě)程序,每一個(gè)原本是電氣信號(hào)的機(jī)器語(yǔ)言機(jī)器語(yǔ)言是指CPU能直接解釋和執(zhí)行的語(yǔ)言。指令都會(huì)有一個(gè)與其相應(yīng)的助記符,助記符通常為指令功能的英語(yǔ)單詞的簡(jiǎn)寫(xiě)。例如,mov和add分別是數(shù)據(jù)的存儲(chǔ)(move)和相加(addition)的簡(jiǎn)寫(xiě)。匯編語(yǔ)言和機(jī)器語(yǔ)言基本上是一一對(duì)應(yīng)的。這一點(diǎn)和C語(yǔ)言、Java語(yǔ)言等高級(jí)編程語(yǔ)言高級(jí)編程語(yǔ)言是指能夠使用類似于人類語(yǔ)言(主要是英語(yǔ))的語(yǔ)法來(lái)記述的編程語(yǔ)言的總稱。BASIC、C、C++、Java、Pascal、FORTRAN、COBOL等語(yǔ)言都是高級(jí)編程語(yǔ)言。使用高級(jí)編程語(yǔ)言編寫(xiě)的程序,經(jīng)過(guò)編譯轉(zhuǎn)換成機(jī)器語(yǔ)言后才能運(yùn)行。與高級(jí)編程語(yǔ)言相對(duì),機(jī)器語(yǔ)言和匯編語(yǔ)言稱為低級(jí)編程語(yǔ)言。有很大不同,這也是我們使用匯編語(yǔ)言來(lái)說(shuō)明CPU運(yùn)行的原因。通常我們將匯編語(yǔ)言編寫(xiě)的程序轉(zhuǎn)化成機(jī)器語(yǔ)言的過(guò)程稱為匯編;反之,機(jī)器語(yǔ)言程序轉(zhuǎn)化成匯編語(yǔ)言程序的過(guò)程則稱為反匯編

代碼清單1-1 匯編語(yǔ)言編寫(xiě)的程序示例

      mov  eax, dword ptr [ebp-8]    …把數(shù)值從內(nèi)存復(fù)制到eax
      add  eax, dword ptr [ebp-0Ch]  …eax的數(shù)值和內(nèi)存的數(shù)值相加
      mov  dword ptr [ebp-4], eax    …把eax的數(shù)值(上一步的相加結(jié)果)存儲(chǔ)在內(nèi)存中

通過(guò)閱讀匯編語(yǔ)言編寫(xiě)的代碼,能夠了解轉(zhuǎn)化成機(jī)器語(yǔ)言的程序的運(yùn)行情況。從代碼清單1-1的匯編語(yǔ)言程序示例中也可以看出,機(jī)器語(yǔ)言級(jí)別的程序是通過(guò)寄存器來(lái)處理的。也就是說(shuō),在程序員看來(lái)“CPU是寄存器的集合體”。至于控制器、運(yùn)算器和時(shí)鐘,程序員只需要知道CPU中還有這幾部分就足夠了。

代碼清單1-1中,eax和ebp表示的都是寄存器。通過(guò)閱讀剛才的示例代碼,想必大家對(duì)程序使用寄存器來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和加法運(yùn)算這一情況應(yīng)該有所了解了。匯編語(yǔ)言是8038680386是美國(guó)英特爾公司開(kāi)發(fā)的微處理器的產(chǎn)品名。“80386以上”是指80386、80486、奔騰等微處理器。以上的CPU所使用的語(yǔ)言。eax和ebp是CPU內(nèi)部的寄存器的名稱。內(nèi)存的存儲(chǔ)場(chǎng)所通過(guò)地址編號(hào)來(lái)區(qū)分,而寄存器的種類則通過(guò)名字來(lái)區(qū)分。

上文可能有些難以理解,不過(guò)不用擔(dān)心,因?yàn)槲覀儾⒉灰蟠蠹冶仨氄莆誄PU的所有寄存器種類和匯編語(yǔ)言,大家只需對(duì)CPU是怎么處理程序的有一個(gè)大致印象即可。也就是說(shuō),使用高級(jí)語(yǔ)言編寫(xiě)的程序會(huì)在編譯編譯是指將使用高級(jí)編程語(yǔ)言編寫(xiě)的程序轉(zhuǎn)換為機(jī)器語(yǔ)言的過(guò)程,其中,用于轉(zhuǎn)換的程序被稱為編譯器(compiler)。后轉(zhuǎn)化成機(jī)器語(yǔ)言,然后再通過(guò)CPU內(nèi)部的寄存器來(lái)處理。例如,a=1+2這樣的高級(jí)語(yǔ)言的代碼程序在轉(zhuǎn)化成機(jī)器語(yǔ)言后,就是利用寄存器來(lái)進(jìn)行相加運(yùn)算和存儲(chǔ)處理的。

不同類型的CPU,其內(nèi)部寄存器的數(shù)量、種類以及寄存器存儲(chǔ)的數(shù)值范圍都是不同的。不過(guò),根據(jù)功能的不同,我們可以將寄存器大致劃分為八類,如表1-1所示。可以看出,寄存器中存儲(chǔ)的內(nèi)容既可以是指令也可以是數(shù)據(jù)。其中,數(shù)據(jù)分為“用于運(yùn)算的數(shù)值”和“表示內(nèi)存地址的數(shù)值”兩種。數(shù)據(jù)種類不同,存儲(chǔ)該數(shù)值的寄存器也不同。CPU中每個(gè)寄存器的功能都是不同的。用于運(yùn)算的數(shù)值放在累加寄存器中存儲(chǔ),表示內(nèi)存地址的數(shù)值則放在基址寄存器和變址寄存器中存儲(chǔ)。代碼清單1-1的程序中用到的eax和ebp分別是累加寄存器和基址寄存器。

表1-1 寄存器的主要種類和功能

對(duì)程序員來(lái)說(shuō),CPU是什么呢?如圖1-3所示,CPU是具有各種功能的寄存器的集合體。其中,程序計(jì)數(shù)器、累加寄存器、標(biāo)志寄存器、指令寄存器和棧寄存器都只有一個(gè),其他的寄存器一般有多個(gè)。程序計(jì)數(shù)器和標(biāo)志寄存器比較特殊,這一點(diǎn)在后面的章節(jié)中會(huì)詳細(xì)說(shuō)明。另外,存儲(chǔ)指令的指令寄存器等寄存器,由于不需要程序員做多關(guān)注,因此圖1-3中沒(méi)有提到。

圖1-3 程序員眼中的CPU(CPU是寄存器的集合體)

主站蜘蛛池模板: 靖宇县| 娱乐| 明水县| 青海省| 寻甸| 新田县| 香港 | 卓尼县| 大同市| 阳春市| 呼和浩特市| 天全县| 六安市| 平昌县| 龙川县| 台前县| 谢通门县| 安国市| 拜泉县| 丹阳市| 临邑县| 崇州市| 邢台市| 忻州市| 广灵县| 葵青区| 五家渠市| 旬邑县| 新兴县| 商河县| 西乌珠穆沁旗| 大冶市| 绥中县| 花莲县| 大渡口区| 云和县| 孟村| 长沙市| 海门市| 宾川县| 奇台县|