选择“Win32汇编”的三大理由?
選擇Win32匯編的理由是什么呢?
? ?? 在DOS時(shí)代,學(xué)習(xí)匯編就是學(xué)習(xí)系統(tǒng)底層編程的代名詞,僅要成為一名入門級(jí)的匯編程序員,就需要學(xué)習(xí)從CPU結(jié)構(gòu)、CPU工作方式、各種硬件的編程方法到DOS工作方式等范圍很廣的知識(shí)。隨著Windows時(shí)代的到來,Windows像一堵巨大的墻,把我們和計(jì)算機(jī)的硬件隔離開。對(duì)于DOS的匯編程序員來說,就像在一夜之間,我們發(fā)現(xiàn)自己曾經(jīng)學(xué)過的幾乎所有的東西都被Windows封裝到內(nèi)核中去了,由于保護(hù)模式的存在,我們又無法像在DOS下那樣闖入系統(tǒng)內(nèi)核為所欲為。在Windows下用任何語言編程都必須遵循Windows的規(guī)范,匯編也不例外,也就是說,匯編不再是一種“有特權(quán)”的語言。面對(duì)洶涌而來的Visual C++,Visual Basic,PowerBuilder和Java等各個(gè)領(lǐng)域的猛將,從DOS時(shí)代“為所欲為”的“系統(tǒng)警察”崗位下崗,在其他領(lǐng)域又沒有一技之長,匯編語言似乎失去了生存的意義,有很多人在DOS轉(zhuǎn)向Windows的時(shí)候放棄了匯編語言。
??? 但是經(jīng)過短暫的失落,擺正了自己在系統(tǒng)中的位置,我們發(fā)現(xiàn)從“系統(tǒng)警察”轉(zhuǎn)換到遵循Windows規(guī)范的“好市民”后,匯編語言又慢慢地在這個(gè)世界流行起來了。畢竟,不能為所欲為也可以有好的一面,我們可以不必再考慮一些老大難的問題,如程序運(yùn)行時(shí)會(huì)面對(duì)什么樣的顯示卡,如何驅(qū)動(dòng)不同的打印機(jī),內(nèi)存不夠了如何用磁盤交換,等等。我們也可以在了解更少硬件知識(shí)的情況下就可以掌握Win32的匯編編程。而且,我們驚喜地發(fā)現(xiàn),做了“好市民”以后,我們反而擁有了和其他語言同樣的權(quán)利——為了做圖形和界面等方面的功能,匯編程序員在DOS時(shí)代連做夢都在羨慕C語言龐大的函數(shù)庫,而現(xiàn)在,Windows為我們提供了比這還要多得多的函數(shù),以至于其他大部分語言可以做出來的功能,匯編都可以做,而其他語言做不到的功能,匯編照樣可以做!所以這就是理由之一:Win32匯編可以當(dāng)做一種功能強(qiáng)大的開發(fā)語言使用,使用它完全可以開發(fā)出大型的軟件來。
??? 正因?yàn)閃in32匯編看上去不再那樣低級(jí),于是有讀者曾經(jīng)提出:Win32匯編講的都是用API來寫程序,和高級(jí)語言差不多,以前在DOS下使用的中斷什么的都不能用,所以沒有什么新奇的了。還有讀者認(rèn)為本書只不過是MSDN的匯編版本而已。言下之意就是:學(xué)匯編就是為了了解高級(jí)語言底下一層的功能,但現(xiàn)在Win32匯編卻使用和C++等語言相同的API接口,既然和高級(jí)語言處于同一個(gè)級(jí)別,我們?yōu)槭裁催€要去和機(jī)器指令打交道呢,還不如去學(xué)Visual C++方便。
但是我們可以這樣問一問自己:
問:在DOS匯編中我們?yōu)槭裁从弥袛喙δ?#xff1f;
答:為了使用DOS內(nèi)核提供的功能。
問:在DOS中我們常常自己用操作I/O端口的方法讀寫硬盤或操作顯卡嗎?
答:不,我們用系統(tǒng)提供的int 13h和int 10h。
……
??? 同樣,在Win32匯編里使用API也是為了使用Windows內(nèi)核提供的功能。只不過使用的方式不再是中斷方式而已,這不是Win32匯編語言“高級(jí)化”了,而是高級(jí)語言因?yàn)槭褂肳indows的API接口而“低級(jí)化”了,其代價(jià)就是無法移植到其他系統(tǒng),用Visual C++寫的程序是無法移植到其他操作系統(tǒng)平臺(tái)上的,只有和平臺(tái)無關(guān)的ANSI C++等才能算是真正意義上的高級(jí)語言。
??? 其實(shí),任何匯編語言都是和操作系統(tǒng)密切相關(guān)的,不管是DOS匯編、Win32匯編,還是Linux匯編,都是基于特定的操作系統(tǒng)的,如果一定要繞過操作系統(tǒng),那么就不會(huì)有DOS匯編和Win32匯編的區(qū)別了,但是這樣的話我們不是在學(xué)匯編,而是在自己開發(fā)操作系統(tǒng)。高級(jí)語言在不同的操作系統(tǒng)上看起來都差不多,但作為一種低級(jí)語言,不同操作系統(tǒng)上的匯編就是不同的世界。所以,既然Windows和DOS是兩個(gè)完全不同的操作系統(tǒng),我們就必須拋棄DOS匯編中的大部分概念從頭開始學(xué)習(xí)Win32匯編。這就是理由之二:Win32匯編是Windows環(huán)境下一種全新的編程語言。
??? Win32環(huán)境下的很多高級(jí)語言,如Visual C++和Visual Basic等,一如既往地對(duì)實(shí)現(xiàn)的細(xì)節(jié)進(jìn)行了或深或淺的封裝,就連最能表現(xiàn)Windows特征的部分,如消息循環(huán)和多線程的處理等內(nèi)容也都被隱藏封裝,使我們?cè)谑褂盟鼈冞M(jìn)行可視化編程的同時(shí),無法全面了解Win32程序運(yùn)行的具體方式。在學(xué)習(xí)Win32匯編以后,這些隱藏在高級(jí)語言后面的細(xì)節(jié)就暴露出來了。
??? 由于封裝的關(guān)系,各種高級(jí)語言或多或少存在某種“缺陷”,比如VB不支持指針,結(jié)果很多需要使用指針的API用起來就很不方便,像多線程一類的特征在VB中就無法實(shí)現(xiàn),PowerBuilder也是如此;C語言已經(jīng)是最靈活的高級(jí)語言了,但還是無法在代碼級(jí)別處理某些需求;而匯編語言見到的是一個(gè)最真實(shí)的操作系統(tǒng),它可以用最靈活的方式使用各種系統(tǒng)功能,第13章中有關(guān)進(jìn)程隱藏的內(nèi)容就是最好的寫照。所以理由之三就是:使用Win32匯編語言是了解操作系統(tǒng)運(yùn)行細(xì)節(jié)的最佳方式。
?
本文節(jié)選自《琢石成器——Windows環(huán)境下32位匯編語言程序設(shè)計(jì)》一書的前言
轉(zhuǎn)載于:https://www.cnblogs.com/myjavait/archive/2009/06/16/2142526.html
總結(jié)
以上是生活随笔為你收集整理的选择“Win32汇编”的三大理由?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery教程(十三)jQuery L
- 下一篇: 轉:showModalDialog和sh