程序是怎么從代碼到執(zhí)行的_第1頁(yè)
已閱讀1頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、程序是怎么從代碼到執(zhí)行的電子計(jì)算機(jī)所使用的是由“0”和“1”組成的二進(jìn)制數(shù),二進(jìn)制是計(jì)算機(jī)的語(yǔ)言的基礎(chǔ)。人們只能寫(xiě)出一串串由“0”和“1”組成的指令序列交由計(jì)算機(jī)執(zhí)行,這種語(yǔ)言,就是機(jī)器語(yǔ)言。但是人為編制機(jī)器語(yǔ)言繁雜單調(diào),而且容易出錯(cuò)。于是為了減輕使用機(jī)器語(yǔ)言編程的痛苦,人們發(fā)明匯編語(yǔ)言。匯編語(yǔ)言用一些簡(jiǎn)潔的英文字母、符號(hào)串來(lái)替代一個(gè)特定的指令的二進(jìn)制串,比如用“ADD”代表加法,“MOV”代表數(shù)據(jù)傳遞等等,這樣一來(lái),人們很容易讀懂并理

2、解程序在干什么,糾錯(cuò)及維護(hù)都變得方便了。然而計(jì)算機(jī)是不認(rèn)識(shí)這些符號(hào)的,這就需要一個(gè)專門(mén)的程序,專門(mén)負(fù)責(zé)將這些符號(hào)翻譯成二進(jìn)制數(shù)的機(jī)器語(yǔ)言,這種翻譯程序被稱為匯編程序。匯編指令和機(jī)器語(yǔ)言之間有著一一對(duì)應(yīng)的關(guān)系,程序可以很容易把它編為計(jì)算機(jī)能夠識(shí)別的機(jī)器語(yǔ)言。像cc,pythen等這一類語(yǔ)言為高級(jí)語(yǔ)言,它偏向人,是按照人的思維方式設(shè)計(jì)的,機(jī)器看不懂高級(jí)語(yǔ)言,必須要有一個(gè)橋梁來(lái)銜接兩者。如圖:于是CC這樣的語(yǔ)言無(wú)法直接都讀出,需要經(jīng)過(guò)編譯成計(jì)

3、算機(jī)可執(zhí)行代碼。編譯是將源代碼轉(zhuǎn)換為機(jī)器可認(rèn)識(shí)代碼的過(guò)程,大致分為源程序編譯預(yù)處理編譯優(yōu)化程序匯編程序鏈接程序可執(zhí)行文件。這個(gè)過(guò)程大致分為以下幾個(gè)步驟:1.編譯預(yù)處理預(yù)處理就是編譯程序讀取源程序進(jìn)行詞法和語(yǔ)法的分析,將高級(jí)語(yǔ)言指令轉(zhuǎn)換為功能等效的匯編代碼。編譯器讀取c源程序,對(duì)其中的偽指令(以#開(kāi)頭的指令)和特殊符號(hào)進(jìn)行處理。偽指令主要包括以下四個(gè)方面:(1)宏定義指令,如#defineNameTokenString#undef等。對(duì)于

4、前一個(gè)偽指令,預(yù)編譯所要作得的是將程序中的所有Name用TokenString替換,但作為字符串常量的Name則不被替換。對(duì)于后者,則將取消對(duì)某個(gè)宏的定義,使以后該串的出現(xiàn)不再被替換。(2)條件編譯指令,如#ifdef#ifndef#else#elif#endif等等。這些偽指令的引入使得程序員可以通過(guò)定義不同的宏來(lái)決定編譯程序?qū)δ男┐a進(jìn)行處理。預(yù)編譯程序?qū)⒏鶕?jù)有關(guān)的文件,將那些不必要的代碼過(guò)濾掉。(3)頭文件包含指令,如#inclu

5、de“FileName“或者#include等。采用頭文件的目的主要是為了使某些定義可以供多個(gè)不同的源程序使用。因?yàn)樵谛枰玫竭@些定義的源程序中,只需加上一條#include語(yǔ)句即可,而不必再在此文件中將這些定義重復(fù)一遍。預(yù)編譯程序?qū)杨^文件中的定義統(tǒng)統(tǒng)都加入到它所產(chǎn)生的輸出文件中,以供編譯程序?qū)χM(jìn)行處理。(4)特殊符號(hào),預(yù)編譯程序可以識(shí)別一些特殊的符號(hào)。例如在源程序中出現(xiàn)的LINE標(biāo)識(shí)將被解釋為當(dāng)前行號(hào)(十進(jìn)制數(shù)),F(xiàn)ILE則被解釋

6、為當(dāng)前被編譯的C源程序的名稱。預(yù)編譯程序?qū)τ谠谠闯绦蛑谐霈F(xiàn)的這些串將用合適的值進(jìn)行替換。經(jīng)過(guò)替換,生成一個(gè)沒(méi)有宏定義、沒(méi)有條件編譯指令、沒(méi)有特殊符號(hào)的輸出文件。這個(gè)文件的含義同沒(méi)有經(jīng)過(guò)預(yù)處理的源文件是相同的,但內(nèi)容有所不同。2.編譯階段經(jīng)過(guò)預(yù)編譯得到的輸出文件中,將只有常量。如數(shù)字、字符串、變量的定義,以及Cusingnamespacestdintmain()cout“hellowld“endlreturn0編譯:.386.modelf

7、latstdcalloptioncasemap:noneincludewindows.incincludeuser32.incincludelibuser32.libincludekernel32.incincludelibkernel32.lib.dataszCaptiondbAMessageBox!0szTextdbHelloWld!0.codestart:invokeMessageBoxNULLoffsetszTextoffset

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論