32位匯編語言解讀課件_第1頁
32位匯編語言解讀課件_第2頁
32位匯編語言解讀課件_第3頁
32位匯編語言解讀課件_第4頁
32位匯編語言解讀課件_第5頁
已閱讀5頁,還剩129頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第1章匯編語言基礎1.1英特爾80x86處理器1.2個人計算機系統1.3匯編語言程序格式第1章匯編語言基礎1.1英特爾80x86處理器第1章匯編語言基礎了解軟硬件開發環境熟悉通用寄存器和存儲器組織掌握匯編語言的 語句格式、程序框架和開發方法第1章匯編語言基礎了解軟硬件開發環境Intel80861.1英特爾80x86處理器8038680486奔騰奔騰II奔騰4802868086奔騰III酷睿多核系列4004IA-32處理器16位80x86處理器奔騰多核系列Intel64處理器3Intel80861.1英特爾80x86處理器803861.1.116位80x86處理器16位結構處理器8086/8088指令系統提供16位基本指令集80186/80188增加若干條實用指令8086的工作方式是實方式(RealMode)80286增加保護方式(ProtectedMode)80286引入了系統指令為操作系統等核心程序提供處理器控制功能指令系統、指令集(InstructionSet)41.1.116位80x86處理器16位結構處理器指令系統、1.1.2IA-32處理器80386引入英特爾32位指令集結構ISA兼容原16位80286指令系統全面升級為32位提供虛擬8086工作方式(Virtual8086Mode)80486集成浮點處理單元支持浮點指令Pentium系列陸續增加若干整數指令、完善浮點指令增加一系列多媒體指令(SIMD指令)IA-32(IntelArchitecture-32)51.1.2IA-32處理器80386引入英特爾32位指令集1.1.3Intel64處理器引入64位英特爾指令集結構兼容32位指令系統新增64位工作方式繼續豐富多媒體指令處理器集成多核(Multi-core)技術處理器進入多核時代Manycore61.1.3Intel64處理器引入64位英特爾指令集結構1.2個人計算機系統硬件(Hardware):物理設備軟件(Software):程序和文檔運算器

控制器寄存器組

主存儲器總線輸入輸出接口電路外部設備軟件微處理器微型計算機微型計算機系統71.2個人計算機系統硬件(Hardware):物理設備運算1.2.1硬件組成I/O接口主存儲器系統總線CPU寄存器控制器運算器輔助存儲器輸入設備輸出設備匯編語言程序員將硬件抽象為:寄存器、存儲器地址和輸入輸出地址81.2.1硬件組成主存儲器系統總線CPU寄存器控制器運算器1.2.2寄存器(Register)處理器內部的高速存儲單元用于暫時存放程序執行過程中的代碼和數據透明寄存器對應用人員不可見、不能編程直接控制可編程(Programmable)寄存器具有引用名稱、供編程使用通用寄存器(General-PurposeRegister)具有多種用途數量較多、使用頻度較高專用寄存器各自只用于特定目的91.2.2寄存器(Register)處理器內部的高速存儲單IA-32常用寄存器8個32位通用寄存器6個16位段寄存器1個32位標志寄存器1個32位指令指針10IA-32常用寄存器8個32位通用寄存器101.通用寄存器處理器最常使用的整數通用寄存器可用于保存整數數據、地址等8個32位通用寄存器EAX,EBX,ECX,EDXESI,EDI,EBP,ESP8個16位通用寄存器AX,BX,CX,DXSI,DI,BP,SP8個8位通用寄存器AH,BH,CH,DHAL,BL,CL,DL31871615AHAL0AXEAX既是一個整體又可獨立使用111.通用寄存器處理器最常使用的整數通用寄存器318716通用寄存器的名稱EAXAccumulator累加器EBXBase基址寄存器ECXCounter計數器EDXData數據寄存器ESISourceIndex源變址寄存器EDIDestinationIndex目的變址寄存器EBPBasePointer基址指針ESPStackPointer堆棧指針12通用寄存器的名稱EAXAccumulator累加器EBXBa2.標志寄存器標志(Flag)反映指令執行結果或控制指令執行形式用一個或多個二進制位表示一種標志用0和1的不同組合表達標志的不同狀態8086支持16位標志寄存器FLAGSIA-32處理器形成32位EFLAGS標志寄存器狀態標志:記錄指令執行結果的輔助信息控制標志:方向標志DF,僅用于串操作指令系統標志:控制操作系統或核心管理程序的操作方式示意圖132.標志寄存器標志(Flag)示意圖13標志寄存器EFLAGS返回14標志寄存器EFLAGS返回14處理器最基本的標志:狀態標志用來記錄指令執行結果的輔助信息加減運算和邏輯運算指令主要設置它們其他有些指令的執行也會相應地設置它們處理器主要使用其中5個構成各種條件,分支指令判斷這些條件實現程序分支8086的標志OF111512DF10IF9TF8SF7ZF605AF403PF211CF015處理器最基本的標志:狀態標志用來記錄指令執行結果的輔助信息83.指令指針寄存器EIP保存將要執行的指令在主存的存儲器地址EIP是專用寄存器順序執行時自動增量(加上該指令的字節數),指向下一條指令分支、調用等操作時執行控制轉移指令修改,引起程序轉移到指定的指令執行出現中斷或異常時被處理器賦值而相應改變311615IP0EIP163.指令指針寄存器EIP保存將要執行的指令在主存的存儲器地4.段寄存器段(Segment)是用于安排相關代碼或數據的一個主存區域段寄存器表明某個段在主存中的位置6個16位段寄存器:CSDSSSESFSGS應用程序主要涉及3類段代碼段(CodeSegment) 存放程序中指令代碼數據段(DataSegment) 存放當前運行程序所用數據堆棧段(StackSegment) 指明程序使用的堆棧區域主存空間指令段數據段堆棧段程序174.段寄存器段(Segment)是用于安排相關代碼或數據的1.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元每個存儲單元被編排一個號碼即存儲單元地址稱為存儲器地址(MemoryAddress)每個存儲單元以字節為基本存儲單位即字節編址(ByteAddressable)一個字節(Byte)等于8個二進制位(Bit)二進制位是計算機存儲信息的最小單位16位(2個字節)構成一個字(Word)32位(4個字節)構成一個雙字(DoubleWord)示意圖181.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元數據的位格式返回D7D6D5D4D3D2D1D0字節LSBMSBD15……D1D0字LSBMSBD31……D1D0雙字LSBMSB31871615高字節低字節0字雙字19數據的位格式返回D7D6D5D4D3D2D1D0字節LSBM1.存儲模型物理存儲器以字節為基本存儲單位每個存儲單元被分配一個唯一的地址這個地址就是物理地址物理地址空間從0開始順序編排,直到處理器支持的最大存儲單元8086處理器支持1MB存儲器:00000H~FFFFFHIA-32處理器支持4GB存儲器:00000000H~FFFFFFFFH操作系統利用存儲管理單元進行存儲管理,程序并不直接尋址物理存儲器IA-32處理器提供3種存儲模型,用于程序訪問存儲器示意圖201.存儲模型物理存儲器以字節為基本存儲單位示意圖20存儲器地址空間返回FFFFFFFFH00000000H00000001H00000002H00000003H00000004H雙字字節字字節字節字字節21存儲器地址空間返回FFFFFFFFH00000000H000IA-32處理器的存儲模型(1)平展存儲模型(FlatMemoryModel)存儲器是一個連續的地址空間:線性地址空間IA-32處理器支持4GB容量線性地址空間(2)段式存儲模型(SegmentedMemoryModel)存儲器由一組獨立的地址空間:段(Segment)每個段都可以達到4GB容量在處理器內部,所有的段都被映射到線性地址空間(3)實地址存儲模型(Real-addressMemoryModel)8086處理器的存儲模型段式存儲模型的特例線性地址空間最大為1MB容量,段最大為64KB22IA-32處理器的存儲模型(1)平展存儲模型(FlatMe2.工作方式(1)保護方式(ProtectedMode)IA-32處理器固有的工作狀態具有強大的段頁式存儲管理和特權與保護能力使用全部32條地址總線,可尋址4GB物理存儲器使用平展或段式存儲模型利用虛擬8086方式支持實地址8086軟件(2)實地址方式(Real-addressMode)可以進行32位處理的快速8086只能尋址1MB物理存儲器空間,每個段不超過64KB可以使用32位寄存器、32位操作數和32位尋址方式只能支持實地址存儲模型(3)系統管理方式(SystemManagementMode)實現供節能和系統安全管理232.工作方式(1)保護方式(ProtectedMode)3.邏輯地址(LogicalAddress)在處理器內部、程序員編程時采用的地址邏輯地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距離段基地址的位移量某個存儲單元可以有多個邏輯地址,但只有一個唯一的物理地址邏輯地址線性地址物理地址編程使用處理器轉換地址總線輸出示意圖243.邏輯地址(LogicalAddress)在處理器內部邏輯地址與物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221邏輯地址=相對地址:205(2層05號房間)物理地址=絕對地址:15(第15號房間)25邏輯地址與物理地址返回1082083081062063061基本段的邏輯地址代碼段(CodeSegment)段基地址:代碼段寄存器CS指示偏移地址:指令指針寄存器EIP保存數據段(DataSegment)段基地址:數據段寄存器DS指示有時也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各種存儲器尋址方式計算出來堆棧段(StackSegment)段基地址:堆棧段寄存器SS指示偏移地址:堆棧指針寄存器ESP保存主存空間指令段數據段堆棧段程序26基本段的邏輯地址代碼段(CodeSegment)主存空間指4.段選擇器16位段寄存器保存16位段選擇器段選擇器指向64位段描述符(Descriptor)段描述符包括段基地址平展存儲模型:指向地址0位置段式存儲模型:指向線性地址空間不同的段實地址存儲模型:保存段基地址的高16位段選擇器段基地址數據或指令段寄存器段描述符主存空間274.段選擇器16位段寄存器保存16位段選擇器段選擇器段基地平展模型平展存儲模型是分段存儲模型的一種特例所有的段都有相同的段基地址(基地址為0),都重合于同一個線性地址空間IA-32微處理器上運行的應用程序,廣泛采用平展存儲模型。28平展模型平展存儲模型是分段存儲模型的一種特例28分頁機制不采用分頁管理機制,線性地址就是對應的物理地址空間采用了分頁管理機制,則要將線性空間地址映射到物理地址當微處理器既采用段式存儲管理,又采用頁式存儲管理就是段頁式存儲管理方式29分頁機制不采用分頁管理機制,線性地址就是對應的物理地址空間分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表偏移量入口頁目錄頁表入口段1段2

段3頁+30分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表存儲器模型與工作模式

保護模式工作模式實模式虛擬8086模式平展模型存儲器模型實地址模型分段模型段頁模型31存儲器模型與工作模式

保護模式工作模式實模式虛擬8086模5.Win32的虛擬地址分配應用程序起始地址325.Win32的虛擬地址分配應用程序起始地址321.2.4程序設計語言機器語言(MachineLanguage)底層的計算機語言,對應機器指令形成目標(代碼)程序匯編語言(AssemblyLanguage)將機器指令用助記符號代替而形成的一種語言本質上是機器語言需要匯編程序“匯編”(翻譯)高級語言(HighLevelLanguage)面向問題的程序設計語言需要“編譯”或“解釋”后執行指令是處理器的母語moveax,100addeax,256331.2.4程序設計語言機器語言(MachineLanguInstructions:LanguageoftheMachine

Tocommandacomputer'shardware,youmustspeakitslanguage.Thewordsofamachine'slanguagearecalledinstructions,anditsvocabularyiscalledaninstructionset.

為了控制計算機硬件,必須使用它的語言。機器語言的單詞稱為指令,它的詞匯表稱為指令集。“ComputerOrganization&Design --TheHardware/SoftwareInterface(2ndEdition)”byJohnL.HennessyandDavidA.PattersonMorganKaufmannPublishers,Inc.1998返回34Instructions:Languageofthe匯編語言和高級語言的比較匯編語言與處理器密切相關,可移植性較差高級語言與具體計算機無關,便于移植匯編語言功能有限、涉及硬件細節,編寫繁瑣困難高級語言功能強大,語法自然,容易掌握和應用匯編語言的優勢:直接、有效地控制硬件,容易產生運行速度快、指令序列短小的高效率目標程序高級語言不易直接控制計算機的各種操作,編譯程序產生的目標程序往往比較龐大混合編程、取長補短?學習匯編語言的意義35匯編語言和高級語言的比較匯編語言與處理器密切相關,可移植性較匯編語言的主要應用場合程序要具有較快的執行時間,或者只能占用較小的存儲容量程序與計算機硬件密切相關,程序要直接、有效地控制硬件大型軟件需要提高性能、優化處理的部分沒有合適的高級語言、或只能采用匯編語言的時候分析具體系統尤其是該系統的低層軟件、加密解密軟件、分析和防治計算機病毒等等36匯編語言的主要應用場合程序要具有較快的執行時間,或者只能占用1.2.5軟件系統Windows操作系統平臺MASM6.15匯編程序硬件BIOS應用程序*.ASM,*.OBJ*.LST,*.EXE操作系統編輯程序,匯編程序連接程序,調試程序371.2.5軟件系統Windows操作系統平臺硬件BIOS應1.操作系統(OperatingSystem)操作系統管理著系統的軟硬件資源為用戶提供使用機器的交互界面為程序員使用資源提供可供調用的驅動程序為其他程序構建穩定的運行平臺32位控制臺環境%SystemRoot%\system32\cmd.exe16位模擬DOS環境%SystemRoot%\system32\32位控制臺環境和16位模擬DOS環境兩種基本功能和界面一致,但本質不同381.操作系統(OperatingSystem)操作系統管2.匯編程序(Assembler)將匯編語言源程序轉換為機器代碼微軟宏匯編程序MASMMASM6.11是最后一個獨立發行的MASM軟件包MASM6.15來自VisualC++6.0,支持到Pentium4的SSE2指令系統VisualC++.NET2005提供支持SSE3指令的MASM8.0支持64位指令的ML64.EXE程序匯編語言程序與匯編程序是兩個不同的概念392.匯編程序(Assembler)將匯編語言源程序轉換為機3.文件路徑目錄(Directory):管理磁盤上文件的文件夾路徑(Path):分區:\根目錄\子目錄\文件名絕對路徑:文件的完整路徑d:\masm\progs\eg0101.asm相對路徑:相對當前目錄的路徑progs\eg0101.asm..\bin\ml.exe轉換分區d:進入當前目錄(CurrentDirectory)cd\masm403.文件路徑目錄(Directory):管理磁盤上文件的文4.內部命令和外部命令內部命令:32位控制臺或DOS環境本身具有的、直接支持的命令,即駐留主存的命令使用方法:命令關鍵字參數選項外部命令:與其他可執行文件一樣,以文件形式保存在磁盤上的命令執行方法:路徑\文件名參數路徑搜索順序先當前目錄后搜索路徑內部命令PATH查看和設置當前的搜索路徑你所執行的命令不是內部或外部命令,也不是可運行的程序或批處理文件?414.內部命令和外部命令內部命令:32位控制臺或DOS環境本5.進入MASM目錄的批處理文件為便于進入MASM目錄,可創建批處理文件32位Windows控制臺:WIN32.BAT

16位DOS環境:DOS16.BAT為便于訪問其中文件,增加搜索路徑:@setPATH=D:\MASM;D:\MASM\BIN;%PATH%在Windows資源管理器打開文件夾“D:\MASM”,雙擊該批處理文件,就可以進入MASM環境425.進入MASM目錄的批處理文件為便于進入MASM目錄,可具有搜索路徑的批處理文件返回@echooff@setPATH=D:\MASM;D:\MASM\BIN;%PATH%%SystemRoot%\system32\cmd.exe@echoonWIN32.BAT@echooff@setPATH=D:\MASM;D:\MASM\BIN;%PATH%%SystemRoot%\system32\@echoonDOS16.BAT43具有搜索路徑的批處理文件返回@echooffWIN32.B1.3匯編語言程序格式程序用程序設計語言編寫,由指令構成指令由操作碼和操作數(地址碼)組成操作碼(Opcode)表明處理器執行的操作例如數據傳送、加法運算、跳轉等操作。操作數(Operand)是參與操作的數據對象主要以寄存器名或地址形式指明數據的來源通常的指令都有一個或兩個操作數有些指令無操作數,個別指令有3或4個操作數多數操作數需要顯式指明,有些操作數隱含使用441.3匯編語言程序格式程序用程序設計語言編寫,由指令構成41.3.1指令的代碼格式(InstructionFormat)IA-32處理器采用可變長度指令格式操作碼可選的指令前綴(用于擴展指令功能)1~3字節的主要操作碼操作數可選的尋址方式域(包括ModR/M和SIB字段)可選的位移量可選的立即數451.3.1指令的代碼格式(InstructionForm使用最多、最基本的數據傳送指令傳送指令的助記符:MOV(取自Move)將數據從一個位置傳送到另一個位置類似高級語言的賦值語句

movdest,src;源操作數src:被傳送的數據或數據所在的位置;目的操作數dest:數據將要傳送到的位置moveax,ebx ;機器代碼:8BC3moveax,[ebx] ;機器代碼:8B03moveax,[ebx+esi*4+80h] ;機器代碼:8B84B380000000功能演示46使用最多、最基本的數據傳送指令傳送指令的助記符:MOV(取自傳送指令MOV的功能演示返回源操作數src目的操作數dest30H30H被傳送的數據47傳送指令MOV的功能演示返回源操作數src目的操作數de1.3.2語句格式源程序由語句組成一個語句常占一行(MASM有續行符“\”)一個語句不超過132個字符,4個部分執行性語句:表達處理器指令(硬指令)標號:硬指令助記符

操作數,操作數 ;注釋說明性語句:表達偽指令,控制匯編方式名字

偽指令助記符

參數,參數,……;注釋這是MASM語法,但具有一般性481.3.2語句格式源程序由語句組成這是MASM語法,但具有1.標號與名字標號:執行性語句中冒號分隔表示處理器指令在主存中的邏輯地址指示分支、循環等程序的目的地址名字:說明性語句中空格或制表符分隔變量名、段名、子程序名等反映變量、段和子程序等的邏輯地址標號和名字是用戶自定義的標識符491.標號與名字標號:執行性語句中標號和名字是用戶自定義的標標識符(Identifier)最多由31個字母、數字及規定的特殊符號(如_、$、?、@)組成,不能以數字開頭一個源程序中,用戶定義的每個標識符必須唯一不能是匯編程序采用的保留字保留字(ReservedWord)是編程語言本身需要使用的各種具有特定含義的標識符、也稱為關鍵字硬指令助記符:MOV偽指令助記符:BYTE操作符:OFFSET寄存器名:EAX取名原則類似高級語言但默認不區別大小寫字母50標識符(Identifier)最多由31個字母、數字及規定的2.助記符助記符是幫助記憶指令功能的符號硬指令助記符表示處理器指令偽指令助記符表達一個匯編命令處理器指令示例:傳送指令MOV偽指令示例:字節變量定義助記符:BYTE

(或DB)功能:在主存中占用若干的存儲空間,用于保存變量值,該變量以字節為單位存取msg

byte

'Hello,Assembly!',13,10,0512.助記符助記符是幫助記憶指令功能的符號msgbyt3.操作數和參數處理器指令的操作數:表示參與操作的對象具體的常量保存在寄存器的數據保存在存儲器中的變量逗號前常是目的操作數,逗號后常是源操作數偽指令的參數:常量、變量名、表達式等可以有多個,參數之間用逗號分隔msg

byte

'Hello,Assembly!',13,10,0mov

eax,offsetmsg523.操作數和參數處理器指令的操作數:表示參與操作的對象ms4.注釋和分隔符語句中分號后的內容是注釋對指令或程序進行說明匯編程序不對它們做任何處理注釋利于閱讀,應養成書寫注釋的好習慣語句的4個組成部分要用分隔符分開標號后的冒號注釋前的分號操作數間和參數間的逗號分隔其他部分采用一個或多個空格或制表符注釋使用英文或中文均可分隔符都是英文標點良好的語句格式有利于編程534.注釋和分隔符語句中分號后的內容是注釋分隔符都是英文標點1.3.3源程序框架;eg0000.asminWindowsConsole includeio32.inc ;包含32位輸入輸出文件

.data ;定義數據段

…… ;數據定義(數據待填)

.code ;定義代碼段start: ;程序執行起始位置

…… ;主程序(指令待填)

exit0(或ret) ;程序正常執行結束

…… ;子程序(指令待填)

endstart ;匯編結束541.3.3源程序框架;eg0000.asminWind1.包含偽指令INCLUDE將常用的常量定義、過程說明、共享的子程序庫等內容進行聲明(相當于C和C++語言中,包含頭文件的作用)IO32.INC是配合本書的包含文件前3個語句:.686 ;32位指令.modelflat,stdcall ;選擇平展模型,標準調用規范

optioncasemap:none ;告知MASM區分用戶定義標識符的大小寫551.包含偽指令INCLUDE將常用的常量定義、過程說明、共2.段的簡化定義數據段定義偽指令.DATA創建一個數據段代碼段定義偽指令.CODE創建一個代碼段堆棧段由Windows維護,用戶不必設置程序開始執行的位置應用一個標號(例如:START)匯編結束END指令的參數應用程序執行結束語句“EXIT0”將控制權交還操作系統提供給操作系統一個返回代碼通常用0表示執行正確源程序匯編結束END語句執行結束≠匯編結束562.段的簡化定義數據段定義偽指令.DATA創建一個數據段執〔例1-1〕信息顯示程序在數據段給出這個字符串形式的信息:

;數據段msg byte'Hello,Assembly!',13,10,0 ;定義要顯示的字符串在代碼段編寫顯示字符串的程序:

;代碼段

moveax,offsetmsg ;指定字符串的偏移地址

calldispmsg ;調用I/O子程序顯示信息完整程序57〔例1-1〕信息顯示程序在數據段給出這個字符串形式的信息:完匯編語言源程序EG0101.ASM;eg0101.asm

includeio32.inc

.data ;數據段msg byte'Hello,Assembly!',13,10,0

.code ;代碼段start: ;程序執行起始位置

moveax,offsetmsg calldispmsg

exit0 ;程序正常執行結束

endstart ;匯編結束返回Hello,Assembly!運行結果對比58匯編語言源程序EG0101.ASM;eg0101.asm返回信息顯示的C語言源程序#include<stdio.h>intmain(){

printf("Hello,world!\n"); exit(0);}返回Hello,world!運行結果59信息顯示的C語言源程序#include<stdio.h>返3.輸入輸出子程序庫匯編程序通常不提供任何函數或程序庫必須利用操作系統的編程資源本書配套鍵盤輸入和顯示器輸出的I/O子程序含IO32.INC和IO32.LIB,需要包含文件聲明源程序文件開始使用包含命令聲明INCLUDEIO32.INC子程序調用方法MOVEAX,入口參數CALL子程序名子程序名DISPMSG入口參數EAX=字符串地址功能說明顯示字符串(以0結尾)輸入子程序輸出子程序603.輸入輸出子程序庫匯編程序通常不提供任何函數或程序庫子程常用輸出子程序返回子程序名功能說明DISPMSG顯示字符串(以0結尾)DISPC顯示一個字符DISPCRLF光標回車換行,到下一行首個位置DISPRD顯示8個32位通用寄存器內容DISPRF顯示6個狀態標志的狀態DISPHD以十六進制形式顯示8位數據DISPUID顯示無符號十進制整數DISPSID顯示有符號十進制整數61常用輸出子程序返回子程序名功能說明DISPMSG顯示字符串(常用輸入子程序返回子程序名功能說明READMSG輸入一個字符串(回車結束)READC輸入一個字符(回顯)READHD輸入8位十六進制數據READUID輸入無符號十進制整數(≤232-1)READSID輸入有符號十進制整數(-231~231-1)62常用輸入子程序返回子程序名功能說明READMSG輸入一個字符1.3.4開發過程631.3.4開發過程631.開發軟件抽取MASM6.11和VisualC++6.0集成開發環境中有關文件構造基本開發軟件包MASM主目錄:I/O庫、包含文件及批處理文件BIN子目錄:進行匯編、連接及配套程序文件WINDBG子目錄:調試程序WinDbg.EXE默認安裝到D分區的MASM目錄快速開發方法

①進入MASM目錄雙擊批處理文件WIN32.BAT

②生成可執行文件MAKE32eg0101快速開發過程641.開發軟件抽取MASM6.11和VisualC++快速開發過程返回感性認識因直觀而印象深刻65快速開發過程返回感性認識因直觀而印象深刻652.源程序的編輯源程序文件是無格式文件、純文本類型以ASM為擴展名,可使用任何文本編輯器Windows的記事本Notepad其他程序開發工具中的編輯環境專注于源程序編寫的編輯軟件,例如UltraEdit32本書配套開發軟件MASM主目錄提供Notepad2.exe程序本書源程序文件的命名規則EG=例題,EX=習題

前2位數字=章號,后2位數字=序號662.源程序的編輯源程序文件是無格式文件、純文本類型本書源程3.源程序的匯編生成目標模塊文件(.OBJ)MASM6.x的匯編程序是ML.EXE

BIN\ML/c/coffeg0101.asm參數“/c”(小寫字母)實現源程序的匯編參數“/coff”(小寫字母)表示生成COFF格式的目標模塊文件溫馨提示:將源文件放在MASM目錄溫馨提示:ML.EXE的參數區別大小寫673.源程序的匯編生成目標模塊文件(.OBJ)溫馨提示:將源4.目標文件的連接把一個或多個目標文件和庫文件合成一個可執行文件(.EXE)32位連接程序被更名為LINK32.EXE

BIN\LINK32/subsystem:consoleeg0201.obj“/subsystem:console”表示生成Windows控制臺(Console)環境的可執行文件“/subsystem:windows”生成Windows圖形窗口的可執行文件溫馨提示:使用批處理文件方便操作溫馨提示:匯編程序只指出語法錯誤684.目標文件的連接把一個或多個目標文件和庫文件合成一個可執5.可執行文件的運行進入控制臺(或模擬DOS)環境在命令行提示符下輸入文件名(可以省略擴展名)、按下回車鍵運行

eg0201.exe運行錯誤,就需要靜態排錯:閱讀分析源程序動態排錯:利用調試程序溫馨提示:不要在Windows下雙擊運行695.可執行文件的運行進入控制臺(或模擬DOS)環境溫馨提示6.列表文件列表文件(.LST)含有源程序和目標代碼

ML/c/coff/Fleg0201.asm“/Fl”創建列表文件(大寫F、小寫l,不是數字1)列表文件有兩部分內容第一部分:源程序及其代碼第二部分:各種標識符錯誤Error:比較嚴重的語法錯誤警告Warning:不太關鍵的語法錯誤706.列表文件列表文件(.LST)含有源程序和目標代碼707.調試程序WinDbg是微軟提供的Windows調試程序WinDbg支持源程序級調試,但需要在匯編、連接過程中加入參數匯編時用“/Zi”(大寫Z、小寫i)參數 ML/c/coff/Fl/Zieg0101.asm連接時用“/debug”參數 LINK32/subsystem:console/debugeg0101.obj雙擊WinDbg快捷方式打開調試程序源程序可執行文件目標模塊文本編輯器匯編程序連接程序調試程序717.調試程序WinDbg是微軟提供的Windows調試程序匯編語言集成開發環境(2)運行作者組織的“開發工具.EXE”可以生成一個匯編語言集成開發環境MASM615—LINK16.EXE,LIB16.EXEMASM32調試工具—WINDBG,DEBUG作者編寫的輸入輸出文件IO16.LIB,LIB32.LIB,IO.INC,IO16.INC,IO32.INC72匯編語言集成開發環境(2)運行作者組織的“開發工具.EXE”安裝方法雙擊“m32v10r.EXE”安裝masm32masm32只能安裝在根目錄再雙擊“Exmasm32”安裝其他軟件安裝目錄為masm32所在目錄,默認為C:\masm3273安裝方法雙擊“m32v10r.EXE”73MASM615MASM615是微軟提供的匯編開發軟件包,以DOS操作系統為平臺,可以用來開發實模式下的程序和系統程序,但是無法開發保護模式下的32位應用程序WINDOWSXP/2000環境下可在模擬DOS窗口下使用在教材配套的開發環境中使用了MASM615中的鏈接器74MASM615MASM615是微軟提供的匯編開發軟件包,以DMASM32免費軟件開發包MASM32是WINDOWS窗口應用程序,可以非常方便地開發32位應用程序。編輯器MASM6.14匯編程序32位增量式鏈接程序Win32的包含文件、庫文件MASM32是配套開發環境的主體為了使用方便,建議在桌面建立masm32的啟動圖標75MASM32免費軟件開發包MASM32是WINDOWS窗口應鏈接軟件MASM614中的鏈接軟件是段式可執行程序鏈接器(SegmentedExecutableLinker),用于生成16位DOS程序,不能鏈接生成32位Windows應用程序;MASM32中的連接器LINK.EXE是32位增量式鏈接器(incrementallinker)用于鏈接生成32位應用程序76鏈接軟件MASM614中的鏈接軟件是段式可執行程序鏈接器(S編寫源程序雙擊桌面上的,啟動MASM32編輯窗口,書寫源程序。輸入完畢之后,選擇菜單File/Save,彈出保存對話框,保存文件。匯編源程序的擴展名是ASM在DOS模擬窗口中對源程序進行匯編和連接77編寫源程序雙擊桌面上的,啟動MASM32編輯窗口,書寫源32位應用程序的匯編連接7832位應用程序的匯編連接78第1章習題:匯編語言基礎1.1簡答題(1、3、6、7、8)1.2

判斷題(1、6、7、8、9)1.3

填空題(3、4、5、7、10)1.9、1.13、1.15、1.16第1章習題:匯編語言基礎1.1簡答題(1、3、6、7、8)第1章匯編語言基礎1.1英特爾80x86處理器1.2個人計算機系統1.3匯編語言程序格式第1章匯編語言基礎1.1英特爾80x86處理器第1章匯編語言基礎了解軟硬件開發環境熟悉通用寄存器和存儲器組織掌握匯編語言的 語句格式、程序框架和開發方法第1章匯編語言基礎了解軟硬件開發環境Intel80861.1英特爾80x86處理器8038680486奔騰奔騰II奔騰4802868086奔騰III酷睿多核系列4004IA-32處理器16位80x86處理器奔騰多核系列Intel64處理器82Intel80861.1英特爾80x86處理器803861.1.116位80x86處理器16位結構處理器8086/8088指令系統提供16位基本指令集80186/80188增加若干條實用指令8086的工作方式是實方式(RealMode)80286增加保護方式(ProtectedMode)80286引入了系統指令為操作系統等核心程序提供處理器控制功能指令系統、指令集(InstructionSet)831.1.116位80x86處理器16位結構處理器指令系統、1.1.2IA-32處理器80386引入英特爾32位指令集結構ISA兼容原16位80286指令系統全面升級為32位提供虛擬8086工作方式(Virtual8086Mode)80486集成浮點處理單元支持浮點指令Pentium系列陸續增加若干整數指令、完善浮點指令增加一系列多媒體指令(SIMD指令)IA-32(IntelArchitecture-32)841.1.2IA-32處理器80386引入英特爾32位指令集1.1.3Intel64處理器引入64位英特爾指令集結構兼容32位指令系統新增64位工作方式繼續豐富多媒體指令處理器集成多核(Multi-core)技術處理器進入多核時代Manycore851.1.3Intel64處理器引入64位英特爾指令集結構1.2個人計算機系統硬件(Hardware):物理設備軟件(Software):程序和文檔運算器

控制器寄存器組

主存儲器總線輸入輸出接口電路外部設備軟件微處理器微型計算機微型計算機系統861.2個人計算機系統硬件(Hardware):物理設備運算1.2.1硬件組成I/O接口主存儲器系統總線CPU寄存器控制器運算器輔助存儲器輸入設備輸出設備匯編語言程序員將硬件抽象為:寄存器、存儲器地址和輸入輸出地址871.2.1硬件組成主存儲器系統總線CPU寄存器控制器運算器1.2.2寄存器(Register)處理器內部的高速存儲單元用于暫時存放程序執行過程中的代碼和數據透明寄存器對應用人員不可見、不能編程直接控制可編程(Programmable)寄存器具有引用名稱、供編程使用通用寄存器(General-PurposeRegister)具有多種用途數量較多、使用頻度較高專用寄存器各自只用于特定目的881.2.2寄存器(Register)處理器內部的高速存儲單IA-32常用寄存器8個32位通用寄存器6個16位段寄存器1個32位標志寄存器1個32位指令指針89IA-32常用寄存器8個32位通用寄存器101.通用寄存器處理器最常使用的整數通用寄存器可用于保存整數數據、地址等8個32位通用寄存器EAX,EBX,ECX,EDXESI,EDI,EBP,ESP8個16位通用寄存器AX,BX,CX,DXSI,DI,BP,SP8個8位通用寄存器AH,BH,CH,DHAL,BL,CL,DL31871615AHAL0AXEAX既是一個整體又可獨立使用901.通用寄存器處理器最常使用的整數通用寄存器318716通用寄存器的名稱EAXAccumulator累加器EBXBase基址寄存器ECXCounter計數器EDXData數據寄存器ESISourceIndex源變址寄存器EDIDestinationIndex目的變址寄存器EBPBasePointer基址指針ESPStackPointer堆棧指針91通用寄存器的名稱EAXAccumulator累加器EBXBa2.標志寄存器標志(Flag)反映指令執行結果或控制指令執行形式用一個或多個二進制位表示一種標志用0和1的不同組合表達標志的不同狀態8086支持16位標志寄存器FLAGSIA-32處理器形成32位EFLAGS標志寄存器狀態標志:記錄指令執行結果的輔助信息控制標志:方向標志DF,僅用于串操作指令系統標志:控制操作系統或核心管理程序的操作方式示意圖922.標志寄存器標志(Flag)示意圖13標志寄存器EFLAGS返回93標志寄存器EFLAGS返回14處理器最基本的標志:狀態標志用來記錄指令執行結果的輔助信息加減運算和邏輯運算指令主要設置它們其他有些指令的執行也會相應地設置它們處理器主要使用其中5個構成各種條件,分支指令判斷這些條件實現程序分支8086的標志OF111512DF10IF9TF8SF7ZF605AF403PF211CF094處理器最基本的標志:狀態標志用來記錄指令執行結果的輔助信息83.指令指針寄存器EIP保存將要執行的指令在主存的存儲器地址EIP是專用寄存器順序執行時自動增量(加上該指令的字節數),指向下一條指令分支、調用等操作時執行控制轉移指令修改,引起程序轉移到指定的指令執行出現中斷或異常時被處理器賦值而相應改變311615IP0EIP953.指令指針寄存器EIP保存將要執行的指令在主存的存儲器地4.段寄存器段(Segment)是用于安排相關代碼或數據的一個主存區域段寄存器表明某個段在主存中的位置6個16位段寄存器:CSDSSSESFSGS應用程序主要涉及3類段代碼段(CodeSegment) 存放程序中指令代碼數據段(DataSegment) 存放當前運行程序所用數據堆棧段(StackSegment) 指明程序使用的堆棧區域主存空間指令段數據段堆棧段程序964.段寄存器段(Segment)是用于安排相關代碼或數據的1.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元每個存儲單元被編排一個號碼即存儲單元地址稱為存儲器地址(MemoryAddress)每個存儲單元以字節為基本存儲單位即字節編址(ByteAddressable)一個字節(Byte)等于8個二進制位(Bit)二進制位是計算機存儲信息的最小單位16位(2個字節)構成一個字(Word)32位(4個字節)構成一個雙字(DoubleWord)示意圖971.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元數據的位格式返回D7D6D5D4D3D2D1D0字節LSBMSBD15……D1D0字LSBMSBD31……D1D0雙字LSBMSB31871615高字節低字節0字雙字98數據的位格式返回D7D6D5D4D3D2D1D0字節LSBM1.存儲模型物理存儲器以字節為基本存儲單位每個存儲單元被分配一個唯一的地址這個地址就是物理地址物理地址空間從0開始順序編排,直到處理器支持的最大存儲單元8086處理器支持1MB存儲器:00000H~FFFFFHIA-32處理器支持4GB存儲器:00000000H~FFFFFFFFH操作系統利用存儲管理單元進行存儲管理,程序并不直接尋址物理存儲器IA-32處理器提供3種存儲模型,用于程序訪問存儲器示意圖991.存儲模型物理存儲器以字節為基本存儲單位示意圖20存儲器地址空間返回FFFFFFFFH00000000H00000001H00000002H00000003H00000004H雙字字節字字節字節字字節100存儲器地址空間返回FFFFFFFFH00000000H000IA-32處理器的存儲模型(1)平展存儲模型(FlatMemoryModel)存儲器是一個連續的地址空間:線性地址空間IA-32處理器支持4GB容量線性地址空間(2)段式存儲模型(SegmentedMemoryModel)存儲器由一組獨立的地址空間:段(Segment)每個段都可以達到4GB容量在處理器內部,所有的段都被映射到線性地址空間(3)實地址存儲模型(Real-addressMemoryModel)8086處理器的存儲模型段式存儲模型的特例線性地址空間最大為1MB容量,段最大為64KB101IA-32處理器的存儲模型(1)平展存儲模型(FlatMe2.工作方式(1)保護方式(ProtectedMode)IA-32處理器固有的工作狀態具有強大的段頁式存儲管理和特權與保護能力使用全部32條地址總線,可尋址4GB物理存儲器使用平展或段式存儲模型利用虛擬8086方式支持實地址8086軟件(2)實地址方式(Real-addressMode)可以進行32位處理的快速8086只能尋址1MB物理存儲器空間,每個段不超過64KB可以使用32位寄存器、32位操作數和32位尋址方式只能支持實地址存儲模型(3)系統管理方式(SystemManagementMode)實現供節能和系統安全管理1022.工作方式(1)保護方式(ProtectedMode)3.邏輯地址(LogicalAddress)在處理器內部、程序員編程時采用的地址邏輯地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距離段基地址的位移量某個存儲單元可以有多個邏輯地址,但只有一個唯一的物理地址邏輯地址線性地址物理地址編程使用處理器轉換地址總線輸出示意圖1033.邏輯地址(LogicalAddress)在處理器內部邏輯地址與物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221邏輯地址=相對地址:205(2層05號房間)物理地址=絕對地址:15(第15號房間)104邏輯地址與物理地址返回1082083081062063061基本段的邏輯地址代碼段(CodeSegment)段基地址:代碼段寄存器CS指示偏移地址:指令指針寄存器EIP保存數據段(DataSegment)段基地址:數據段寄存器DS指示有時也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各種存儲器尋址方式計算出來堆棧段(StackSegment)段基地址:堆棧段寄存器SS指示偏移地址:堆棧指針寄存器ESP保存主存空間指令段數據段堆棧段程序105基本段的邏輯地址代碼段(CodeSegment)主存空間指4.段選擇器16位段寄存器保存16位段選擇器段選擇器指向64位段描述符(Descriptor)段描述符包括段基地址平展存儲模型:指向地址0位置段式存儲模型:指向線性地址空間不同的段實地址存儲模型:保存段基地址的高16位段選擇器段基地址數據或指令段寄存器段描述符主存空間1064.段選擇器16位段寄存器保存16位段選擇器段選擇器段基地平展模型平展存儲模型是分段存儲模型的一種特例所有的段都有相同的段基地址(基地址為0),都重合于同一個線性地址空間IA-32微處理器上運行的應用程序,廣泛采用平展存儲模型。107平展模型平展存儲模型是分段存儲模型的一種特例28分頁機制不采用分頁管理機制,線性地址就是對應的物理地址空間采用了分頁管理機制,則要將線性空間地址映射到物理地址當微處理器既采用段式存儲管理,又采用頁式存儲管理就是段頁式存儲管理方式108分頁機制不采用分頁管理機制,線性地址就是對應的物理地址空間分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表偏移量入口頁目錄頁表入口段1段2

段3頁+109分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表存儲器模型與工作模式

保護模式工作模式實模式虛擬8086模式平展模型存儲器模型實地址模型分段模型段頁模型110存儲器模型與工作模式

保護模式工作模式實模式虛擬8086模5.Win32的虛擬地址分配應用程序起始地址1115.Win32的虛擬地址分配應用程序起始地址321.2.4程序設計語言機器語言(MachineLanguage)底層的計算機語言,對應機器指令形成目標(代碼)程序匯編語言(AssemblyLanguage)將機器指令用助記符號代替而形成的一種語言本質上是機器語言需要匯編程序“匯編”(翻譯)高級語言(HighLevelLanguage)面向問題的程序設計語言需要“編譯”或“解釋”后執行指令是處理器的母語moveax,100addeax,2561121.2.4程序設計語言機器語言(MachineLanguInstructions:LanguageoftheMachine

Tocommandacomputer'shardware,youmustspeakitslanguage.Thewordsofamachine'slanguagearecalledinstructions,anditsvocabularyiscalledaninstructionset.

為了控制計算機硬件,必須使用它的語言。機器語言的單詞稱為指令,它的詞匯表稱為指令集。“ComputerOrganization&Design --TheHardware/SoftwareInterface(2ndEdition)”byJohnL.HennessyandDavidA.PattersonMorganKaufmannPublishers,Inc.1998返回113Instructions:Languageofthe匯編語言和高級語言的比較匯編語言與處理器密切相關,可移植性較差高級語言與具體計算機無關,便于移植匯編語言功能有限、涉及硬件細節,編寫繁瑣困難高級語言功能強大,語法自然,容易掌握和應用匯編語言的優勢:直接、有效地控制硬件,容易產生運行速度快、指令序列短小的高效率目標程序高級語言不易直接控制計算機的各種操作,編譯程序產生的目標程序往往比較龐大混合編程、取長補短?學習匯編語言的意義114匯編語言和高級語言的比較匯編語言與處理器密切相關,可移植性較匯編語言的主要應用場合程序要具有較快的執行時間,或者只能占用較小的存儲容量程序與計算機硬件密切相關,程序要直接、有效地控制硬件大型軟件需要提高性能、優化處理的部分沒有合適的高級語言、或只能采用匯編語言的時候分析具體系統尤其是該系統的低層軟件、加密解密軟件、分析和防治計算機病毒等等115匯編語言的主要應用場合程序要具有較快的執行時間,或者只能占用1.2.5軟件系統Windows操作系統平臺MASM6.15匯編程序硬件BIOS應用程序*.ASM,*.OBJ*.LST,*.EXE操作系統編輯程序,匯編程序連接程序,調試程序1161.2.5軟件系統Windows操作系統平臺硬件BIOS應1.操作系統(OperatingSystem)操作系統管理著系統的軟硬件資源為用戶提供使用機器的交互界面為程序員使用資源提供可供調用的驅動程序為其他程序構建穩定的運行平臺32位控制臺環境%SystemRoot%\system32\cmd.exe16位模擬DOS環境%SystemRoot%\system32\32位控制臺環境和16位模擬DOS環境兩種基本功能和界面一致,但本質不同1171.操作系統(OperatingSystem)操作系統管2.匯編程序(Assembler)將匯編語言源程序轉換為機器代碼微軟宏匯編程序MASMMASM6.11是最后一個獨立發行的MASM軟件包MASM6.15來自VisualC++6.0,支持到Pentium4的SSE2指令系統VisualC++.NET2005提供支持SSE3指令的MASM8.0支持64位指令的ML64.EXE程序匯編語言程序與匯編程序是兩個不同的概念1182.匯編程序(Assembler)將匯編語言源程序轉換為機3.文件路徑目錄(Directory):管理磁盤上文件的文件夾路徑(Path):分區:\根目錄\子目錄\文件名絕對路徑:文件的完整路徑d:\masm\progs\eg0101.asm相對路徑:相對當前目錄的路徑progs\eg0101.asm..\bin\ml.exe轉換分區d:進入當前目錄(CurrentDirectory)cd\masm1193.文件路徑目錄(Directory):管理磁盤上文件的文4.內部命令和外部命令內部命令:32位控制臺或DOS環境本身具有的、直接支持的命令,即駐留主存的命令使用方法:命令關鍵字參數選項外部命令:與其他可執行文件一樣,以文件形式保存在磁盤上的命令執行方法:路徑\文件名參數路徑搜索順序先當前目錄后搜索路徑內部命令PATH查看和設置當前的搜索路徑你所執行的命令不是內部或外部命令,也不是可運行的程序或批處理文件?1204.內部命令和外部命令內部命令:32位控制臺或DOS環境本5.進入MASM目錄的批處理文件為便于進入MASM目錄,可創建批處理文件32位Windows控制臺:WIN32.BAT

16位DOS環境:DOS16.BAT為便于訪問其中文件,增加搜索路徑:@setPATH=D:\MASM;D:\MASM\BIN;%PATH%在Windows資源管理器打開文件夾“D:\MASM”,雙擊該批處理文件,就可以進入MASM環境1215.進入MASM目錄的批處理文件為便于進入MASM目錄,可具有搜索路徑的批處理文件返回@echooff@setPATH=D:\MASM;D:\MASM\BIN;%PATH%%SystemRoot%\system32\cmd.exe@echoonWIN32.BAT@echooff@setPATH=D:\MASM;D:\MASM\BIN;%PATH%%SystemRoot%\system32\@echoonDOS16.BAT122具有搜索路徑的批處理文件返回@echooffWIN32.B1.3匯編語言程序格式程序用程序設計語言編寫,由指令構成指令由操作碼和操作數(地址碼)組成操作碼(Opcode)表明處理器執行的操作例如數據傳送、加法運算、跳轉等操作。操作數(Operand)是參與操作的數據對象主要以寄存器名或地址形式指明數據的來源通常的指令都有一個或兩個操作數有些指令無操作數,個別指令有3或4個操作數多數操作數需要顯式指明,有些操作數隱含使用1231.3匯編語言程序格式程序用程序設計語言編寫,由指令構成41.3.1指令的代碼格式(InstructionFormat)IA-32處理器采用可變長度指令格式操作碼可選的指令前綴(用于擴展指令功能)1~3字節的主要操作碼操作數可選的尋址方式域(包括ModR/M和SIB字段)可選的位移量可選的立即數1241.3.1指令的代碼格式(InstructionForm使用最多、最基本的數據傳送指令傳送指令的助記符:MOV(取自Move)將數據從一個位置傳送到另一個位置類似高級語言的賦值語句

movdest,src;源操作數src:被傳送的數據或數據所在的位置;目的操作數dest:數據將要傳送到的位置moveax,ebx ;機器代碼:8BC3moveax,[ebx] ;機器代碼:8B03moveax,[ebx+esi*4+80h] ;機器代碼:8B84B380000000功能演示125使用最多、最基本的數據傳送指令傳送指令的助記符:MOV(取自傳送指令MOV的功能演示返回源操作數src目的操作數dest30H30H被傳送的數據126傳送指令MOV的功能演示返回源操作數src目的操作數de1.3.2語句格式源程序由語句組成一個語句常占一行(MASM有續行符“\”)一個語句不超過132個字符,4個部分執行性語句:表達處理器指令(硬指令)標號:硬指令助記符

操作數,操作數 ;注釋說明性語句:表達偽指令,控制匯編方式名字

偽指令助記符

參數,參數,……;注釋這是MASM語法,但具有一般性1271.3.2語句格式源程序由語句組成這是MASM語法,但具有1.標號與名字標號:執行性語句中冒號分隔表示處理器指令在主存中的邏輯地址指示分支、循環等程序的目的地址名字:說明性語句中空格或制表符分隔變量名、段名、子程序名等反映變量、段和子程序等的邏輯地址標號和名字是用戶自定義的標識符1281.標號與名字標號:執行性語句中標號和名字是用戶自定義的標標識符(Identifier)最多由31個字母、數字及規定的特殊符號(如_、$、?、@)組成,不能以數字開頭一個源程序中,用戶定義的每個標識符必須唯一不能是匯編程序采用的保留字保留字(ReservedWord)是編程語言本身需要使用的各種具有特定含義的標識符、也稱為關鍵字硬指令助記符:MOV偽指令助記符:BYTE操作符:OFFSET寄存器名:EAX取名原則類似高級語言但默認不區別大小寫字母129標識符(Identifier)最多由31個字母、數字及規定的2.助記符助記符是幫助記憶指令功能的符號硬指令助記符表示處理器指令偽指令助記符表達一個匯編命令處理器指令示例:傳送指令MOV偽指令示例:字節變量定義助記符:BYTE

(或DB)功能:在主存中占用若干的存儲空間,用于保存變量值,該變量以字節為單位存取msg

byte

'Hello,Assembly!',13,10,01302.助記符助記符是幫助記憶指令功能的符號msgbyt3.操作數和參數處理器指令的操作數:表示參與操作的對象具體的常量保存在寄存器的數據保存在存儲器中的變量逗號前常是目的操作數,逗號后常是源操作數偽指令的參數:常量、變量名、表達式等可以有多個,參數之間用逗號分隔msg

byte

'Hello,Assembly!',13,10,0mov

eax,offsetmsg1313.操作數和參數處理器指令的操作數:表示參與操作的對象ms4.注釋和分隔符語句中分號后的內容是注釋對指令或程序進行說明匯編程序不對它們做任何處理注釋利于閱讀,應養成書寫注釋的好習慣語句的4個組成部分要用分隔符分開標號后的冒號注釋前的分號操作數間和參數間的逗號分隔其他部分采用一個或多個空格或制表符注釋使用英文或中文均可分隔符都是英文標點良好的語句格式有利于編程1324.注釋和分隔符語句中分號后的內容是注釋分隔符都是英文標點1.3.3源程序框架;eg0000.asminWindowsConsole includeio32.inc ;包含32位輸入輸出文件

.data ;定義數據段

…… ;數據定義(數據待填)

.code ;定義代碼段start: ;程序執行起始位置

…… ;主程序(指令待填)

exit0(或ret) ;程序正常執行結束

…… ;子程序(指令待填)

endstart ;匯編結束1331.3.3源程序框架;eg0000.asminWind1.包含偽指令INCLUDE將常用的常量定義、過程說明

溫馨提示

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

評論

0/150

提交評論