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

  • 代碼揭秘
  • 左飛
  • 5167字
  • 2018-12-27 13:20:13

1.2.1 如何讓機器理解你

計算機語言,也就是我們平時所說的程序設(shè)計語言,它通常是指一個能夠完整、準確和規(guī)則地表達人們的意圖,并用以指揮或控制計算機工作的“符號系統(tǒng)”。計算機語言是人與機器交流意思、傳遞指令的渠道和媒介。類比于人類的自然語言,二者之間有許多相似之處,它們都是使用有限的簡單符號,經(jīng)過組合后來表達復雜多變的含義,從而構(gòu)建出豐富多彩的計算機軟件。

計算機語言通常分為3類:即機器語言、匯編語言和高級語言,如圖1-4所示。某些文獻上又把機器語言和匯編語言統(tǒng)稱為低級語言,本書仍把它們分別對待。

圖1-4 計算機語言

計算機硬件是以電路為基礎(chǔ)的“電子系統(tǒng)”。對于一條電路而言,所處的狀態(tài)要么是通路,要么是斷路,這也就奠定了計算機本身的“二值性”,在計算機的世界里,只有0和1兩種狀態(tài),它也僅能讀懂用二進制格式編寫的代碼。因此,機器語言作為一種直接與機器進行通信的語言,就是一種使用二進制代碼表示的計算機能夠直接識別和執(zhí)行的機器指令的集合。機器語言是計算機的設(shè)計者通過計算機的硬件結(jié)構(gòu)賦予計算機的操作功能,機器語言的特點在于靈活和高效。

很多讀者往往覺得機器語言諱莫如深,一個看似雜亂無章的二進制序列,機器何以給出正確的解釋并執(zhí)行相應的指令,對于這個問題很多讀者都百思不得其解。在本書第5章中,我們將用高級語言編寫的一條語句還原成了機器語言的模樣,到那時上述疑問也就可以迎刃而解了!

用機器語言編寫程序難度很高,編程人員首先要熟記所用計算機的全部指令代碼和代碼的含義。而且對于不同型號、不同品牌及不同類型的硬件,其機器語言的指令集是有差別的,這給機器語言的使用和推廣造成了障礙。此外,在手工編寫機器語言代碼時,程序員不得不自己處理每條指令和每個數(shù)據(jù)的存儲分配和輸入/輸出,還得記住編程過程中每步所使用的工作單元處在何種狀態(tài)。即使一個看似非常簡單的操作或功能,使用機器語言來實現(xiàn)也是十分煩瑣而復雜的,實際中編寫機器語言程序花費的時間往往是機器執(zhí)行時間的幾十倍甚至幾百倍。這還不是最糟糕的!使用機器語言編寫的程序可讀性極差,維護起來也相當困難,由于語句本身是大量0和1交錯的二進制序列,看上去令人眼花繚亂,極易出錯。同一個人編寫的程序在相隔一段時間后再去閱讀時理解起來也非常不容易。因此,目前除了計算機硬件制造商的少數(shù)專業(yè)人員以外,已經(jīng)很少有人再去學習機器語言了。

早期的計算機程序設(shè)計只能由少數(shù)的專業(yè)人員來完成,第一批計算機科學家,例如圖靈、馮·諾依曼等人都是公認的數(shù)學天才。這在很大程度上阻礙了計算機技術(shù)的推廣和長遠發(fā)展。既然機器語言有諸多弊端,于是有人開始考慮改進。為了克服機器語言難讀、難編、難記和易出錯的缺點,計算機科學家和工程技術(shù)人員就用與代碼指令實際含義相近的英文縮寫詞、字母和數(shù)字等符號來取代指令代碼,于是匯編語言應運而生。在匯編語言中,縮寫詞ADD表示加法,MOV則代表數(shù)據(jù)傳送,這無疑在很大程度上減輕了開發(fā)人員的編程難度。如此一來,程序員很容易讀懂并理解程序在干什么,糾錯及維護都變得方便了。目前,在中國的各大高校中,計算機專業(yè)的學生仍然把匯編語言作為一門必修課來學習。

匯編語言是一種用助記符表示的仍然面向機器的計算機語言。作為第二代計算機語言,它相比于機器語言有了長足的發(fā)展。然而計算機是不認識這些助記符的,這就需要一個專門的程序,專門負責將這些符號翻譯成計算機能夠理解的二進制序列(即機器語言),這種翻譯程序就被稱為匯編程序。

由于匯編語言采用了助記符來編寫程序,比用機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。但由于需要使用匯編程序來進行中間翻譯工作,因此效率比機器語言稍有下降,但仍然保持了相對的高效性。

但匯編語言仍然存在一定的問題。首先,匯編語言仍然是面向機器的語言,學習和使用它仍然比較煩瑣而費時。其次,匯編語言的通用性差,不同型號和類型的硬件設(shè)備所采用的匯編指令系統(tǒng)存在很大的差異,這在很大程度上限制了匯編語言的使用。

不論是機器語言還是匯編語言都是面向硬件具體操作的,因此把它們統(tǒng)稱為低級語言是有一定道理的。低級語言本身對機器過分依賴,要求使用者必須對硬件結(jié)構(gòu)及其工作原理都十分熟悉,這對非計算機專業(yè)人員來說是很難做到的。從最初與計算機交流的痛苦經(jīng)歷中人們意識到,應該設(shè)計這樣一種編程語言——接近于人類的自然語言,同時又不依賴于計算機硬件,編出的程序還能在所有機器上通用。于是高級語言終于誕生了。縱觀計算機程序設(shè)計語言的發(fā)展歷程,程序設(shè)計語言經(jīng)歷了從機器語言、匯編語言到高級語言的歷程。這段經(jīng)歷雖然漫長,但從無到有、從弱到強的發(fā)展過程也折射出計算機技術(shù)時過境遷、飛速發(fā)展的歷史腳步。

高級語言的出現(xiàn)具有劃時代的意義,它是一種與自然語言相近并為計算機所接受和執(zhí)行的計算機語言,更重要的是它是面向用戶的語言。無論何種機型的計算機,只要配備上相應的高級語言的編譯或解釋程序,用該高級語言編寫的程序就可以在此計算機上正常運作。

和匯編語言相比,高級語言不但將許多相關(guān)的機器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無關(guān)的細節(jié),例如使用堆棧、寄存器等,從而大大簡化了程序中的指令。此外,由于省略了很多細節(jié),開發(fā)人員也就不需要有太多的專業(yè)知識了。這為高級語言本身的發(fā)展和推廣提供了有力保證,也為計算機事業(yè)的發(fā)展注入了持久的動力。如果說個人計算機的出現(xiàn)使計算機走進了千家萬戶,那么高級語言的出現(xiàn)就使得計算機程序設(shè)計不再是少數(shù)天才的專利。從此,計算機世界里發(fā)生了翻天覆地的變化,世界為之震驚!

高級語言主要是相對于匯編語言而言的,它并不是特指某一種具體的語言,而是包括了很多編程語言,不同高級語言的語法、命令格式是各不相同的。世界上第一個高級語言FORTRAN誕生于1954年,它是第一個完全脫離機器硬件的高級語言。在科學計算和工程領(lǐng)域,F(xiàn)ORTRAN語言仍然有廣泛的應用。半個世紀以來,世界上共有幾百種高級語言出現(xiàn),其中有重要意義的也多達幾十種之多。其中,影響較大、使用較普遍、大家耳熟能詳?shù)挠蠪ORTRAN、ALGOL、COBOL、Basic、Pascal、C、C++、Java等。下面介紹幾種較有代表性的高級程序設(shè)計語言。

1.Basic語言

Basic語言全稱是Beginners’ All-Purpose Symbolic Instruction Code,意為“初學者通用符號指令代碼”。Basic語言于1964年由美國的兩位計算機科學家G. Kemeny和Thomas E. Kurtz在FORTRAN語言的基礎(chǔ)上創(chuàng)造而成。

Basic 具有易學、易懂、易記、易用的特點,于是很快得到了推廣與應用,現(xiàn)在它不僅是適合于初學者學習的入門語言,同時也是可以進行科學計算、數(shù)據(jù)處理等工作的高級程序設(shè)計語言。

1975年,微軟公司成功地把Basic語言的編譯器移植到使用Intel處理器的ALR計算機中。此后,微軟還在其發(fā)布的DOS操作系統(tǒng)中免費加入了GW-Basic、QBasic等當時最好的Basic 解釋程序。自從Windows操作系統(tǒng)出現(xiàn)以來,圖形用戶界面(GUI)的Basic語言一躍成為當今應用最廣泛的程序設(shè)計語言之一,也就是聞名遐邇的Visual Basic。

2.Pascal語言

Pascal(B. Pascal)是17世紀法國著名數(shù)學家,他于1642年曾發(fā)明了現(xiàn)代臺式計算機的雛型機——加減法計算機,Pascal語言正是得名于此。

Pascal語言由瑞士蘇黎士聯(lián)邦工業(yè)大學的沃斯(N.Wirth)教授研制,并于1971年正式發(fā)布。此外,沃斯一生還寫作了大量有關(guān)程序設(shè)計、算法和數(shù)據(jù)結(jié)構(gòu)的著作,因此,他于1984年獲得了計算機最高獎——“圖靈獎”。

不得不強調(diào),Pascal 語言是高級語言發(fā)展過程中一個重要的里程碑。Pascal 語言是第一個系統(tǒng)地體現(xiàn)了E. W. Dijkstra和C. A. R. Hoare定義的結(jié)構(gòu)化程序設(shè)計概念的語言。作為世界上第一個結(jié)構(gòu)化的程序設(shè)計語言,它的出現(xiàn)標志著結(jié)構(gòu)化程序設(shè)計時期的開始。Pascal語言本身是從ALGOL 60衍生而來的,但其功能更加強大且容易使用。Pascal語言具有大量的控制結(jié)構(gòu),充分反映了結(jié)構(gòu)化程序設(shè)計的思想和要求,直觀易懂,使用靈活,既可用于科學計算,又能用來編寫系統(tǒng)軟件,應用范圍極廣。

在Pascal語言問世以來的30余年間,先后產(chǎn)生了適合于不同機型的各種版本。其中,影響最大的莫過于Turbo Pascal系列軟件,它是由美國Borland公司設(shè)計、研制的一種適用于微機的Pascal編譯系統(tǒng)。后來在Anders Hejlsberg(Turbo Pascal的作者)的領(lǐng)導下,Borland公司于1995年發(fā)布了Delphi 1快速應用開發(fā)(RAD)環(huán)境,Delphi目前仍然是業(yè)內(nèi)使用最廣泛的一款集成開發(fā)工具之一,它正是以Pascal語言為基礎(chǔ)的圖形用戶界面的集成開發(fā)環(huán)境。這個產(chǎn)品到現(xiàn)在依然是Borland公司最成功、最引以為傲的經(jīng)典之作,到本書截稿之日,Delphi 2009已經(jīng)正式發(fā)布。

3.Java語言

Java是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言(以下簡稱Java語言)和Java平臺的總稱。Java平臺由Java虛擬機(JVM)和Java 應用編程接口構(gòu)成。Java應用編程接口為Java應用提供了一個獨立于操作系統(tǒng)的標準接口,分為基本部分和擴展部分。在硬件或操作系統(tǒng)平臺上安裝一個Java平臺之后,Java應用程序就可運行了?,F(xiàn)在Java平臺已經(jīng)嵌入了幾乎所有的操作系統(tǒng),這樣Java程序只編譯一次,就可以在各種系統(tǒng)中運行。目前, Java分為3個體系:J2SE、J2EE和J2ME。如圖1-5所示為Sun公司的Java主頁。

圖1-5 Sun公司的Java主頁

就Java語言本身來說,它是一種簡單的、面向?qū)ο蟮?、分布式的、解釋的、健壯的、安全的、結(jié)構(gòu)中立的、可移植的、性能很優(yōu)異的、多線程的、動態(tài)的語言。當1995年Sun推出Java語言之后,全世界的目光都被這個神奇的語言所吸引。但事實上,Java語言最早誕生于1991年,起初被稱為OAK語言,是Sun公司為一些消費性電子產(chǎn)品而設(shè)計的一個通用環(huán)境。最初的目的只是為了開發(fā)一種獨立于平臺的軟件技術(shù),而且在網(wǎng)絡出現(xiàn)之前,OAK可以說是默默無聞,甚至差點夭折。但是,互聯(lián)網(wǎng)的飛速發(fā)展使Java一躍成為整個世界的寵兒。Java在Web上的應用一改以往Internet上信息內(nèi)容的乏味和死板,使世人眼前為之一亮。自從Sun公司于1995年正式以Java這個名字推出該產(chǎn)品后,幾乎所有的Web開發(fā)人員都被他迷倒了。從此,伴隨著互聯(lián)網(wǎng)時代的來臨,Java取得了巨大的成功。

Java語言的優(yōu)良特性使得Java應用具有無比的健壯性和可靠性,這也減少了應用系統(tǒng)的維護費用。Java對對象技術(shù)的全面支持和Java平臺內(nèi)嵌的API能縮短應用系統(tǒng)的開發(fā)時間并降低成本。Java的編譯一次、到處可運行的特性使得它能夠提供一個隨處可用的開放結(jié)構(gòu)和在多平臺之間傳遞信息的低成本方式。特別是Java企業(yè)應用編程接口為企業(yè)計算及電子商務應用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫??偟膩碚f,Java語言主要具有如下的特點:

● Java語言是簡單的。

● Java語言是純粹面向?qū)ο蟮摹?/p>

● Java語言是分布式的。

● Java語言是健壯的。

● Java語言是安全的。

● Java語言是體系結(jié)構(gòu)中立的。

● Java語言是可移植的。

● Java語言是多線程的。

● Java語言是動態(tài)的。

早期受計算機硬件本身的限制,程序運行效率是工程技術(shù)人員必須考慮的問題,隨著計算機硬件技術(shù)的進步,效率已經(jīng)不再是人們考慮的頭等問題。于是編程語言擺脫了原有的硬件束縛,朝著更加多元化、人性化的方向發(fā)展。當然,高級語言也需要面對和匯編語言同樣的問題,即機器如何理解它呢?計算機并不能直接地接受和執(zhí)行用高級語言編寫的代碼,要使機器能夠明白用高級語言所寫的代碼,有兩種可行的方法:一種是對程序進行編譯;另一種則是對程序進行解釋。據(jù)此,高級語言又可分為兩類,即編譯類語言和解釋類語言。

在具體介紹上述兩類高級語言之前,我們先給出翻譯的概念。所謂翻譯,就是指在計算機中放置一個能由計算機直接執(zhí)行的翻譯程序,它以某一種程序設(shè)計語言(源語言)所編寫的程序(源程序)作為翻譯或加工的對象,當計算機執(zhí)行翻譯程序時,就將它翻譯為與之等價的另一種語言(目標語言)的程序(目標程序)。如果一個翻譯程序的源語言是某種高級語言,其目標語言是相對于某一計算機的匯編語言或者機器語言,則稱這種翻譯程序為編譯程序(或者編譯器)。一旦計算機上裝有這種編譯程序,那么當源程序輸入計算機時,源程序就可以通過編譯程序被翻譯成機器語言形式的目標程序,計算機就能夠識別和執(zhí)行。而編譯和解釋就是“翻譯”的兩種具體方式。

編譯是指事先編好一個稱為編譯程序的機器語言程序并作為系統(tǒng)軟件存放在計算機內(nèi),當用戶把由高級語言編寫的源程序輸入計算機后,編譯程序便把源程序整個地翻譯成用機器語言表示的與之等價的目標程序,然后計算機再執(zhí)行該目標程序,以完成源程序要處理的運算并取得結(jié)果。也就是說,在應用源程序執(zhí)行之前,程序源代碼就已經(jīng)被整體“翻譯”成目標代碼(機器語言)了,這樣目標程序就可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。現(xiàn)在大多數(shù)的編程語言都是編譯型的,例如C/C++、Pascal、FORTRAN和COBOL等。

解釋的執(zhí)行方式類似于日常生活中的“同聲傳譯”,也就是說,應用程序源代碼一邊由相應語言的解釋器“翻譯”成目標代碼(機器語言),一邊執(zhí)行,因此解釋型的程序并不會產(chǎn)生目標程序。這樣的好處在于它比較靈活,并可以動態(tài)地調(diào)整、修改應用程序。但解釋型程序的效率比較低,而且不能生成可獨立執(zhí)行的可執(zhí)行文件,即應用程序不能脫離其解釋器。翻譯程序的結(jié)構(gòu)比編譯程序簡單,且占用內(nèi)存較少,因此一些規(guī)模較小的語言常采用這種方式,如BASIC。然而,就目前的情況來看,純粹的解釋程序并不多見,通常的做法都是把編譯和解釋作某種程度的結(jié)合,從而彌補解釋型程序效率不高的弱點。

主站蜘蛛池模板: 宜都市| 馆陶县| 噶尔县| 苍溪县| 东源县| 招远市| 枣庄市| 林西县| 柳江县| 宜都市| 盐池县| 佛教| 普宁市| 青神县| 临洮县| 抚顺县| 长宁区| 福安市| 伊川县| 汕头市| 灵台县| 财经| 教育| 湾仔区| 石首市| 泸溪县| 罗山县| 马鞍山市| 井研县| 光山县| 柳河县| 孝义市| 清原| 黄陵县| 淮滨县| 连云港市| 江西省| 循化| 汶上县| 洛隆县| 玉门市|