Intel汇编语言程序设计学习-第一章 基本概念
生活随笔
收集整理的這篇文章主要介紹了
Intel汇编语言程序设计学习-第一章 基本概念
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一章基本概念
1.1 ?簡單介紹
? ? 本書著重講述MS-Windows平臺上IA-32(Intel Architecture 32bit,英特爾32位體系架構)兼容微處理器的匯編語言程序設計,可以使用Intel或AMD的32位/64位處理器運行本所有例子。? ? 匯編語言是有所程序設計語言中最古老的語言,它與計算機的機器語言最為接近,通過匯編語言可以直接訪問計算機的硬件,所以要求讀者深入了解計算機體系結構和操作系統的大量細節。
1.1.1 ?一些精彩的提問
?(沒用的地方我都直接簡化或者刪除了啊!)需要具備什么背景知識?
? ? 至少要學完一門程序設計的入門語言。
什么是匯編器和鏈接器?
? ? 匯編器是把匯編語言源程序轉換為機器語言的實用工具程序。鏈接器是吧編譯器創建的多個單獨的文件組合連接成可執行的應用程序的實用工具。另外一個工具稱為調試器、允許在程序運行時單步執行并查看寄存器和內存的內容。
需要什么硬件和軟件?
? ? 需要一臺裝配有Intel386,Intel486,Pentium或IA-32兼容處理器的計算機。例如使用AMD系列處理器完全完全能夠正常工作。MASM兼容從Windows95開始的所有32位版本的WIndows操作系統。一些與直接硬件訪問和磁盤扇區編程相關的程序必須在DOS,WIndows95/98/Me下運行,這是由于Windows NT/2000/XP有嚴格的安全限制。
能創建什么類型地址模式程序?
? ? 16位實地址模式程序:16位實地址模式程序可以在MS-DOS或MS-Windows的控制臺窗口下運行。實地址模式程序也稱為實模式程序,使用Intel8086/8088處理器要求的分段內存模式。
? ? 32位保護模式程序:32位保護模式程序可運行所有32位版本的Windows操作系統上,通常比實模式程序更加易于編寫,易于理解。
? ? ?為了更好的理解上面兩個模式,我又查了一些資料,發現其中一個說的比較詳細(http://blog.csdn.net/heiworld/article/details/24371677)。
? 1.計算機體系結構(也適用于Intel IA-32系列處理器)的基本原理。
? 2.一些基本的布爾邏輯概念以及它是如何用于程序設計和計算機硬件的。
? 3.IA-32處理器如何管理內存,如何使用實模式、保護模式和虛擬模式。
? 4.高級語言編譯器(如C++)是如何將源代碼語句翻譯成匯編語言和機器語言的。
? 5.高級語言是如何在機器語言層次實現算是表達式。循環和邏輯結構的。
? 6.數據的表示方法,包括有符號和無符號整數、實數以及字符數據。
? 7.如何在機器語言層次調試程序。對于C/C++這樣的能夠訪問低層數據和硬件的語言來說,這種調試能力尤為重要。
? 8.應用程序是如何通過終端服務程序、系統調用和共享內存區域才做系統進行交互的。
? 9.匯編語言代碼與C++程序之間的接口。
? 10.穿件匯編語言應用程序。
匯編語言與機器語言有什么關系?
? ? 機器語言是一種數字語言,只有計算機的處理器(CPU)才能理解它。IA-32兼容處理器能夠理解一種通用的機器語言。匯編語言由使用短助記符的語句構成,如ADD,MOV,SUB和CALL等。匯編語言通機器語言之間是一一對應的關系:一條匯編執行對應一條機器語言指令。
C++和Java等語言與匯編語言有什么關系?
一對多的關系,下面是我用vs2012反匯編的幾句代碼:
bool bBool = true;
013313BE ?mov ?byte ptr [bBool],1 ? 把1這個值直接放到指針指向位置
char cByte = 2;
013313C2 ?mov ? byte ptr [cByte],2 ? 同上
double fDouble = 3.0; ? ? ? ? ? ? ?double的比較特別,之后會解釋
013313C6 ?movsd ? ? ? xmm0,mmword ptr ds:[1335858h] ?
013313CE ?movsd ? ? ? mmword ptr [fDouble],xmm0 ?
int nY = 3; ? ? ? ? ? ? ? ? ? ? ? ? 同上
013313D3 ?mov ? ? ? ? dword ptr [nY],3 ?
int nX = (4 + nY) * 3;
013313DA ?mov ? ? ? ? eax,dword ptr [nY] ?先把Y放寄存器里
013313DD ?add ? ? ? ? eax,4 ? ? ? ? ? ? ? ? ? ? ??寄存器值加4
013313E0 ?imul ? ? ? ?eax,eax,3 ? ? ? ? ? ? ? ??寄存器的值=寄存器的值乘3
013313E3 ?mov ? ? ? ? dword ptr [nX],eax ?把當前寄存器值拷貝到X中
匯編語言是可移植的嗎?
? ? 并不能,因為匯編語言總是為特定系列的處理器設計的。
為什么要學習匯編語言?(我的目的是為了了解匯編,然后去方便學習別的東西,而并不是作者所說的那樣詳細,下面是作者的想法)
? 1.適合編寫嵌入式程序。
? 2.一些實時應用(如仿真和硬件監控)要去精確計量時間并實時響應。高級語言不允許程序員完全通知編譯器生成的機器碼,不過匯編語言允許程序員控制程序幾乎每個字節。
? 3.許多專用硬件設備,有各種各樣的限制。
? 4.匯編語言有助于對計算機硬件、操作系統、應用程序之間交互的整體理解。使用匯編語言,可以隨時應用和校驗計算機體系結構和操作系統課上學習的知識和理論。
? 5.應用程序員有時會發現高級語言中的種種限制會阻礙位操作和數據加密等底層操作的有效實現,他們一般會調用匯編語言編寫此過程。
? 6.各種驅動。
1.1.2 ?匯編語言應用程序
? ? 前面說了一些,沒啥用直接省略了。? ? C++中也可以使用匯編,這就是在使用高級結構和訪問低層細節之間提供了一種折中的方案,用戶可以使用匯編語言直接訪問硬件,但這將是程序完全喪失可移植性。大多數C++編譯器都具有生成匯編語言源代碼的能力,程序員對生成匯編語言代碼進行精煉、優化后再便以為可執行文件。
1.2 ?虛擬機的概念
? ? 虛擬機的概念是說明計算機軟硬件之間相互關系的最佳途徑之一。計算機能夠執行機器語言書寫的程序,這種語言的每條指令都簡單到能用相對較少的電路單元即可執行。為簡化期間。我們稱這種語言為L0。程序員使用L0語言編程非常困難,因為需要考慮非常低層、非常細微的地方,并且L0由純粹的數字構成,如果能構造一種更加易用的新語言L1的話,那么程序可以用L1來編寫了,有兩種方法可以達到該目的的。
解釋方法:當執行用L1語言編寫的程序時,使用以L0語言編寫的解釋程序對L1程序的每條指令解碼并執行,這樣L1程序馬上可以執行,但是每條指令在執行之前都必須解碼。
翻譯方式:用特別設計編寫的L0程序將整個L1源程序翻譯成L0程序,生成的L0程序就可以直接在計算機硬件上執行了。(上面兩種方式讓我想起兩個JavaScript引擎,JavaScriptCore和V8,早期的JavaScriptCore就是采取解釋方法,效率比較低,而V8自從誕生就是為了效率,直接編譯成本地代碼,而且跳過了字節碼的階段。)
? ? 每臺虛擬機都可由硬件或軟件構成。人們可以為虛擬機VM1編寫程序,如果虛擬機VM1能夠實現為真實的計算機硬件,程序就可以直接在硬件上執行了。除此之外,為MV1編寫的程序也可以通過監視或翻譯的方法在虛擬機VM0上執行。
? ? 機器VM0和VM1不應該有根本的不同,否則翻譯和監視過程將過于耗時。如果VM1支持的語言對編寫應用程序的程序員不夠友好怎么辦?繼續抽象,設計虛擬機知道VMn,它支持的語言功能強大并且易于使用。
程序設計語言Java就是基于虛擬機概念的,Java語言編寫的程序由Java編譯器翻譯成Java字節碼,后者是一種低層語言,可以由Java虛擬機(JVM)來快速執行。由于在許多不同的計算機系統上都時間了JVM,使得Java程序相對而言是與系統無關的。
具體實現:
數字邏輯(第0層):計算機的數字邏輯硬件用虛擬機的第0層表示。
微結構(第一層):計算機芯片制造商通常不允許普通用戶編寫微指令,特殊的微結構指令通常是廠商秘密。像從內存中取數字并且加1這樣的基本操作可能需要3-4條維指令。
指令集體系結構(第2層):計算機芯片制造商設計了一套國華在未處理器內部的指令集,用于執行如移動、加法和乘法等基本操作,這套指令集稱為常規機器語言,或簡稱為機器語言。每條機器語言指令將分解成幾條偽指令執行。
操作系統(第3層):隨著計算機的發展,人們設計了其他能夠是程序員更加高產的虛擬機。第3層的虛擬機能夠理解用戶發出的注入加載執行程序、顯示目錄之類的交互命令,這就是眾所周知的計算機操作系統。操作系統軟件被翻譯成機器碼在第2層上運行。(操作系統的源碼有C或匯編語言寫成,一旦編譯之后,操作系統實際上不過是一個能夠解釋第3層命令的第2層程序。)
匯編語言(第4層):在操作系統層次之上的程序設計語言提供了能夠實際用來開發大型軟件的翻譯層。匯編語言屬于第4層,它使用ADD,SUB和MOV等很容易翻譯到指令集體系結構層(第2層)的短助記符,其他一些匯編語句(如中斷調用),則由操作系統(第3層)直接執行匯編語言程序在執行前一般要全部翻譯(匯編)成機器語言。
高級語言(第5層):第5層是諸如C++,C#,VB和Java之類的高級語言,這些語言有功能強大的語句,每條語句通常被翻譯成4層的多條指令。在內部,編譯器把第5層的程序翻譯成第4層的程序代碼,后者由編譯器會變成機器語言。
最后有一個章總結,因為沒有需要刪減和簡化的地方,直接粘貼過來吧。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Intel汇编语言程序设计学习-第一章 基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式-备忘录模式
- 下一篇: Intel汇编语言程序设计学习-第二章