最近接觸到Win32彙編,才知道彙編必須是和平台相關的,如做應用則和作業系統和CPU類型相關,而做作業系統就隻和的CPU類型有關。對于《微機原理》裡面的彙編,那是DOS彙編,而Win32彙編是基于Windows的彙編。DOS和Windows是兩個完全不同的作業系統了。
DOS彙編功能的實作依靠的是DOS系統提供的軟中斷,DOS程式是面向過程的單任務的;而Win32彙編功能的實作依靠的是WinAPI,基本的元素是與具體CPU類型有關的彙編指令(一般都是X86啦,因為微軟就支援這個~~)。然後記住不多的常用X86彙編指令,結合Win32API就可以寫程式了。當然,在什麼程式設計環境下進行呢?一般都市MASM32 SDK,這個目前最新版本是Vison11(我于2014.9.3下載下傳),當然這個和微軟沒多大關系了,是由牛人維護的~~http://www.masm32.com/
當然,在真正開始程式設計時,還要注意一下MASM程式設計格式,嗯,推薦一本好的書籍《琢石成器—Windows 環境下32位彙編語言程式設計》
(其實格式并不複雜,語言文法也不複雜,主體還是WinAPI~~不過此時的調用API就比較講究了,不是我們在Visual C++裡面那樣調用就可以,還要考慮一些,例如傳回值過大~~這個就要自己定義一個緩沖區去存放傳回值了~~咦,是不是覺得控制程度很高啊~~
學習這個有什麼用?直接用Visual C++IDE,然後用進階語言去寫程式豈不是很省事?《琢石成器》的作者羅雲彬的解釋是,當我們在Windows下進行加密解密、逆向工程,還有病毒、木馬等有害代碼的分析和防止工作時,Win32彙編是唯一的選擇。(咦,360是會要你的,求才欲渴啊~~)。嗯,某些遊戲的開發估計也用得上(流程是最重要的使用者體驗嘛~~) 嗯,至于我,這個是在調代碼時很有幫助的,無法正常運作的程式,隻能去看他的彙編代碼了,這個是終極調試~~
DOS時代的前輩捧着的是《DOS中斷大全》,Windows時代就要備着《Microsoft Win32 Programmer's Reference》了,這個在我這裡有得下載下傳,在其他站點下載下傳的很多是不能正常打開的~~咦,是以千辛萬苦找到個能用的,也就共享出來了,不用你們去找了。咦~,都是這樣的,作業系統為我們屏蔽了硬體差異,封裝了很多功能,這個是好的,由此帶來的就是我們要捧着它的厚厚的去以它為标準,好好和它磨合着過了~~
說到DOS,那個作業系統是不錯的(咦,windows保留的那個黑乎乎的視窗叫做控制台(console),并不是MS-DOS作業系統噢,在這個控制台中有些DOS的指令是無法執行的~~)DOS的好在哪裡?咦,小,40KB左右,呵呵,用在嵌入式~~不過X86架構的嵌入式晶片沒有。好吧,某一天高興了不知能不能用ARM指令來重寫它,讓它在STM32上跑,哈哈,有空,有心情時試試~~(注意,MS-DOS的彙編源碼微軟是公布了的,微軟把它捐給了美國的計算機博物館~~這個我也下載下傳了,有興趣的可以連續我,不過哪天我有空了,把它共享出來吧!~)還有一點就是,DOS沒有系統代碼的保護區,什麼意思呢,就是你可以修改系統代碼,或者是把自己的代碼放進系統代碼裡運作,所有程式具有相同的權限,可以通路一切資源,這個就有了程式可以自己修改自身代碼了~~(老美的科幻電影常有鏡頭不是傳說哈~~),而Win32基于的80386及以上處理器分了優先級,Windows和Intel合作的吧,Windows運作于0級,即是最進階,可以通路一切資源,而使用者程式隻能是處于最低級,3級,處于這個級别的代碼有很多限制了,嗯,最重要的是,它隻能讀寫變量區,除此之外的都不能寫。~~)
哈哈,就這樣了~~關于Win32彙編的感想就寫到這裡吧,具體去學習,建議大家捧着《琢石成器—Windows 環境下32位彙編語言程式設計》區啃吧!(順便說一下,老羅這個人(就是該書的作者啦),是全國首個破壞過電信系統并被捕的黑客哦,咦,技術高深總是耐不住寂寞嗎~~八卦的新聞連結 http://news.xinhuanet.com/newscenter/2002-04/23/content_369622.htm)