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

第1章 背景知識

讓我們在輕松的背景知識介紹中開始Win32匯編之旅。本章將對Win32平臺的歷史和現狀做簡要介紹,同時對80386處理器,以及Windows操作系統中涉及Win32匯編的基礎知識部分做快速充電。

1.1 Win32的軟硬件平臺

1.1.1 80x86系列處理器簡史

Win32可以在多種硬件平臺上運行,但使用最廣泛的硬件平臺是基于Intel公司80x86系列處理器的微型計算機。

自1978年6月Intel公司推出它的第一個16位微處理器8086以來,計算機技術就開始進入飛速發展的時期。8086芯片的主頻為4.43 MHz,集成的晶體管數大約為2.9萬個,運算器的位長為16位,采用了20條地址線,可以尋址的范圍為220個字節地址,即1 MB;1982年,該公司發布了80286處理器,芯片上集成了12萬個晶體管,主頻提高到了12 MHz。

1985年Intel公司推出32位的80386處理器,芯片上集成的晶體管數為27.5萬個,主頻提高到了33 MHz,地址線則擴展到32條,直接尋址的能力達到4 GB。80386處理器在設計的時候考慮了多用戶及多任務的需要,在芯片中增加了保護模式、優先級、任務切換和片內的存儲單元管理等硬件單元。80386的出現使Windows和UNIX等多任務的操作系統可以在PC上運行。直到現在,運行于80x86處理器之上的多任務操作系統都是以80386的運行模式為基礎的。

1989年,Intel公司推出80486處理器,在芯片內集成了浮點處理器和8 KB的一級緩存,片內的晶體管數達到了118萬個,并把主頻提高到50 MHz~66 MHz。80486處理器開始使用流水線技術,即在CPU中由5~6個不同功能的電路單元組成一條指令處理流水線,然后將一條指令分成5~6步后再由這些電路單元分別執行,由此提高CPU的運算速度。電路單元的數目就是流水線的深度。為了使計算機中的其他部件不至于成為CPU速度發展的瓶頸,80486處理器開始使用了倍頻技術,即讓處理器速度(CPU主頻)數倍于系統總線速度(外頻)。

從80386開始,在Intel公司向市場大量推出處理器芯片的同時,其他一些電腦公司和廠商如AMD和Cyrix等,也紛紛投入大量的人力財力進行處理器的開發和研制,并很快把研制出的產品推向市場。這些CPU芯片和80386芯片兼容,在編程上可以使用與Intel處理器相同的指令集。

1993年3月Intel公司推出80586處理器。由于無法阻止其他公司把自己的兼容產品也叫做x86,所以把產品取名為Pentium,并且進行了商標注冊,同時啟用了中文名稱“奔騰”。Pentium芯片中集成了310萬個晶體管,內置16 KB緩存,主頻有60 MHz和66 MHz兩個版本,后來逐步提高,到1995年6月時主頻提高到了133 MHz。Pentium處理器采用許多新技術,其中最重要的變化是采用了超標量體系結構。即將兩個同時工作的指令執行部件封裝在同一芯片中,用兩條并行的通道來執行指令,這相當于兩個CPU同時工作,大大提高了處理速度。在586時代,AMD和Cyrix等其他公司也推出了相應檔次的CPU,命名為5x86和K5等。

1995年11月,Intel公司推出代號為P6的新一代Pentium Pro處理器,中文名稱為“高能奔騰”。Pentium Pro芯片中集成了550萬個晶體管,主頻分150 MHz~200 MHz多個版本。片內集成了3條平行的指令執行通道,相當于3個CPU并行工作,并用超流水線技術將流水線的深度提高到了14級。P6處理器內置16 KB一級高速緩存,并將256 KB或512 KB的二級高速緩存芯片與CPU內核芯片同時封裝在一個外殼中,縮短了CPU和二級高速緩存之間的線路走線距離。同時,P6處理器開始使用亂序執行和分支預測技術,這使下一條指令不一定要等到前一條指令執行完畢后才可以開始。所有這些技術使這種CPU在運行32位指令系統時的執行效率明顯高于上一代Pentium。

隨著CPU和操作系統的發展,多媒體技術開始流行,依靠浮點處理器已經不能滿足多媒體音頻和視頻信號的實時處理任務了。1997年年初,Intel公司在Pentium Pro芯片上增加了專用于多媒體處理的57條指令和8個64位專用寄存器,命名為Pentium MMX。Pentium MMX使用了450萬個晶體管,最高主頻達到了233 MHz。

1997年5月,Intel公司又向市場推出了Pentium II芯片,中文名稱為“奔騰II代”。Pentium II內集成了750萬個晶體管,最高主頻達到了300 MHz,也具有MMX的功能。這種處理器將二級高速緩存移到芯片外,以提高芯片成品率。為了照顧低端市場,1998年Intel公司推出了除去二級高速緩存的Pentium II簡化版,命名為Celeron處理器。由于其缺乏片內二級高速緩存,對速度的影響非常巨大,使Celeron處理器的實際性能非常低。1998年4月,Intel公司又把128 KB二級高速緩存加回到Celeron處理器中,命名為Celeron A處理器。Celeron A的主頻從300 MHz開始。

1999年,Intel公司推出集成了950萬個晶體管,主頻為450 MHz~500 MHz,外頻為100 MHz的Pentium III處理器。這種處理器新增了SSE指令集,提供70條全新的指令,可以大大提高3D運算、動畫片、影像與音效等功能,增強了視頻處理和語音識別的功能。這套指令集主要為瀏覽WWW網頁而設計。Pentium III處理器在芯片內集成了64 KB的一級緩存,并將512 KB的二級緩存安裝在外殼卡盒內。

2000年11月,Intel公司發布集成4200萬個晶體管的Pentium 4處理器,主頻達到了1.4 GHz,系統總線速度為400 MHz,流水線的深度提高到20級,并增加了SSE2指令集,提供144條新指令用于提高攝像、多媒體、3D圖像和密集運算等方面的速度。到2005年,Pentium 4處理器的主頻已經提升到了3 GHz以上。

在如此高的主頻下,電壓和發熱量成為繼續提高主頻的主要障礙,導致無法再通過簡單提升時鐘頻率來提升CPU性能。面對主頻之路走到盡頭,Intel開始尋找其他方式來提升處理器的性能,而最具實際意義的創新是增加CPU內處理核心的數量。多核時代開創于2005年春季,其標志是Intel的Pentium D雙核芯片,2006年1月Intel發布了首款雙核移動處理器Core Duo,時至今日,四核技術的CPU也已經發布。

從第一塊微處理器誕生至今,處理器技術發展出不少新的體系結構。從微處理器的指令系統來看,有兩種分支走向,一種是CISC;一種是RISC。CISC即復雜指令系統計算機。從PC誕生以來,人們一直沿用CISC指令集方式。它的指令不等長,指令的條數比較多,編程和設計處理器時都較為麻煩。在CISC之后,人們發明了RISC,即精簡指令系統。這種指令系統采用等長的指令,且指令數較少,通過簡化指令可以讓計算機的結構更為簡單,進而提高運算速度。

Intel的80x86系列處理器看起來屬于CISC體系,但實際上,從Pentium處理器開始,都已不是單純的CISC體系了。因為它們引入了很多RISC體系里的先進技術來大幅度提高性能。但是,好馬也得配好鞍——沒有軟件支持的CPU再快也不是好CPU。為了兼容已有的軟件,80x86系列處理器也不得不背上沉重的歷史包袱。如CPU的位長還是停留在32位;在寄存器、運行模式與內存管理模式等方面還是繼承了早期的80386模式;80386以后的處理器雖然增加了不少新指令,但大多用于多媒體擴展,其中很少有和操作系統密切相關的指令。所以,如果不涉及3D及密集運算方面的運算,僅從操作系統的角度看,這些處理器只能算是一個快速的80386處理器而已。

1.1.2 Windows的歷史

Win32指的是32位的Windows系操作系統。Microsoft公司有一系列的Windows操作系統,下面先簡單介紹Windows的歷史。

談到Windows的歷史就不能不談MS-DOS的歷史。MS-DOS的技術源自CP/M操作系統。1973年,第一個8位磁盤操作系統CP/M出現,這種操作系統有較好的層次結構,它利用BIOS隔離硬件和操作系統的其他模塊,有很好的可移植性和易用性。在此基礎上,西雅圖計算機公司于1978年開始開發QDOS,此后又成功研制出16位微型機的實驗性操作系統86-DOS。

也正是在這段時期,IBM公司正在開發基于8086處理器的IBM PC,急需一個配套的操作系統,但和CP/M開發者之間的談判不是很順利,這時Microsoft公司乘虛而入。Microsoft沒有足夠的時間開發新的操作系統,于是找到了西雅圖計算機公司,雙方達成了由Microsoft經銷86-DOS操作系統的協議。以86-DOS操作系統為基礎,Microsoft很快開發出MS-DOS 1.0版本。1981年8月,MS-DOS 1.0和IBM PC一起發布。

MS-DOS 1.0還不支持硬盤和分層目錄結構,文件管理中繼承了CP/M操作系統的許多功能,但僅支持單面軟盤。到了1983年,為了支持帶硬盤的PC/XT計算機,經過較大地改造并吸取了UNIX的很多優點后,MS-DOS升級到2.0版本,可以支持32 MB大小的硬盤分區。1984年,MS-DOS升級到3.0版本,開始支持1.2 MB軟盤,用于PC/AT計算機。1986年,為了支持3.5英寸軟盤,MS-DOS升級到3.2版本。

1987年,為了兼容IBM和PS/2個人計算機,MS-DOS升級到3.3版,這也是最流行的DOS版本。1990年,Microsoft推出MS-DOS 5.0,開始支持2.88 MB的軟盤,并可以把部分系統代碼放到高端內存運行,空出低端內存供應用程序使用,同時將磁盤單個分區的支持容量提高到了2 GB。

一直到MS-DOS的最后版本6.22為止,絕大多數的PC上運行的就是這個字符界面的操作系統。當時要想玩轉DOS,必須有專業計算機知識,不然“Bad command or filename”之類的提示隨處可見,對此一般用戶還真會不知所措。所以,“雖然界面簡陋卻令人興奮”的Windows 1.0于1985年11月正式發布時,還是為沉悶的屏幕帶來了一絲清新,畢竟它使非專業的人員使用計算機變得容易。在增強了鍵盤和鼠標接口后,1987年微軟又推出了Windows 2.0版。由于當時的硬件和DOS功能的限制,Windows并不實用,所以這兩個版本并不成功。Windows 2.0版發布不久,Intel公司的80386處理器發布,Microsoft推出使用80386處理器V86模式的Windows 2.1,即Windows/286。

在接下來的時間里,基于Intel 80x86微處理器的IBM兼容機已經快速普及,這給Microsoft開發新的Windows系統提供了發展空間和市場。Microsoft公司對Windows的內存管理和圖形界面做了重大改進,在1990年5月份推出了Windows 3.0,可以支持Intel 80286/386/486微處理器的保護模式,并可以訪問達16 MB的內存。Windows 3.0一面世便在商業上取得了驚人的成功,從而一舉奠定了Microsoft在操作系統上的壟斷地位。1992年4月,Microsoft推出了更穩定的Windows 3.1,可以支持True Type字體。Windows 3.1是16位Windows中最流行的版本。

1993年5月,Microsoft發布了具備安全性和穩定性特征的32位操作系統Windows NT 3.11,主要針對網絡和服務器市場。“NT”代表“新技術”(New Technology)。NT 3.11是Windows系列中使用32位編程模式的第一個版本。它充分利用80386及以上處理器的平坦地址空間和保護模式等新技術,并可以移植到Alpha、MIPS和Power PC等不同的處理器平臺上運行。

隨后,Microsoft借Windows東風,于1995年8月推出新一代操作系統Windows 95(又名Chicago)。Windows 95實現了很友好的用戶界面,支持即插即用功能,支持主流多媒體設備和DirectX編程接口,成為Microsoft發展史上的一個里程碑,也是操作系統發展史上的一個里程碑。從此,Windows 9x便取代了Windows 3.x和MS-DOS操作系統,成為個人計算機平臺的主流操作系統。

在20世紀90年代后期,Microsoft根據家庭個人用戶和商業辦公用戶的不同需求,分別提供Window 9x和Windows NT這兩個系列的操作系統,Windows 9x注重用戶界面及其他易用性特征,而NT系列則在純32位內核的穩定性和可靠性等企業級特征上下工夫;另一方面,特別針對不同規模商業用戶的需求,Windows NT系列分為工作站版和服務器版等多個版本。在Windows 9x系列上,從Windows 95 OSR2版起,Microsoft先后發布了Windows 98,Windows 98 SE和Windows Me這三個面向家庭和個人用戶的PC操作系統;而在商用操作系統領域,繼Windows NT 3.11之后,Microsoft相繼發布了Windows NT 3.5和4.0兩代操作系統,并在NT 4.0上采用了Windows 95式的用戶界面。2000年,Microsoft發布采用純32位內核并照顧了家庭消費類應用軟件的Windows NT 5.0,即Windows 2000。

為了利用MS-DOS時代大量的應用程序,保持向下的兼容性,Windows 9x的內核模塊還有許多地方使用16位程序,但在編程上支持32位的編程模式。Windows NT系列和Windows 9x系列操作系統都支持Win32 API(Application Programming Interface),即Windows 32位應用程序編程接口,Win32 API為應用程序提供了大量的系統功能調用,通過Win32 API調用Windows系統相當于在MS-DOS中通過中斷方式調用系統功能。就像DOS匯編程序中隨處可見的INT 21h指令一樣,Windows應用程序中Win32 API也隨處可見。

隨著時代的發展,針對個人用戶領域,Microsoft于2001年10月發布了Windows XP,2007年1月份發布了Windows Vista;針對商業操作系統領域,于2003年5月發布了Windows Server 2003,2008年2月發布了Windows Server 2008。雖然兩個系列的操作系統側重點各不相同,個人操作系統側重于文檔管理、游戲、個人通訊、流媒體等功能,商業操作系統側重于活動目錄、組策略和管理、磁盤管理等面向服務器的功能,但是從編程的角度來講,這些操作系統并沒有多少不同之處,仍然使用Win32 API作為編程接口。

1.1.3 Win32平臺的背后——Wintel聯盟

Windows是伴隨著Intel 80x86系列處理器從弱小逐漸成為霸主的。在20世紀90年代,Intel 80x86系列處理器更新換代最快的時期也就是Microsoft的Windows系列最紅的時期。在這個時期,Windows標志和Intel Inside標志幾乎是每一臺桌面PC上都有的烙印。Microsoft和Intel公司一軟一硬,完全統治著全球PC機的市場,成為整個PC時代的象征,被世人稱為Wintel聯盟。

從20世紀80年代起,當時規模甚小的Microsoft和Intel正式攜手,逐步壟斷了計算機產業硬件與軟件的主要領域。每當Microsoft推出功能更強的軟件后,Intel處理器的需求量就上升;同樣,當Intel生產出速度更快的處理器后,Microsoft的軟件因有了更好的平臺而顯得更易用。Intel有多快的CPU,Microsoft就有相應的、龐大的軟件來支持它。Microsoft的應用程序不管有多龐大,需要多快的速度,Intel的新處理器又總能滿足它。業界也必須出奇一致地放棄原有的軟硬件平臺,轉到新平臺上去。因為,誰跟不上Wintel的步伐,誰就極有可能被淘汰出局。

Wintel聯盟不僅是針對競爭對手的聯盟,它還是迫使用戶升級的同盟。在升級的循環中,多數用戶往往為了一個應用而被迫升級整個系統。Intel有多快的CPU,Microsoft就有多花哨、多龐大的操作系統與之相配合。操作系統的升級即意味著應用軟件的全面升級,而應用軟件的升級則意味著用戶整個系統必須升級。如果用戶還在原有的系統上工作,那么就再也得不到新軟件的支持了,因為,所有的應用軟件公司都不愿意在過時的操作系統上投資開發自己的應用軟件。大家都有體會,運行Windows 95很快的Pentium II/250把Windows 98一裝上去,立刻慢了下來,等到升級到了Pentium III/450,Windows 98運行起來很快了,Windows 2000又出來了,“快速”的PIII又成了老牛。在又一輪的升級下,CPU爬到了1 GHz以上,等到Windows 2000運行起來很舒暢了,再試一下Windows XP,用戶升級的欲望又出來了!結果,用戶口袋里的銀子永遠不會有滿的一天。

時鐘走過2000年,Wintel聯盟已呈衰減之勢。Sun,IBM,Oracle,Linux,壟斷和司法部等名詞讓Microsoft感到頭痛;AMD的速龍和鉆龍處理器也讓Intel手忙腳亂。Microsoft和Intel在利益上的沖突也越來越公開化,整個業界都感受到了Wintel聯盟將土崩瓦解的氣息。

不管業界風起云涌也好,一片死寂也好,Intel 80x86平臺和Windows是桌面計算機上最流行的配置已是不爭的事實。為了自由和創新,我們可以去學習Linux,但在更多的時候,學會Win32編程是不得已的選擇,即使是全世界的計算機中只剩50%在運行Windows,Windows程序員仍然有廣闊的用武之地,這也算是無奈之際給自己一個理由吧!

主站蜘蛛池模板: 苏尼特左旗| 越西县| 静海县| 宜州市| 正定县| 西乡县| 彩票| 南江县| 杨浦区| 遵义市| 灵宝市| 博客| 稷山县| 长葛市| 沅陵县| 乡城县| 裕民县| 定边县| 岫岩| 松阳县| 巩义市| 呼图壁县| 新民市| 札达县| 册亨县| 茶陵县| 高碑店市| 樟树市| 忻州市| 高陵县| 琼中| 台北市| 岳池县| 石狮市| 林周县| 太保市| 千阳县| 博乐市| 株洲县| 西藏| 寿宁县|