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

1.2 語言和實現(xiàn)語言的工具

1.2.1 機器語言

你知道香蕉叫什么嗎?就叫“香蕉”?叫“banana”?

錯,都錯。

香蕉叫“牙牙”。

這是一個嬰兒的語言。一個嬰兒還沒學(xué)會人類的主要語言,所以面對喜歡的東西總是發(fā)出咿咿呀呀的聲音,也許你聽不懂,但這是他的語言,符合小孩特點的語言。

計算機的機器語言也一樣,必須符合計算機的硬件特點,而問題就在這里,越符合機器的特點,同時也就越不符合人類的特點。

計算機全稱為電子計算機。20世紀(jì)40年代以來,無線電技術(shù)和無線電工業(yè)的發(fā)展為電子計算機的研制提供了物質(zhì)基礎(chǔ)。1943—1946年美國賓夕法尼亞大學(xué)研制的電子數(shù)字積分和計算機ENIAC(Electroic Numerical Integrator And Computer)是世界上第一臺電子計算機。ENIAC計算機共用了18000多個電子管、15000個繼電器,占地170 m2

這是計算機的始祖,一堆電子管。隨后,電子計算機進(jìn)入第二時期,小巧的晶體管取代了電子管;再后來,集成電路又取代了晶體管,電子計算機進(jìn)入第三時期。

但無論是哪一時期(以后也許不是),計算機始終采用電子器件作為其基本器件,因此電子器件的特點就是計算機的特點。

為什么使用電子元件?為什么木頭不能做計算機?還真別說不能,你也應(yīng)該知道,最早出現(xiàn)的用于計算的機器,真是木頭的。以前有人用木頭作成齒輪,經(jīng)過設(shè)計,當(dāng)表示個位數(shù)的齒輪轉(zhuǎn)動1圈時,就會帶動表示十位數(shù)上的齒輪轉(zhuǎn)動1格。以此為原理,只要你轉(zhuǎn)動轉(zhuǎn)軸,木頭機器就會算出123+456=579……

電子元件沒有齒輪,但它們的特點是它們有兩種很穩(wěn)定的狀態(tài):導(dǎo)電或不導(dǎo)電。假如用0表示不通電,1表示通電,再通過集成電路實現(xiàn)進(jìn)位的機制,于是,計數(shù)功能就有了基礎(chǔ)。可以用圖1-1表示。

圖1-1

我們生活中常用的數(shù)是逢十進(jìn)一,稱為十進(jìn)制數(shù)。而計算機由于其電子元件的特點,使用的是二進(jìn)制數(shù)。

十進(jìn)制數(shù):最低位稱為個位,高一位稱為十位,再高一位稱為百位。為什么這樣稱呼呢?因為在個位上,0表示0,1表示1,2表示2,3表示3, ……;在十位上,0表示0,1表示10,2表示20,3表示30, ……,總之,每高一位長十倍,為十進(jìn)制。

二進(jìn)制數(shù):最低位仍可稱為個位,但這里稱為1位。1位上,0表示0,1表示1。2呢?沒有2,因為逢2就得進(jìn)1(后面同)。高一位稱為2位,0表示0,1表示2。再高一位稱為4位,0表示0,1表示4。可以看出,每高一位長2倍,為二進(jìn)制。

現(xiàn)在看圖1-1,00、01、10是3個二進(jìn)制數(shù)。根據(jù)上面的進(jìn)位方法,你可以算出它們分別表示十進(jìn)制數(shù)的0、1、2來嗎?首先,當(dāng)面對二進(jìn)制數(shù)時,先要認(rèn)識到它們從低到高(從右到左)的位依次不再是個位、十位、百位,而是1位、2位和4位。

00:都是0,所以它就是0;

01:2位為0,1位為1,表示0個2和1個1,所以是1;

10:2位為1,1位為0,表示1個2和0個1,所以是2。

計算機的機器語言正是由這些0和1組成的。事實上,計算機里的所有數(shù)據(jù),無論是一個程序、一篇文稿、一張照片還是一首MP3,最終都是0和1。

世界就是這樣奇妙,萬事萬物五彩繽紛,但進(jìn)了計算機,卻只是0和1的組合。

機器語言盡是0和1,于是可以想象當(dāng)時(還沒有其他語言時)的程序員是如何編寫程序的。他們寫程序不用坐在計算機前,而在家里或什么地方,拿筆在紙上畫圈,一圈、兩圈、三圈(感覺有點像阿Q),圈夠了就給專門的打孔小姐照著在紙帶上打成孔,最后這些紙帶被計算機“吃”進(jìn)去并讀懂,然后執(zhí)行。如用有孔表示1,無孔表示0,則圖1-2表示3行數(shù)110、011和101。

圖1-2

1.2.2 匯編語言

前面說機器語言盡是0和1,那么是不是隨便寫一串0和1就算是程序呢?不是。就像漢語是由漢字組成的,可我要是說下面這一串漢字:

天愛我京門北安。

你覺得我是在說人話嗎?

機器也有自己的固定詞匯,在機器語言里稱為機器指令。程序是由指令及數(shù)據(jù)組成的。這些指令是一些固定的0和1的組合(不同廠商不同型號的機器,其指令又有不同)。作為程序員,就得將這些指令一次次正確地用0和1拼寫出來。

你絕不會將“我愛北京天安門”說成上面的話,但極有可能將10101101寫成10010101。所以很自然地出現(xiàn)了用符號來表示這些固定的二進(jìn)制指令的語言,這就是匯編語言。

下面是一段代碼,它表示的是:已知b等于1, c等于2,計算b+c的值,并將該值賦給a。

把這段代碼的機器語言(左)和匯編語言(右)進(jìn)行對照,可看出兩者各自的特點。

        100010100101010111000100    mov edx, [ebp-0x3c]
        000000110101010111000000    add edx, [ebp-0x40]
        100010010101010111001000    mov [ebp-0x38], edx

匯編語言僅是機器語言的一種助記符,兩者之間沒有本質(zhì)的區(qū)別,所以很多時候人們把兩者等同視之。

無論是機器語言還是匯編語言,都讓人看了頭痛。

1.2.3 高級語言

匯編語言和機器語言雖然很難記、難寫,但它們的代碼效率高、占用內(nèi)存少,這相當(dāng)符合當(dāng)時計算機的存儲器昂貴、處理器功能有限等硬件特點。

眾所周知,計算機的發(fā)展迅速,功能越來越強大。一方面,它有能力,人們也要它能完成越來越復(fù)雜或龐大數(shù)據(jù)量的計算功能,機器/匯編語言已經(jīng)無法滿足這些需求;另一方面,硬件的發(fā)展和關(guān)鍵元件價格的降低,使得程序員不需要在程序的降低內(nèi)存占用、減少運算時間等方面花太多的精力,這樣,各門高級語言便接二連三地出現(xiàn)了。

一門計算機語言“越符合機器的特點,同時也就越不符合人類的特點”。最早有Pascal、C、C++、BASIC等數(shù)百種高級語言,現(xiàn)在又有Java、C#等。高級語言的高級之處在于它總是盡量接近人類的自然語言和思維方式。

當(dāng)然,一門語言再好,如果沒有其實現(xiàn)工具,一切都是空談。對于C語言,本書推薦使用Microsoft Visual C++6.0開發(fā)環(huán)境。

1.2.4 語言實現(xiàn)工具

高級語言比較接近人類的語言,用起來得心應(yīng)手,但更得意的一定是讓程序代碼變成可執(zhí)行文件。

無論是寫代碼的過程,還是最后要編譯成可執(zhí)行文件,都需要有一個工具存在。這一工具一般稱為編程集成環(huán)境(IDE)。之所以稱為集成,是因為從寫代碼到最后軟件的出爐,我們需要它的地方實在太多了。下面列出其中最重要的功能項。

(1)方便的代碼編輯功能。盡管你可以使用記事本、Word或其他任何文本編輯器來寫代碼,但除非特殊需要,否則那將是極為低效的方法。現(xiàn)在的編程集成環(huán)境都相當(dāng)?shù)闹悄埽诤芏嗲闆r下可以自動完成人們所需的代碼,既準(zhǔn)確又迅速。

(2)程序編譯功能。前面已講過,人們寫的代碼在成為機器能懂的可執(zhí)行程序前,必須通過編譯。

(3)程序調(diào)試功能。如何盡量減少程序的Bug呢?沒有編程集成環(huán)境提供的強大調(diào)試功能,我們做的程序?qū)⒑翢o質(zhì)量保證。

(4)其他輔助功能。安裝程序的創(chuàng)建已屬于另外一種工具的范疇,但人們?nèi)钥梢酝ㄟ^編程集成環(huán)境來決定是最終生成單一可執(zhí)行文件,還是帶有其他動態(tài)庫。如果是后者,還可以通過集成環(huán)境來檢查程序運行時調(diào)用了哪些動態(tài)庫文件。

當(dāng)然,現(xiàn)在市面上可以見到的語言實現(xiàn)工具所提供的功能遠(yuǎn)不止上面所說的。對于一個工具,只有動手使用了,才會真正了解它。

主站蜘蛛池模板: 广州市| 清涧县| 昌平区| 韶关市| 鹤壁市| 宁德市| 延吉市| 公主岭市| 锦州市| 靖江市| 嵊州市| 嘉义市| 通化市| 富源县| 安化县| 斗六市| 合江县| 乌兰浩特市| 屏东县| 寿光市| 莆田市| 琼结县| 巴彦淖尔市| 红河县| 庆元县| 自贡市| 寻甸| 阿克陶县| 渑池县| 自贡市| 泸定县| 温宿县| 鸡东县| 阿城市| 临汾市| 龙南县| 海口市| 嘉黎县| 泊头市| 沙洋县| 襄垣县|