匯編語言是一種應(yīng)用于計(jì)算機(jī)專業(yè)和通信相關(guān)專業(yè)的可能。其被廣泛應(yīng)用于涉及硬件實(shí)現(xiàn)的程序設(shè)計(jì)中,雖然其不屬于高級(jí)語言,但是和高級(jí)語言一樣,都是程序設(shè)計(jì)所使用的工具,都具有非常鮮明的優(yōu)點(diǎn),因此在一些基礎(chǔ)語法和基礎(chǔ)程序設(shè)計(jì)思想方面他們都具有相同的內(nèi)涵和實(shí)現(xiàn)機(jī)制。當(dāng)然,我們應(yīng)該清晰地認(rèn)識(shí)到,匯編語言作為一種底層語言,其與一些高級(jí)語言之間仍然存在一定的區(qū)別。高級(jí)語言的語句功能比匯編語言的指令或偽指令集要強(qiáng)大許多、智能許多;在程序結(jié)構(gòu)、數(shù)據(jù)處理、實(shí)現(xiàn)流程等方面,匯編語言與高級(jí)語言之間也存在著不小的差異。
本文就數(shù)據(jù)的存儲(chǔ)與訪問、數(shù)據(jù)的運(yùn)算以及數(shù)據(jù)流程三方面對比較教學(xué)法進(jìn)行了討論。
一、在數(shù)據(jù)存儲(chǔ)與訪問中的對比教學(xué)
程序設(shè)計(jì)的主要目的是對數(shù)據(jù)進(jìn)行處理,在數(shù)據(jù)處理前首先需要做的就是如何對數(shù)據(jù)進(jìn)行有效存儲(chǔ),并設(shè)定合適的訪問模式。具體而言,主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)所被安排的空間位置;數(shù)據(jù)的空間長度;數(shù)據(jù)的存儲(chǔ)類型和訪問類型。
如果與C語言進(jìn)行對比,可以發(fā)現(xiàn),高級(jí)語言類的數(shù)據(jù)存儲(chǔ)類型基本是直接面向應(yīng)用的,如整型、浮點(diǎn)型、字符型等,其中不同的存儲(chǔ)類型還有細(xì)分,如長整型、短整型、單精度浮點(diǎn)數(shù)、雙精度浮點(diǎn)數(shù)、有符號(hào)數(shù)、無符號(hào)數(shù)等。利用這種面向應(yīng)用的存儲(chǔ)設(shè)置格式,基本實(shí)現(xiàn)了對數(shù)據(jù)空間長度和存儲(chǔ)類型特點(diǎn)的確認(rèn)。在存儲(chǔ)空間位置中,C語言提供了四種存儲(chǔ)位置,即:auto、static、register、extern,分別表示內(nèi)存空間、內(nèi)存空間、寄存器空間等。Extern屬于一種全局變量聲明,其空間存儲(chǔ)類型較為特殊,可以另行討論。對于訪問類型而言,C語言就包含上述全局性的,或者局部周期的,甚至是根據(jù)生命周期確定的其他類型。
而匯編語言屬于一種機(jī)器語言,其基本類型如MASM中的有DB、DD、DW、DT、DQ等,這些定義只具有長度屬性,存儲(chǔ)空間都在內(nèi)存中。另一不同的地方在于匯編語言可以非常方便的直接調(diào)用寄存器單元,且其寄存器空間大小確定,不如C語言靈活,相當(dāng)于C語言中的寄存器變量。也就是說,匯編語言的數(shù)據(jù)更注重空間位置和數(shù)據(jù)長度,沒有更多的數(shù)據(jù)類型之分。
二、數(shù)據(jù)運(yùn)算中的對比教學(xué)
本文的數(shù)據(jù)運(yùn)算包括輸入輸出、運(yùn)算符、堆棧運(yùn)算三方面內(nèi)容。
仍舊以學(xué)生最為熟悉的C語言為例,高級(jí)語言可以直接提供面向?qū)ο蟮南嚓P(guān)的輸入輸出語句、函數(shù)和過程,供編程人員根據(jù)使用情況調(diào)用,這些函數(shù)基本涵蓋了面向應(yīng)用所需的各種類型的數(shù)據(jù)的輸入與輸出。
但是匯編語言的輸入與輸出是面向系統(tǒng)的、通過中斷調(diào)用的方式實(shí)現(xiàn)的。如在MASM中的由DOS提供的21H類的中斷服務(wù)功能等。這是一個(gè)不同的教學(xué)重點(diǎn)。
在進(jìn)行邏輯運(yùn)算時(shí),C語言提供了直接的算數(shù)運(yùn)算符和邏輯運(yùn)算符等,匯編語言雖然不如C語言強(qiáng)大,但是也能夠提供算術(shù)運(yùn)算符,知識(shí)其邏輯運(yùn)算符無法直接用像型運(yùn)算符表示,且其功能實(shí)現(xiàn)上,相對比較繁瑣。更為突出的一點(diǎn)是,在高級(jí)語言中的運(yùn)算符可以處理常量和變量等各種數(shù)據(jù),但是匯編語言只能進(jìn)行常量的處理,變量處理仍然需要通過相應(yīng)的指令來實(shí)現(xiàn)。
在堆棧中,高級(jí)語言的棧抽象數(shù)據(jù)類型依賴于后進(jìn)先出的操作算法,出棧入棧可以不考慮數(shù)據(jù)類型。但是匯編語言的棧屬于運(yùn)行時(shí)棧,由硬件直接支持,在系統(tǒng)層面進(jìn)行子程序調(diào)用實(shí)現(xiàn),編程人員需要考慮數(shù)據(jù)的類型和棧空指針等問題。
三、數(shù)據(jù)流程的對比教學(xué)
在高級(jí)語言中,程序控制基本分為三種結(jié)構(gòu):順序結(jié)構(gòu)、條件判斷結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
仍舊以C語言為例,其可以提供if、for、switch、while或do-while、case、repeat等控制語句,當(dāng)然,在高級(jí)語言中,循環(huán)和分支區(qū)分不是非常明顯,上述不同語句也可以通過具體語義實(shí)現(xiàn)不同的控制。另外,還有特殊的跳轉(zhuǎn)語句如goto等。
但是在匯編語言中,控制流程通過控制類指令具體實(shí)現(xiàn),如在MASM中的無條件轉(zhuǎn)移指令如JMP、條件轉(zhuǎn)移指令如JGE等、循環(huán)控制指令如LOOP等。除此之外,匯編語言也具有在子程序或者中斷程序中的返回或調(diào)用指令,如RET、CALL等。需要注意的是,中斷服務(wù)程序概念應(yīng)該是匯編語言所獨(dú)有的。
上述數(shù)據(jù)流程中,兩者的區(qū)別之處在于,高級(jí)語言的數(shù)據(jù)流程控制是通過子程序調(diào)用、函數(shù)名調(diào)用等方式實(shí)現(xiàn)的,而匯編語言的實(shí)現(xiàn)方式為利用專門的控制指令進(jìn)行跳轉(zhuǎn)和實(shí)現(xiàn)。
四、總結(jié)
本文通過幾種較為典型的對比分析了如何幫助學(xué)生更好的理解兩種語言的差異,理清基本學(xué)習(xí)思路,在實(shí)際應(yīng)用中,還有許多其他的內(nèi)容也可以通過對比的方式進(jìn)行實(shí)踐教學(xué)。通過這種教學(xué)方式,可以幫助學(xué)生領(lǐng)悟不同語言之間的區(qū)別和聯(lián)系,增強(qiáng)學(xué)生的應(yīng)用能力,實(shí)現(xiàn)課堂教學(xué)的有效性和高效性。