DOS Windows匯編語言程序設計教程-課件第一章_第1頁
DOS Windows匯編語言程序設計教程-課件第一章_第2頁
DOS Windows匯編語言程序設計教程-課件第一章_第3頁
DOS Windows匯編語言程序設計教程-課件第一章_第4頁
DOS Windows匯編語言程序設計教程-課件第一章_第5頁
已閱讀5頁,還剩74頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程性質 本課程是計算機科學與技術專業的必修課程、也是本系其它專業專業課程學習的專業基礎課程。 教學目的 本課程向學生介紹匯編語言程序設計的方法和技巧。以PC計算機的匯編語言為主,通過課堂教學和上機實習,使學生掌握DOS和Windows匯編序言程序設計的特點及技術,即匯編工具Masm611和Masm32的使用;掌握軟件與硬件的交互原理,即DOS、BIOS功能的調用方法、MSDN的使用、API的調用熟練使用使用調試工具Debug和W32Dasm理解高級語言的實現原理1.1 匯編語言的由來與特點計算機語言是人與計算機之間交流信息的工具程序:用計算機語言描述的處理步驟。程序設計:編制處理步驟的過程。

2、計算機語言可分為三類: 機器語言 匯編語言 通用語言面向機器設計的,低級語言面向程序設計人員設計的,高級語言機器指令是CPU能直接識別并執行的指令它的表現形式是二進制編碼。機器指令通常由操作碼和操作數兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數指出參與運算的對象,以及運算結果所存放的位置等。 機器語言是直接用描述機器指令來設計程序,它是CPU能直接識別的唯一一種語言。也就是說,CPU能直接執行用機器語言描述的程序。 一、機器語言1010 0000 ;1號單元內容取入AL寄存器0000 00010000 00001000 1010 ;2號單元內容取入AH寄存器0010 011

3、00000 0010 0000 00000000 0000 ;AL的內容與AH的內容相加,結1110 0000 ;果存入AL中1010 0010 ;AL的內容送入3號單元0000 00110000 00001111 0100 ;停機一、機器語言一、機器語言缺點:(1) 機器語言難記,程序難編,易錯,調試困難;(2) 機器語言通用性差。優點:(1) 計算機能直接認識、執行;(2) 算法刻畫細致;(3) 程序緊湊,占用內存空間少,執行速度高;(4) 能充分發揮計算機的硬件功能。二、匯編語言 隨著計算機的發展,產生了符號語言,上面的程序用符號語言編寫如下:MOV AL,DATA1;取第一個數據MOV

4、 AH,DATA2;取第二個數據ADD AL,AH;求和MOV RLT,AL;保存結果HLT;停機二、匯編語言匯編語言: 符號語言的詞法、語法規則及偽指令符號就構成了匯編語言。匯編過程:把匯編語言程序翻譯成機器語言程序的過程稱為匯編過程。匯編程序:完成匯編過程的程序稱為匯編程序。匯編語言程序:程序設計人員用匯編語言編寫的程序,是匯編程序加工的對象,稱為源程序。目標程序:匯編程序產生的結果,也稱作是目的程序。DSEG SEGMENT ;數據段開始DATA1 DB 15HDATA2 DB 26HRLT DB 0DSEG ENDS ;數據段結束CSEG SEGMENT ;代碼段開始 ASSUME C

5、S:CSEG,DS:DSEGSTART: MOV AX,DSEG ;設置數據段基址 MOV DS,AX MOV AL,DATA1 ;取第一個數據 MOV AH,DATA2 ;取第二個數據 ADD AL,AH ;求和 MOV RLT,AL ;保存結果 HLT ;停機 CSEG ENDS ;代碼段結束 END START ;源程序結束二、匯編語言種類:8086匯編,8051匯編等執行過程:二、匯編語言匯編程序計算機源程序目標程序連接程序可執行程序二、匯編語言優點:(1) 程序容易編制、出錯機會少、容易調試;(2) 算法刻畫細致;(3) 程序緊湊、占用內存空間少、執行速度高;(4) 能充分發揮計算機

6、的硬件功能。缺點:(1) 計算機不能直接認識、執行,必須經過匯編變為機器語言程序;(2) 通用性差。通用語言:是用來對計算機操作步驟進行描述的一整套標記符號、表達格式、結構及其使用的語法規則。種類:Pascal, BASIC, C, COBOL, Java等等例子(C): int i,j,k;k=i+j; 三、通用語言(高級語言)執行過程:三、通用語言(高級語言)編譯程序計算機源程序目標程序連接可執行程序三、通用語言(高級語言)優點:(1) 程序容易編制、出錯機會少、容易調試;(2) 容易表達算法;(3) 通用性強。缺點:(1) 計算機不能直接認識、執行,必須經過編譯變為機器語言程序;(2)

7、編譯后生成的機器語言程序冗長、占用內存空間多、執行速度低;(3) 不能充分發揮計算機的硬件功能。計算機語言發展簡史 機器語言匯編語言高級語言FORTRANBASICCOBOLPASCALC/C+JAVA.匯編語言的應用領域匯編語言的優點在于“與機器相關”和“執行的高效率”。但也導致其可移植性差和調試難。所以,我們在選用匯編語言時要根據實際的應用環境,盡可能避免其缺點對整個應用系統的影響。匯編語言主要適用于下列領域:要求執行效率高、反應快的領域,如操作系統內核,工業控制,實時系統等。系統性能的瓶頸,或頻繁被使用子程序或程序段。與硬件資源密切相關的軟件開發,如設備驅動程序。受存儲容量限制的應用領域

8、,如家用電器的計算機控制功能。其它高級語言不適合的開發環境。學好匯編的意義理解硬件的控制原理:比如,控制磁盤驅動器、控制鍵盤、控制鼠標,等等。在學過匯編以后,可以和我們以前學習過的計算機原理結合起來,對硬件的控制,硬件與軟件的交互機理有深入的認識。深入理解高級語言:我們學過C語言,知道C語言用cin和cout怎么輸入輸出字符,在匯編中可以知道它們是怎么實現的。其它語句如switch、ifelse、goto等,其它函數如strcmp、strlen、strcmp,我們也可以模擬它們的實現。軟件的加密解密:存在盜版軟件,是因為有人對軟件進行破解,讓其保護方式失去作用。保護自己的軟件,需要對軟件進行加

9、密,匯編語言可以顯示它的威力。信息安全:尤其在反病毒方面。例如,病毒為什么能夠感染可執行文件,假設一個文件感染了病毒,我們怎么去分析它,祛除病毒代碼,都只有匯編語言更適合一些。系統結構微型計算機的系統結構微型計算機的系統包括硬件系統、軟件系統。首先介紹微型計算機系統的基本結構,然后分別以8086為例介紹16位微處理器的結構和以80386為例介紹32位微處理器的結構。 硬件系統硬件是指構成計算機物理設備的實體(如CPU、顯卡、外部設備等),一臺計算機所有硬件的集合構成了計算機的硬件系統。一般將其分為微處理器、主存儲器、接口電路、外部設備和系統總線等。 微型計算機的系統結構微處理器就是由控制器和算

10、術邏輯部件(ALU)組成的中央處理器(即CPU)。它的作用是自動地執行各條指令,協調整個系統的工作。主存儲器是計算機的記憶裝置,用于存儲計算機當前正在執行的程序和數據,我們通常接觸的是RAM,它是一種隨機存取存儲器。 系統總線是將CPU與存儲器及外部設備連接起來的總線,它是用來傳輸信息的。按傳輸信息的種類不同把系統總線分為地址總線(AB)、數據總線(DB)、控制總線(CB)。外部設備按功能可分為二類:一類是與計算機進行通訊的設備如鍵盤、打印機和顯示器等,這些設備與計算機的通訊是通過I/O接口實現的。另一類是用來存儲信息的設備如磁盤、光盤等。 軟件系統軟件是指所有程序和數據的總稱。通常我們將它分

11、為系統軟件和應用軟件兩大類。系統軟件主要用來對計算機系統實際運行進行控制,管理和服務的。它主要分為操作系統(如DOS、 Unix 、windows 、Macintosh、Linux等),診斷程序,調試程序和語言處理程序如編譯程序、解釋程序和匯編程序等。 應用軟件指的是用戶自己編寫的各類應用程序。INTEL8086/8088 16位機的系統結構Intel 8086/8088是第三代微處理器。在匯編語言一級,它們與第二代微處理器8080/8085是兼容的。8086有20條地址線,16條數據線,直接尋址的內存空間可達1MB(220)。8088和8086內部組成完全相同,不同的是8088外部數據總線只

12、有8條。因此8088被稱為準16機。IBM PC 機及其兼容機上廣泛采用了8088CPU。8086/8088 CPU按功能可分為二個部分:總線接口單元(BIU: Bus Interface Unit)和執行單元(EU: Execute Unit)。 BIU由地址加法器,指令指針寄存器IP,指令流字節隊列和四個段寄存器(ES、CS、SS、DS)所組成的,它主要負責CPU與存儲器及外部設備之間的信息傳輸。EU由算術邏輯單元ALU(Arithmetic and Logic Unit),執行單元控制系統,8個16位寄存器和一個標志寄存器PSW組成,它負責全部指令的執行,即負責向總線接口單元提供數據和地

13、址,并對通用寄存器和標志寄存器進行管理,在ALU中進行算術運算和邏輯運算。8086/8088CPU的寄存器8086/8088的寄存器分為4種類型:(1)通用寄存器(2)指針和變址寄存器(3)段寄存器(4)標志寄存器(1)通用寄存器(2)指針與變址寄存器(3)段寄存器(4)標志寄存器標志寄存器長度為16位,其中9個位有定義。 OF DF IF TF SF ZF AF PF CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0CF, Carry Flag, 進位標志, 兩數相加,最高位向前的進位; 或兩數相減最高位向前的借位, 舉例:1000 00011000 0000

14、0000 0001+11000 00001000 00011111 11111AF, Auxiliary Carry Flag, 輔助進位標志, 兩數相加,第3位向前的進位; 或兩數相減第3位向前的借位, 舉例:0000 10010000 10000001 0001+0000 00000000 00011111 1111PF, Parity Flag, 奇偶標志, 兩數操作(算術或邏輯),結果的低8位中含有1的位數是偶還是奇。舉例:1000 0101 1010 11001001 1101 1001 01111000 0101 1000 0100結果: PF=1ZF, Zero Flag, 零標

15、志, 操作結果為0,則ZF為1。 舉例:1111 11110000 00010000 0000+進位1操作結果為0, ZF=1SF, Sign Flag, 符號標志, 操作結果的符號位(即最高位的狀態)。 舉例:1000 0101 1010 11001001 1101 1001 01111000 0101 1000 0100結果: SF=1OF, Overflow Flag, 溢出標志, 算術操作,結果超過目標所能容納的范圍。舉例:0111 1110 (+126)0000 0011 (+3)1000 0001 (-127)+8086/8088存儲器結構存儲器的分段結構實際地址的產生存儲器的分段

16、結構長度64KB:段地址XXXX0H:偏移地址段地址:段首單元在整個1MB單元中的編號,其最低4位一定為0,高16位保存在段寄存器中。偏移地址:單元所在位置距離其所在段段首單元的距離,段首單元的偏移地址為0000H,后續的單元順次增1。因此,對于存儲空間中的任意一個單元,我們都可以通過段地址和段內的偏移地址唯一地確定。存儲器的分段結構存儲器的分段結構 指針變址寄存器SI,DI,BP,SP存放的是在某一段內尋址的單元的偏移地址。其中SI和DI存放的是數據段內某單元的偏移地址,而BP和SP存放的則是堆棧段內某單元的偏移地址。 指令指針IP用以存放下一條要執行的指令在當前代碼段內的偏移地址。實際地址

17、的產生實際地址:也稱物理地址,是該單元在整個1MB單元中的編號,用一個20位的二進制數表示,范圍從00000HFFFFFH,該地址是唯一的。CPU與存儲器進行數據交換時所使用的地址即是實際地址。邏輯地址:由兩部分組成,即段地址和偏移地址。我們在編寫程序時所使用的地址即是邏輯地址。首先將存儲器分段之后段地址的高16位存入相應的段寄存器中,然后再通過段內的偏移地址對所需的單元進行訪問。實際地址的產生段地址 偏移地址00450H 0000H 0001H 0002H 0003H 0004H : : : FFFDH FFFEH FFFFH邏輯地址:00450H00451H00452H00453H0045

18、4H:1044DH1044EH1044FH 物理地址(實際地址)實際地址的產生舉例:CS=9482, IP=2350, 實際地址為:1001 0100 1000 0010 0010 0011 0101 00001001 0110 1011 0111 0000一個實際地址可以對應多個邏輯地址。堆棧堆棧是按先進后出的原則在內存中組織的一個特殊的存儲區域。該區域一端固定一端活動,固定的一端稱為棧底,而活動的一端稱為棧頂。往堆棧中存入或取出信息總是在堆棧的棧頂單元進行的。CPU中的堆棧指針指示器SP總是指向堆棧的棧頂,而堆棧段寄存器SS則指明了堆棧段的起始位置。80386 32位機的系統結構Intel

19、 80386是為滿足高性能的應用領域與多用戶、多任務的操作系統的需要而設計的,其最大的特點是在CPU芯片上集成了一個存儲器管理部件(MMU),可對246字節的虛擬存儲器和4千兆字節的物理存儲器進行分段和分頁管理,段的最大長度為4千兆字節。80386采用CHMOS工藝,陶瓷網格陣列(Plastic Grid Array, PGA)封裝,全32位結構,它的時鐘頻率有16MHZ和20MHZ兩種,總線周期只有2個時鐘周期。 體系結構80386的內部結構由六個功能部件組成:總線接口部件BIU(Bus Interface)、指令預取部件IPU(Instruction Prefetch Unit)、指令譯碼

20、部件 IDU(Instruction Decode Unit)、存儲器管理部件MMU(Memory Management Unit)、執行部件EU(Execution Unit)和控制部件。這6個部件可以并行地工作,構成一個六級流水線體系結構。這樣,可以同時處理多條指令以減少程序實際執行時間。總線接口部件BIU完成在總線周期內對必要的信號進行控制。在80386內部,指令預取部件要從存儲器取指令,執行部件在執行指令時要訪問存儲器以讀/寫數據、分頁部件將線形地址轉換成物理地址后,都會發出總線周期請求。總線接口部件會根據優先級對這些請求進行仲裁,從而有條不紊地服務于多個請求,并產生相應總線操作所需信

21、號,包括地址信號、數據信號、讀/寫控制信號等。此外,總線接口部件也實現80386和協處理器之間的協調控制。指令預取部件IPU從存儲器中以4個字節為單位預取指令,按順序存放到16個字節的預取指令隊列中,以便在CPU執行當前指令時,指令譯碼部件對下一條指令進行譯碼。 指令譯碼部件IDU從指令預取部件中的預取指令隊列里按順序取出指令并譯碼。 執行部件包括8個32位的通用寄存器組、32位的算術邏輯運算單元ALU、1個64位的桶形移位寄存器和一個乘法除法器,它們共同執行各種數據處理和運算。此外,執行部件中還包括ALU控制部分和保護測試部分,前者實現有效地址的計算、乘除法的加速等功能,后者檢驗指令執行中是

22、否符合涉及的存儲器分段規則。80386允許使用虛擬存儲器。所謂虛擬存儲器就是系統中有一個速度較快的、容量比較小的內部主存儲器,還有一個速度較慢但容量較大的外部存儲器,通過存儲管理機制,使后者和前者有機地、靈活地組合在一起,這樣從程序員的角度看,系統中似乎有一個容量很大、速度也相當快的主存儲器MM(Main Memory),但它并不是真正的物理上的主存,所以稱為虛擬存儲器VM(Virtual Memory)。 INTEI 80386系統中,存儲體按段劃分,每個段的容量可變,最大可達4GB(232字節)。分段的作用是可以對容量可變的代碼存儲塊或數據存儲塊提供模塊性和保護性。每個段又劃分為多個頁面,

23、一個頁面可為1到4K字節。但在80386中,為了簡化硬件和操作系統中的頁定位計算,每頁固定為4K字節。分頁的作用是便于實現虛擬存儲器管理,通常在內存和磁盤進行映象時,都以頁為單位把CPU的地址空間映象到磁盤。存儲器管理部件MMU的功能就是實現存儲器的管理,它由分段部件SU(Segment Unit) 和分頁部件PU(Page Unit)組成。分段部件SU管理面向程序員的邏輯地址空間,并且將邏輯地址轉換為線形地址,在芯片上有一個段描述符高速緩沖寄存器,其中存有當前使用的段描述符,它可以加快這種轉換;分頁部件PU管理物理地址空間,將分段部件或者指令譯碼部件產生的線形地址轉換為物理地址,在芯片上有一

24、個頁描述符高速緩沖寄存器,它存放著頁描述符。 80386內部寄存器 80386內部共有34個寄存器,它們可以分為7類:通用寄存器、指令指針及標志寄存器、段寄存器、控制寄存器、系統地址寄存器、調試寄存器和測試寄存器。通用寄存器:是8086/8088/80286中相應16位通用寄存器的擴展,命字分別是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP,用來存放數據和偏移地址。為了和8086/8088/80286兼容,每個通用寄存器的低16位可以獨立訪問,此時,它們的名稱分別為AX、BX、CX、DX、SI、DI、BP、SP。同時,為了和8080/8085兼容,AX、BX、CX、DX寄存

25、器的低8位和高8位也可以獨立訪問,分別稱為AL、BL、CL、DL和AH、BH、CH和DH。 32位的指令指針寄存器EIP由8086的IP 擴展而來,用來存放將要執行的下一條指令的地址偏移量,尋址范圍為4GB。為了和8086兼容,EIP的低16位可作為獨立指針,稱為IP,則其尋址范圍為64KB。32位的標志寄存器EFLAGS中容納三類標志:狀態標志、控制標志和系統方式標志。狀態標志是CPU在執行指令過程中產生的,控制標志可以由程序員通過指令來設置,系統方式標志是和系統所處的工作模式密切相關。 80386內部設置了6個16位的段寄存器CS、SS、DS、ES、FS、GS。前4個段寄存器的名稱和808

26、6/8088相同。為了得到更大的存儲空間,80386采用了比8086更加巧妙的辦法來得到段基地址。在這里,段寄存器作為進入存儲器中的一張表的變址寄存器,根據段寄存器的值可以從表中找到一個項,這張表是由操作系統建立的,稱為段描述符表。表內每一項稱為描述符,每一個描述符對應一個段。描述符中含有對應段的起始地址即段基地址、段界限和段的屬性。 CS寄存器指向代碼段對應的段描述符,由此可以找到當前代碼段的段基地址,相類似的,SS指向當前堆棧段對應的段描述符,DS寄存器指向當前數據段對應的段描述符,而ES、FS、GS指向當前三個附加段對應的段描述符。 80386內部有3個32位的控制寄存器CR0、CR2、

27、CR3,用來保存機器的各種全局性狀態。這些狀態影響系統所有任務的運行,它們主要是供操作系統使用的,因此操作系統設計人員需要熟悉這些寄存器。在INTEL 80386中有4個系統地址寄存器,即全局描述符表寄存器GDTR(Global Descriptor Table Register) 、中斷描述符寄存器IDTR(Interrupt Descriptor Table Register)、任務狀態寄存器TR(Task State Register)和局部描述符表寄存器 LDTR(Local Descriptor Table Register)。INTEL 80386有8個32位的調試寄存器DR0DR

28、7。這些寄存器可以使程序員在調試過程中一次設置4個斷點,DR0DR3用來容納4個32位的斷點線性地址;DR4、DR5為備用寄存器;DR6是斷點狀態寄存器,其中保存了幾個調試標志,用來協助斷點調試;DR7為斷點控制寄存器,可以通過對應位的設置來有選擇地允許和禁止斷點調試,比如僅在寫數據時作為斷點,或者僅在讀/寫數據時作為斷點等。INTEL 80386設置了8個32位的測試寄存器TR0TR7,其中TR0TR5由Intel公司保留,用戶只能訪問TR6、TR7。這2個32位測試寄存器TR6和TR7用于存儲器測試,TR6為測試命令寄存器,其中存放測試控制命令,TR7為數據寄存器,容納存儲器測試所得的數據

29、。 80386的三種工作方式實地址模式(Real Address Modal)保護虛地址模式(Protected Virtual Address Mode) 虛擬8086模式 (Virtual 8086 Modal)。 數據表示計算機處理的信息可分為兩大類:一類是按進位計算制表示的有大小、正負之分的數值信息;另一類是非數值信息,如字符、文字、圖像、邏輯數據等。但在計算機內部所有信息都要轉換成0和1表示的二進制編碼。數制及其轉換計算機匯編語言中常用的計數制有:十進制數(Decimal)二進制數(Binary)十六進制數(Hexadecimal)八進制數(Octal)。數制的轉換 整數的轉換采用“除2取余”法。把要轉換的十進制數的整數部分不斷除以2并在右邊記下余數,然后以此類推,直到最后的商為0,最后我們將余數倒著排列即得結果。 小數的轉換采用“乘2取整”法。小數的轉換正好與整數的轉換相反,將小數部分不斷的乘以2在右邊記下成績整數部分,依此類推,直到最后小數部分為0或結果已達到精度要求為止。先取出來的整數作高位,后取出的整數作低位,順序排列即可。將十進制數 轉換成二進制數。 將十進制數轉換成八/十六進制數100D=64H 65535=0FFFFH 255=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論