




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第1章匯編語言基礎(chǔ)1.1英特爾80x86處理器1.2個人計算機(jī)系統(tǒng)1.3匯編語言程序格式第1章匯編語言基礎(chǔ)1.1英特爾80x86處理器第1章匯編語言基礎(chǔ)了解軟硬件開發(fā)環(huán)境熟悉通用寄存器和存儲器組織掌握匯編語言的 語句格式、程序框架和開發(fā)方法第1章匯編語言基礎(chǔ)了解軟硬件開發(fā)環(huán)境Intel80861.1英特爾80x86處理器8038680486奔騰奔騰II奔騰4802868086奔騰III酷睿多核系列4004IA-32處理器16位80x86處理器奔騰多核系列Intel64處理器3Intel80861.1英特爾80x86處理器803861.1.116位80x86處理器16位結(jié)構(gòu)處理器8086/8088指令系統(tǒng)提供16位基本指令集80186/80188增加若干條實用指令8086的工作方式是實方式(RealMode)80286增加保護(hù)方式(ProtectedMode)80286引入了系統(tǒng)指令為操作系統(tǒng)等核心程序提供處理器控制功能指令系統(tǒng)、指令集(InstructionSet)41.1.116位80x86處理器16位結(jié)構(gòu)處理器指令系統(tǒng)、1.1.2IA-32處理器80386引入英特爾32位指令集結(jié)構(gòu)ISA兼容原16位80286指令系統(tǒng)全面升級為32位提供虛擬8086工作方式(Virtual8086Mode)80486集成浮點處理單元支持浮點指令Pentium系列陸續(xù)增加若干整數(shù)指令、完善浮點指令增加一系列多媒體指令(SIMD指令)IA-32(IntelArchitecture-32)51.1.2IA-32處理器80386引入英特爾32位指令集1.1.3Intel64處理器引入64位英特爾指令集結(jié)構(gòu)兼容32位指令系統(tǒng)新增64位工作方式繼續(xù)豐富多媒體指令處理器集成多核(Multi-core)技術(shù)處理器進(jìn)入多核時代Manycore61.1.3Intel64處理器引入64位英特爾指令集結(jié)構(gòu)1.2個人計算機(jī)系統(tǒng)硬件(Hardware):物理設(shè)備軟件(Software):程序和文檔運算器
控制器寄存器組
主存儲器總線輸入輸出接口電路外部設(shè)備軟件微處理器微型計算機(jī)微型計算機(jī)系統(tǒng)71.2個人計算機(jī)系統(tǒng)硬件(Hardware):物理設(shè)備運算1.2.1硬件組成I/O接口主存儲器系統(tǒng)總線CPU寄存器控制器運算器輔助存儲器輸入設(shè)備輸出設(shè)備匯編語言程序員將硬件抽象為:寄存器、存儲器地址和輸入輸出地址81.2.1硬件組成主存儲器系統(tǒng)總線CPU寄存器控制器運算器1.2.2寄存器(Register)處理器內(nèi)部的高速存儲單元用于暫時存放程序執(zhí)行過程中的代碼和數(shù)據(jù)透明寄存器對應(yīng)用人員不可見、不能編程直接控制可編程(Programmable)寄存器具有引用名稱、供編程使用通用寄存器(General-PurposeRegister)具有多種用途數(shù)量較多、使用頻度較高專用寄存器各自只用于特定目的91.2.2寄存器(Register)處理器內(nèi)部的高速存儲單IA-32常用寄存器8個32位通用寄存器6個16位段寄存器1個32位標(biāo)志寄存器1個32位指令指針10IA-32常用寄存器8個32位通用寄存器101.通用寄存器處理器最常使用的整數(shù)通用寄存器可用于保存整數(shù)數(shù)據(jù)、地址等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.通用寄存器處理器最常使用的整數(shù)通用寄存器318716通用寄存器的名稱EAXAccumulator累加器EBXBase基址寄存器ECXCounter計數(shù)器EDXData數(shù)據(jù)寄存器ESISourceIndex源變址寄存器EDIDestinationIndex目的變址寄存器EBPBasePointer基址指針ESPStackPointer堆棧指針12通用寄存器的名稱EAXAccumulator累加器EBXBa2.標(biāo)志寄存器標(biāo)志(Flag)反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式用一個或多個二進(jìn)制位表示一種標(biāo)志用0和1的不同組合表達(dá)標(biāo)志的不同狀態(tài)8086支持16位標(biāo)志寄存器FLAGSIA-32處理器形成32位EFLAGS標(biāo)志寄存器狀態(tài)標(biāo)志:記錄指令執(zhí)行結(jié)果的輔助信息控制標(biāo)志:方向標(biāo)志DF,僅用于串操作指令系統(tǒng)標(biāo)志:控制操作系統(tǒng)或核心管理程序的操作方式示意圖132.標(biāo)志寄存器標(biāo)志(Flag)示意圖13標(biāo)志寄存器EFLAGS返回14標(biāo)志寄存器EFLAGS返回14處理器最基本的標(biāo)志:狀態(tài)標(biāo)志用來記錄指令執(zhí)行結(jié)果的輔助信息加減運算和邏輯運算指令主要設(shè)置它們其他有些指令的執(zhí)行也會相應(yīng)地設(shè)置它們處理器主要使用其中5個構(gòu)成各種條件,分支指令判斷這些條件實現(xiàn)程序分支8086的標(biāo)志OF111512DF10IF9TF8SF7ZF605AF403PF211CF015處理器最基本的標(biāo)志:狀態(tài)標(biāo)志用來記錄指令執(zhí)行結(jié)果的輔助信息83.指令指針寄存器EIP保存將要執(zhí)行的指令在主存的存儲器地址EIP是專用寄存器順序執(zhí)行時自動增量(加上該指令的字節(jié)數(shù)),指向下一條指令分支、調(diào)用等操作時執(zhí)行控制轉(zhuǎn)移指令修改,引起程序轉(zhuǎn)移到指定的指令執(zhí)行出現(xiàn)中斷或異常時被處理器賦值而相應(yīng)改變311615IP0EIP163.指令指針寄存器EIP保存將要執(zhí)行的指令在主存的存儲器地4.段寄存器段(Segment)是用于安排相關(guān)代碼或數(shù)據(jù)的一個主存區(qū)域段寄存器表明某個段在主存中的位置6個16位段寄存器:CSDSSSESFSGS應(yīng)用程序主要涉及3類段代碼段(CodeSegment) 存放程序中指令代碼數(shù)據(jù)段(DataSegment) 存放當(dāng)前運行程序所用數(shù)據(jù)堆棧段(StackSegment) 指明程序使用的堆棧區(qū)域主存空間指令段數(shù)據(jù)段堆棧段程序174.段寄存器段(Segment)是用于安排相關(guān)代碼或數(shù)據(jù)的1.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元每個存儲單元被編排一個號碼即存儲單元地址稱為存儲器地址(MemoryAddress)每個存儲單元以字節(jié)為基本存儲單位即字節(jié)編址(ByteAddressable)一個字節(jié)(Byte)等于8個二進(jìn)制位(Bit)二進(jìn)制位是計算機(jī)存儲信息的最小單位16位(2個字節(jié))構(gòu)成一個字(Word)32位(4個字節(jié))構(gòu)成一個雙字(DoubleWord)示意圖181.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元數(shù)據(jù)的位格式返回D7D6D5D4D3D2D1D0字節(jié)LSBMSBD15……D1D0字LSBMSBD31……D1D0雙字LSBMSB31871615高字節(jié)低字節(jié)0字雙字19數(shù)據(jù)的位格式返回D7D6D5D4D3D2D1D0字節(jié)LSBM1.存儲模型物理存儲器以字節(jié)為基本存儲單位每個存儲單元被分配一個唯一的地址這個地址就是物理地址物理地址空間從0開始順序編排,直到處理器支持的最大存儲單元8086處理器支持1MB存儲器:00000H~FFFFFHIA-32處理器支持4GB存儲器:00000000H~FFFFFFFFH操作系統(tǒng)利用存儲管理單元進(jìn)行存儲管理,程序并不直接尋址物理存儲器IA-32處理器提供3種存儲模型,用于程序訪問存儲器示意圖201.存儲模型物理存儲器以字節(jié)為基本存儲單位示意圖20存儲器地址空間返回FFFFFFFFH00000000H00000001H00000002H00000003H00000004H雙字字節(jié)字字節(jié)字節(jié)字字節(jié)21存儲器地址空間返回FFFFFFFFH00000000H000IA-32處理器的存儲模型(1)平展存儲模型(FlatMemoryModel)存儲器是一個連續(xù)的地址空間:線性地址空間IA-32處理器支持4GB容量線性地址空間(2)段式存儲模型(SegmentedMemoryModel)存儲器由一組獨立的地址空間:段(Segment)每個段都可以達(dá)到4GB容量在處理器內(nèi)部,所有的段都被映射到線性地址空間(3)實地址存儲模型(Real-addressMemoryModel)8086處理器的存儲模型段式存儲模型的特例線性地址空間最大為1MB容量,段最大為64KB22IA-32處理器的存儲模型(1)平展存儲模型(FlatMe2.工作方式(1)保護(hù)方式(ProtectedMode)IA-32處理器固有的工作狀態(tài)具有強(qiáng)大的段頁式存儲管理和特權(quán)與保護(hù)能力使用全部32條地址總線,可尋址4GB物理存儲器使用平展或段式存儲模型利用虛擬8086方式支持實地址8086軟件(2)實地址方式(Real-addressMode)可以進(jìn)行32位處理的快速8086只能尋址1MB物理存儲器空間,每個段不超過64KB可以使用32位寄存器、32位操作數(shù)和32位尋址方式只能支持實地址存儲模型(3)系統(tǒng)管理方式(SystemManagementMode)實現(xiàn)供節(jié)能和系統(tǒng)安全管理232.工作方式(1)保護(hù)方式(ProtectedMode)3.邏輯地址(LogicalAddress)在處理器內(nèi)部、程序員編程時采用的地址邏輯地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距離段基地址的位移量某個存儲單元可以有多個邏輯地址,但只有一個唯一的物理地址邏輯地址線性地址物理地址編程使用處理器轉(zhuǎn)換地址總線輸出示意圖243.邏輯地址(LogicalAddress)在處理器內(nèi)部邏輯地址與物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221邏輯地址=相對地址:205(2層05號房間)物理地址=絕對地址:15(第15號房間)25邏輯地址與物理地址返回1082083081062063061基本段的邏輯地址代碼段(CodeSegment)段基地址:代碼段寄存器CS指示偏移地址:指令指針寄存器EIP保存數(shù)據(jù)段(DataSegment)段基地址:數(shù)據(jù)段寄存器DS指示有時也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各種存儲器尋址方式計算出來堆棧段(StackSegment)段基地址:堆棧段寄存器SS指示偏移地址:堆棧指針寄存器ESP保存主存空間指令段數(shù)據(jù)段堆棧段程序26基本段的邏輯地址代碼段(CodeSegment)主存空間指4.段選擇器16位段寄存器保存16位段選擇器段選擇器指向64位段描述符(Descriptor)段描述符包括段基地址平展存儲模型:指向地址0位置段式存儲模型:指向線性地址空間不同的段實地址存儲模型:保存段基地址的高16位段選擇器段基地址數(shù)據(jù)或指令段寄存器段描述符主存空間274.段選擇器16位段寄存器保存16位段選擇器段選擇器段基地平展模型平展存儲模型是分段存儲模型的一種特例所有的段都有相同的段基地址(基地址為0),都重合于同一個線性地址空間IA-32微處理器上運行的應(yīng)用程序,廣泛采用平展存儲模型。28平展模型平展存儲模型是分段存儲模型的一種特例28分頁機(jī)制不采用分頁管理機(jī)制,線性地址就是對應(yīng)的物理地址空間采用了分頁管理機(jī)制,則要將線性空間地址映射到物理地址當(dāng)微處理器既采用段式存儲管理,又采用頁式存儲管理就是段頁式存儲管理方式29分頁機(jī)制不采用分頁管理機(jī)制,線性地址就是對應(yīng)的物理地址空間分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表偏移量入口頁目錄頁表入口段1段2
段3頁+30分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表存儲器模型與工作模式
保護(hù)模式工作模式實模式虛擬8086模式平展模型存儲器模型實地址模型分段模型段頁模型31存儲器模型與工作模式
保護(hù)模式工作模式實模式虛擬8086模5.Win32的虛擬地址分配應(yīng)用程序起始地址325.Win32的虛擬地址分配應(yīng)用程序起始地址321.2.4程序設(shè)計語言機(jī)器語言(MachineLanguage)底層的計算機(jī)語言,對應(yīng)機(jī)器指令形成目標(biāo)(代碼)程序匯編語言(AssemblyLanguage)將機(jī)器指令用助記符號代替而形成的一種語言本質(zhì)上是機(jī)器語言需要匯編程序“匯編”(翻譯)高級語言(HighLevelLanguage)面向問題的程序設(shè)計語言需要“編譯”或“解釋”后執(zhí)行指令是處理器的母語moveax,100addeax,256331.2.4程序設(shè)計語言機(jī)器語言(MachineLanguInstructions:LanguageoftheMachine
Tocommandacomputer'shardware,youmustspeakitslanguage.Thewordsofamachine'slanguagearecalledinstructions,anditsvocabularyiscalledaninstructionset.
為了控制計算機(jī)硬件,必須使用它的語言。機(jī)器語言的單詞稱為指令,它的詞匯表稱為指令集?!癈omputerOrganization&Design --TheHardware/SoftwareInterface(2ndEdition)”byJohnL.HennessyandDavidA.PattersonMorganKaufmannPublishers,Inc.1998返回34Instructions:Languageofthe匯編語言和高級語言的比較匯編語言與處理器密切相關(guān),可移植性較差高級語言與具體計算機(jī)無關(guān),便于移植匯編語言功能有限、涉及硬件細(xì)節(jié),編寫繁瑣困難高級語言功能強(qiáng)大,語法自然,容易掌握和應(yīng)用匯編語言的優(yōu)勢:直接、有效地控制硬件,容易產(chǎn)生運行速度快、指令序列短小的高效率目標(biāo)程序高級語言不易直接控制計算機(jī)的各種操作,編譯程序產(chǎn)生的目標(biāo)程序往往比較龐大混合編程、取長補(bǔ)短?學(xué)習(xí)匯編語言的意義35匯編語言和高級語言的比較匯編語言與處理器密切相關(guān),可移植性較匯編語言的主要應(yīng)用場合程序要具有較快的執(zhí)行時間,或者只能占用較小的存儲容量程序與計算機(jī)硬件密切相關(guān),程序要直接、有效地控制硬件大型軟件需要提高性能、優(yōu)化處理的部分沒有合適的高級語言、或只能采用匯編語言的時候分析具體系統(tǒng)尤其是該系統(tǒng)的低層軟件、加密解密軟件、分析和防治計算機(jī)病毒等等36匯編語言的主要應(yīng)用場合程序要具有較快的執(zhí)行時間,或者只能占用1.2.5軟件系統(tǒng)Windows操作系統(tǒng)平臺MASM6.15匯編程序硬件BIOS應(yīng)用程序*.ASM,*.OBJ*.LST,*.EXE操作系統(tǒng)編輯程序,匯編程序連接程序,調(diào)試程序371.2.5軟件系統(tǒng)Windows操作系統(tǒng)平臺硬件BIOS應(yīng)1.操作系統(tǒng)(OperatingSystem)操作系統(tǒng)管理著系統(tǒng)的軟硬件資源為用戶提供使用機(jī)器的交互界面為程序員使用資源提供可供調(diào)用的驅(qū)動程序為其他程序構(gòu)建穩(wěn)定的運行平臺32位控制臺環(huán)境%SystemRoot%\system32\cmd.exe16位模擬DOS環(huán)境%SystemRoot%\system32\32位控制臺環(huán)境和16位模擬DOS環(huán)境兩種基本功能和界面一致,但本質(zhì)不同381.操作系統(tǒng)(OperatingSystem)操作系統(tǒng)管2.匯編程序(Assembler)將匯編語言源程序轉(zhuǎn)換為機(jī)器代碼微軟宏匯編程序MASMMASM6.11是最后一個獨立發(fā)行的MASM軟件包MASM6.15來自VisualC++6.0,支持到Pentium4的SSE2指令系統(tǒng)VisualC++.NET2005提供支持SSE3指令的MASM8.0支持64位指令的ML64.EXE程序匯編語言程序與匯編程序是兩個不同的概念392.匯編程序(Assembler)將匯編語言源程序轉(zhuǎn)換為機(jī)3.文件路徑目錄(Directory):管理磁盤上文件的文件夾路徑(Path):分區(qū):\根目錄\子目錄\文件名絕對路徑:文件的完整路徑d:\masm\progs\eg0101.asm相對路徑:相對當(dāng)前目錄的路徑progs\eg0101.asm..\bin\ml.exe轉(zhuǎn)換分區(qū)d:進(jìn)入當(dāng)前目錄(CurrentDirectory)cd\masm403.文件路徑目錄(Directory):管理磁盤上文件的文4.內(nèi)部命令和外部命令內(nèi)部命令:32位控制臺或DOS環(huán)境本身具有的、直接支持的命令,即駐留主存的命令使用方法:命令關(guān)鍵字參數(shù)選項外部命令:與其他可執(zhí)行文件一樣,以文件形式保存在磁盤上的命令執(zhí)行方法:路徑\文件名參數(shù)路徑搜索順序先當(dāng)前目錄后搜索路徑內(nèi)部命令PATH查看和設(shè)置當(dāng)前的搜索路徑你所執(zhí)行的命令不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件?414.內(nèi)部命令和外部命令內(nèi)部命令:32位控制臺或DOS環(huán)境本5.進(jìn)入MASM目錄的批處理文件為便于進(jìn)入MASM目錄,可創(chuàng)建批處理文件32位Windows控制臺:WIN32.BAT
16位DOS環(huán)境:DOS16.BAT為便于訪問其中文件,增加搜索路徑:@setPATH=D:\MASM;D:\MASM\BIN;%PATH%在Windows資源管理器打開文件夾“D:\MASM”,雙擊該批處理文件,就可以進(jìn)入MASM環(huán)境425.進(jìn)入MASM目錄的批處理文件為便于進(jìn)入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匯編語言程序格式程序用程序設(shè)計語言編寫,由指令構(gòu)成指令由操作碼和操作數(shù)(地址碼)組成操作碼(Opcode)表明處理器執(zhí)行的操作例如數(shù)據(jù)傳送、加法運算、跳轉(zhuǎn)等操作。操作數(shù)(Operand)是參與操作的數(shù)據(jù)對象主要以寄存器名或地址形式指明數(shù)據(jù)的來源通常的指令都有一個或兩個操作數(shù)有些指令無操作數(shù),個別指令有3或4個操作數(shù)多數(shù)操作數(shù)需要顯式指明,有些操作數(shù)隱含使用441.3匯編語言程序格式程序用程序設(shè)計語言編寫,由指令構(gòu)成41.3.1指令的代碼格式(InstructionFormat)IA-32處理器采用可變長度指令格式操作碼可選的指令前綴(用于擴(kuò)展指令功能)1~3字節(jié)的主要操作碼操作數(shù)可選的尋址方式域(包括ModR/M和SIB字段)可選的位移量可選的立即數(shù)451.3.1指令的代碼格式(InstructionForm使用最多、最基本的數(shù)據(jù)傳送指令傳送指令的助記符:MOV(取自Move)將數(shù)據(jù)從一個位置傳送到另一個位置類似高級語言的賦值語句
movdest,src;源操作數(shù)src:被傳送的數(shù)據(jù)或數(shù)據(jù)所在的位置;目的操作數(shù)dest:數(shù)據(jù)將要傳送到的位置moveax,ebx ;機(jī)器代碼:8BC3moveax,[ebx] ;機(jī)器代碼:8B03moveax,[ebx+esi*4+80h] ;機(jī)器代碼:8B84B380000000功能演示46使用最多、最基本的數(shù)據(jù)傳送指令傳送指令的助記符:MOV(取自傳送指令MOV的功能演示返回源操作數(shù)src目的操作數(shù)dest30H30H被傳送的數(shù)據(jù)47傳送指令MOV的功能演示返回源操作數(shù)src目的操作數(shù)de1.3.2語句格式源程序由語句組成一個語句常占一行(MASM有續(xù)行符“\”)一個語句不超過132個字符,4個部分執(zhí)行性語句:表達(dá)處理器指令(硬指令)標(biāo)號:硬指令助記符
操作數(shù),操作數(shù) ;注釋說明性語句:表達(dá)偽指令,控制匯編方式名字
偽指令助記符
參數(shù),參數(shù),……;注釋這是MASM語法,但具有一般性481.3.2語句格式源程序由語句組成這是MASM語法,但具有1.標(biāo)號與名字標(biāo)號:執(zhí)行性語句中冒號分隔表示處理器指令在主存中的邏輯地址指示分支、循環(huán)等程序的目的地址名字:說明性語句中空格或制表符分隔變量名、段名、子程序名等反映變量、段和子程序等的邏輯地址標(biāo)號和名字是用戶自定義的標(biāo)識符491.標(biāo)號與名字標(biāo)號:執(zhí)行性語句中標(biāo)號和名字是用戶自定義的標(biāo)標(biāo)識符(Identifier)最多由31個字母、數(shù)字及規(guī)定的特殊符號(如_、$、?、@)組成,不能以數(shù)字開頭一個源程序中,用戶定義的每個標(biāo)識符必須唯一不能是匯編程序采用的保留字保留字(ReservedWord)是編程語言本身需要使用的各種具有特定含義的標(biāo)識符、也稱為關(guān)鍵字硬指令助記符:MOV偽指令助記符:BYTE操作符:OFFSET寄存器名:EAX取名原則類似高級語言但默認(rèn)不區(qū)別大小寫字母50標(biāo)識符(Identifier)最多由31個字母、數(shù)字及規(guī)定的2.助記符助記符是幫助記憶指令功能的符號硬指令助記符表示處理器指令偽指令助記符表達(dá)一個匯編命令處理器指令示例:傳送指令MOV偽指令示例:字節(jié)變量定義助記符:BYTE
(或DB)功能:在主存中占用若干的存儲空間,用于保存變量值,該變量以字節(jié)為單位存取msg
byte
'Hello,Assembly!',13,10,0512.助記符助記符是幫助記憶指令功能的符號msgbyt3.操作數(shù)和參數(shù)處理器指令的操作數(shù):表示參與操作的對象具體的常量保存在寄存器的數(shù)據(jù)保存在存儲器中的變量逗號前常是目的操作數(shù),逗號后常是源操作數(shù)偽指令的參數(shù):常量、變量名、表達(dá)式等可以有多個,參數(shù)之間用逗號分隔msg
byte
'Hello,Assembly!',13,10,0mov
eax,offsetmsg523.操作數(shù)和參數(shù)處理器指令的操作數(shù):表示參與操作的對象ms4.注釋和分隔符語句中分號后的內(nèi)容是注釋對指令或程序進(jìn)行說明匯編程序不對它們做任何處理注釋利于閱讀,應(yīng)養(yǎng)成書寫注釋的好習(xí)慣語句的4個組成部分要用分隔符分開標(biāo)號后的冒號注釋前的分號操作數(shù)間和參數(shù)間的逗號分隔其他部分采用一個或多個空格或制表符注釋使用英文或中文均可分隔符都是英文標(biāo)點良好的語句格式有利于編程534.注釋和分隔符語句中分號后的內(nèi)容是注釋分隔符都是英文標(biāo)點1.3.3源程序框架;eg0000.asminWindowsConsole includeio32.inc ;包含32位輸入輸出文件
.data ;定義數(shù)據(jù)段
…… ;數(shù)據(jù)定義(數(shù)據(jù)待填)
.code ;定義代碼段start: ;程序執(zhí)行起始位置
…… ;主程序(指令待填)
exit0(或ret) ;程序正常執(zhí)行結(jié)束
…… ;子程序(指令待填)
endstart ;匯編結(jié)束541.3.3源程序框架;eg0000.asminWind1.包含偽指令I(lǐng)NCLUDE將常用的常量定義、過程說明、共享的子程序庫等內(nèi)容進(jìn)行聲明(相當(dāng)于C和C++語言中,包含頭文件的作用)IO32.INC是配合本書的包含文件前3個語句:.686 ;32位指令.modelflat,stdcall ;選擇平展模型,標(biāo)準(zhǔn)調(diào)用規(guī)范
optioncasemap:none ;告知MASM區(qū)分用戶定義標(biāo)識符的大小寫551.包含偽指令I(lǐng)NCLUDE將常用的常量定義、過程說明、共2.段的簡化定義數(shù)據(jù)段定義偽指令.DATA創(chuàng)建一個數(shù)據(jù)段代碼段定義偽指令.CODE創(chuàng)建一個代碼段堆棧段由Windows維護(hù),用戶不必設(shè)置程序開始執(zhí)行的位置應(yīng)用一個標(biāo)號(例如:START)匯編結(jié)束END指令的參數(shù)應(yīng)用程序執(zhí)行結(jié)束語句“EXIT0”將控制權(quán)交還操作系統(tǒng)提供給操作系統(tǒng)一個返回代碼通常用0表示執(zhí)行正確源程序匯編結(jié)束END語句執(zhí)行結(jié)束≠匯編結(jié)束562.段的簡化定義數(shù)據(jù)段定義偽指令.DATA創(chuàng)建一個數(shù)據(jù)段執(zhí)〔例1-1〕信息顯示程序在數(shù)據(jù)段給出這個字符串形式的信息:
;數(shù)據(jù)段msg byte'Hello,Assembly!',13,10,0 ;定義要顯示的字符串在代碼段編寫顯示字符串的程序:
;代碼段
moveax,offsetmsg ;指定字符串的偏移地址
calldispmsg ;調(diào)用I/O子程序顯示信息完整程序57〔例1-1〕信息顯示程序在數(shù)據(jù)段給出這個字符串形式的信息:完匯編語言源程序EG0101.ASM;eg0101.asm
includeio32.inc
.data ;數(shù)據(jù)段msg byte'Hello,Assembly!',13,10,0
.code ;代碼段start: ;程序執(zhí)行起始位置
moveax,offsetmsg calldispmsg
exit0 ;程序正常執(zhí)行結(jié)束
endstart ;匯編結(jié)束返回Hello,Assembly!運行結(jié)果對比58匯編語言源程序EG0101.ASM;eg0101.asm返回信息顯示的C語言源程序#include<stdio.h>intmain(){
printf("Hello,world!\n"); exit(0);}返回Hello,world!運行結(jié)果59信息顯示的C語言源程序#include<stdio.h>返3.輸入輸出子程序庫匯編程序通常不提供任何函數(shù)或程序庫必須利用操作系統(tǒng)的編程資源本書配套鍵盤輸入和顯示器輸出的I/O子程序含IO32.INC和IO32.LIB,需要包含文件聲明源程序文件開始使用包含命令聲明INCLUDEIO32.INC子程序調(diào)用方法MOVEAX,入口參數(shù)CALL子程序名子程序名DISPMSG入口參數(shù)EAX=字符串地址功能說明顯示字符串(以0結(jié)尾)輸入子程序輸出子程序603.輸入輸出子程序庫匯編程序通常不提供任何函數(shù)或程序庫子程常用輸出子程序返回子程序名功能說明DISPMSG顯示字符串(以0結(jié)尾)DISPC顯示一個字符DISPCRLF光標(biāo)回車換行,到下一行首個位置DISPRD顯示8個32位通用寄存器內(nèi)容DISPRF顯示6個狀態(tài)標(biāo)志的狀態(tài)DISPHD以十六進(jìn)制形式顯示8位數(shù)據(jù)DISPUID顯示無符號十進(jìn)制整數(shù)DISPSID顯示有符號十進(jìn)制整數(shù)61常用輸出子程序返回子程序名功能說明DISPMSG顯示字符串(常用輸入子程序返回子程序名功能說明READMSG輸入一個字符串(回車結(jié)束)READC輸入一個字符(回顯)READHD輸入8位十六進(jìn)制數(shù)據(jù)READUID輸入無符號十進(jìn)制整數(shù)(≤232-1)READSID輸入有符號十進(jìn)制整數(shù)(-231~231-1)62常用輸入子程序返回子程序名功能說明READMSG輸入一個字符1.3.4開發(fā)過程631.3.4開發(fā)過程631.開發(fā)軟件抽取MASM6.11和VisualC++6.0集成開發(fā)環(huán)境中有關(guān)文件構(gòu)造基本開發(fā)軟件包MASM主目錄:I/O庫、包含文件及批處理文件BIN子目錄:進(jìn)行匯編、連接及配套程序文件WINDBG子目錄:調(diào)試程序WinDbg.EXE默認(rèn)安裝到D分區(qū)的MASM目錄快速開發(fā)方法
①進(jìn)入MASM目錄雙擊批處理文件WIN32.BAT
②生成可執(zhí)行文件MAKE32eg0101快速開發(fā)過程641.開發(fā)軟件抽取MASM6.11和VisualC++快速開發(fā)過程返回感性認(rèn)識因直觀而印象深刻65快速開發(fā)過程返回感性認(rèn)識因直觀而印象深刻652.源程序的編輯源程序文件是無格式文件、純文本類型以ASM為擴(kuò)展名,可使用任何文本編輯器Windows的記事本Notepad其他程序開發(fā)工具中的編輯環(huán)境專注于源程序編寫的編輯軟件,例如UltraEdit32本書配套開發(fā)軟件MASM主目錄提供Notepad2.exe程序本書源程序文件的命名規(guī)則EG=例題,EX=習(xí)題
前2位數(shù)字=章號,后2位數(shù)字=序號662.源程序的編輯源程序文件是無格式文件、純文本類型本書源程3.源程序的匯編生成目標(biāo)模塊文件(.OBJ)MASM6.x的匯編程序是ML.EXE
BIN\ML/c/coffeg0101.asm參數(shù)“/c”(小寫字母)實現(xiàn)源程序的匯編參數(shù)“/coff”(小寫字母)表示生成COFF格式的目標(biāo)模塊文件溫馨提示:將源文件放在MASM目錄溫馨提示:ML.EXE的參數(shù)區(qū)別大小寫673.源程序的匯編生成目標(biāo)模塊文件(.OBJ)溫馨提示:將源4.目標(biāo)文件的連接把一個或多個目標(biāo)文件和庫文件合成一個可執(zhí)行文件(.EXE)32位連接程序被更名為LINK32.EXE
BIN\LINK32/subsystem:consoleeg0201.obj“/subsystem:console”表示生成Windows控制臺(Console)環(huán)境的可執(zhí)行文件“/subsystem:windows”生成Windows圖形窗口的可執(zhí)行文件溫馨提示:使用批處理文件方便操作溫馨提示:匯編程序只指出語法錯誤684.目標(biāo)文件的連接把一個或多個目標(biāo)文件和庫文件合成一個可執(zhí)5.可執(zhí)行文件的運行進(jìn)入控制臺(或模擬DOS)環(huán)境在命令行提示符下輸入文件名(可以省略擴(kuò)展名)、按下回車鍵運行
eg0201.exe運行錯誤,就需要靜態(tài)排錯:閱讀分析源程序動態(tài)排錯:利用調(diào)試程序溫馨提示:不要在Windows下雙擊運行695.可執(zhí)行文件的運行進(jìn)入控制臺(或模擬DOS)環(huán)境溫馨提示6.列表文件列表文件(.LST)含有源程序和目標(biāo)代碼
ML/c/coff/Fleg0201.asm“/Fl”創(chuàng)建列表文件(大寫F、小寫l,不是數(shù)字1)列表文件有兩部分內(nèi)容第一部分:源程序及其代碼第二部分:各種標(biāo)識符錯誤Error:比較嚴(yán)重的語法錯誤警告Warning:不太關(guān)鍵的語法錯誤706.列表文件列表文件(.LST)含有源程序和目標(biāo)代碼707.調(diào)試程序WinDbg是微軟提供的Windows調(diào)試程序WinDbg支持源程序級調(diào)試,但需要在匯編、連接過程中加入?yún)?shù)匯編時用“/Zi”(大寫Z、小寫i)參數(shù) ML/c/coff/Fl/Zieg0101.asm連接時用“/debug”參數(shù) LINK32/subsystem:console/debugeg0101.obj雙擊WinDbg快捷方式打開調(diào)試程序源程序可執(zhí)行文件目標(biāo)模塊文本編輯器匯編程序連接程序調(diào)試程序717.調(diào)試程序WinDbg是微軟提供的Windows調(diào)試程序匯編語言集成開發(fā)環(huán)境(2)運行作者組織的“開發(fā)工具.EXE”可以生成一個匯編語言集成開發(fā)環(huán)境MASM615—LINK16.EXE,LIB16.EXEMASM32調(diào)試工具—WINDBG,DEBUG作者編寫的輸入輸出文件IO16.LIB,LIB32.LIB,IO.INC,IO16.INC,IO32.INC72匯編語言集成開發(fā)環(huán)境(2)運行作者組織的“開發(fā)工具.EXE”安裝方法雙擊“m32v10r.EXE”安裝masm32masm32只能安裝在根目錄再雙擊“Exmasm32”安裝其他軟件安裝目錄為masm32所在目錄,默認(rèn)為C:\masm3273安裝方法雙擊“m32v10r.EXE”73MASM615MASM615是微軟提供的匯編開發(fā)軟件包,以DOS操作系統(tǒng)為平臺,可以用來開發(fā)實模式下的程序和系統(tǒng)程序,但是無法開發(fā)保護(hù)模式下的32位應(yīng)用程序WINDOWSXP/2000環(huán)境下可在模擬DOS窗口下使用在教材配套的開發(fā)環(huán)境中使用了MASM615中的鏈接器74MASM615MASM615是微軟提供的匯編開發(fā)軟件包,以DMASM32免費軟件開發(fā)包MASM32是WINDOWS窗口應(yīng)用程序,可以非常方便地開發(fā)32位應(yīng)用程序。編輯器MASM6.14匯編程序32位增量式鏈接程序Win32的包含文件、庫文件MASM32是配套開發(fā)環(huán)境的主體為了使用方便,建議在桌面建立masm32的啟動圖標(biāo)75MASM32免費軟件開發(fā)包MASM32是WINDOWS窗口應(yīng)鏈接軟件MASM614中的鏈接軟件是段式可執(zhí)行程序鏈接器(SegmentedExecutableLinker),用于生成16位DOS程序,不能鏈接生成32位Windows應(yīng)用程序;MASM32中的連接器LINK.EXE是32位增量式鏈接器(incrementallinker)用于鏈接生成32位應(yīng)用程序76鏈接軟件MASM614中的鏈接軟件是段式可執(zhí)行程序鏈接器(S編寫源程序雙擊桌面上的,啟動MASM32編輯窗口,書寫源程序。輸入完畢之后,選擇菜單File/Save,彈出保存對話框,保存文件。匯編源程序的擴(kuò)展名是ASM在DOS模擬窗口中對源程序進(jìn)行匯編和連接77編寫源程序雙擊桌面上的,啟動MASM32編輯窗口,書寫源32位應(yīng)用程序的匯編連接7832位應(yīng)用程序的匯編連接78第1章習(xí)題:匯編語言基礎(chǔ)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章習(xí)題:匯編語言基礎(chǔ)1.1簡答題(1、3、6、7、8)第1章匯編語言基礎(chǔ)1.1英特爾80x86處理器1.2個人計算機(jī)系統(tǒng)1.3匯編語言程序格式第1章匯編語言基礎(chǔ)1.1英特爾80x86處理器第1章匯編語言基礎(chǔ)了解軟硬件開發(fā)環(huán)境熟悉通用寄存器和存儲器組織掌握匯編語言的 語句格式、程序框架和開發(fā)方法第1章匯編語言基礎(chǔ)了解軟硬件開發(fā)環(huán)境Intel80861.1英特爾80x86處理器8038680486奔騰奔騰II奔騰4802868086奔騰III酷睿多核系列4004IA-32處理器16位80x86處理器奔騰多核系列Intel64處理器82Intel80861.1英特爾80x86處理器803861.1.116位80x86處理器16位結(jié)構(gòu)處理器8086/8088指令系統(tǒng)提供16位基本指令集80186/80188增加若干條實用指令8086的工作方式是實方式(RealMode)80286增加保護(hù)方式(ProtectedMode)80286引入了系統(tǒng)指令為操作系統(tǒng)等核心程序提供處理器控制功能指令系統(tǒng)、指令集(InstructionSet)831.1.116位80x86處理器16位結(jié)構(gòu)處理器指令系統(tǒng)、1.1.2IA-32處理器80386引入英特爾32位指令集結(jié)構(gòu)ISA兼容原16位80286指令系統(tǒng)全面升級為32位提供虛擬8086工作方式(Virtual8086Mode)80486集成浮點處理單元支持浮點指令Pentium系列陸續(xù)增加若干整數(shù)指令、完善浮點指令增加一系列多媒體指令(SIMD指令)IA-32(IntelArchitecture-32)841.1.2IA-32處理器80386引入英特爾32位指令集1.1.3Intel64處理器引入64位英特爾指令集結(jié)構(gòu)兼容32位指令系統(tǒng)新增64位工作方式繼續(xù)豐富多媒體指令處理器集成多核(Multi-core)技術(shù)處理器進(jìn)入多核時代Manycore851.1.3Intel64處理器引入64位英特爾指令集結(jié)構(gòu)1.2個人計算機(jī)系統(tǒng)硬件(Hardware):物理設(shè)備軟件(Software):程序和文檔運算器
控制器寄存器組
主存儲器總線輸入輸出接口電路外部設(shè)備軟件微處理器微型計算機(jī)微型計算機(jī)系統(tǒng)861.2個人計算機(jī)系統(tǒng)硬件(Hardware):物理設(shè)備運算1.2.1硬件組成I/O接口主存儲器系統(tǒng)總線CPU寄存器控制器運算器輔助存儲器輸入設(shè)備輸出設(shè)備匯編語言程序員將硬件抽象為:寄存器、存儲器地址和輸入輸出地址871.2.1硬件組成主存儲器系統(tǒng)總線CPU寄存器控制器運算器1.2.2寄存器(Register)處理器內(nèi)部的高速存儲單元用于暫時存放程序執(zhí)行過程中的代碼和數(shù)據(jù)透明寄存器對應(yīng)用人員不可見、不能編程直接控制可編程(Programmable)寄存器具有引用名稱、供編程使用通用寄存器(General-PurposeRegister)具有多種用途數(shù)量較多、使用頻度較高專用寄存器各自只用于特定目的881.2.2寄存器(Register)處理器內(nèi)部的高速存儲單IA-32常用寄存器8個32位通用寄存器6個16位段寄存器1個32位標(biāo)志寄存器1個32位指令指針89IA-32常用寄存器8個32位通用寄存器101.通用寄存器處理器最常使用的整數(shù)通用寄存器可用于保存整數(shù)數(shù)據(jù)、地址等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.通用寄存器處理器最常使用的整數(shù)通用寄存器318716通用寄存器的名稱EAXAccumulator累加器EBXBase基址寄存器ECXCounter計數(shù)器EDXData數(shù)據(jù)寄存器ESISourceIndex源變址寄存器EDIDestinationIndex目的變址寄存器EBPBasePointer基址指針ESPStackPointer堆棧指針91通用寄存器的名稱EAXAccumulator累加器EBXBa2.標(biāo)志寄存器標(biāo)志(Flag)反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式用一個或多個二進(jìn)制位表示一種標(biāo)志用0和1的不同組合表達(dá)標(biāo)志的不同狀態(tài)8086支持16位標(biāo)志寄存器FLAGSIA-32處理器形成32位EFLAGS標(biāo)志寄存器狀態(tài)標(biāo)志:記錄指令執(zhí)行結(jié)果的輔助信息控制標(biāo)志:方向標(biāo)志DF,僅用于串操作指令系統(tǒng)標(biāo)志:控制操作系統(tǒng)或核心管理程序的操作方式示意圖922.標(biāo)志寄存器標(biāo)志(Flag)示意圖13標(biāo)志寄存器EFLAGS返回93標(biāo)志寄存器EFLAGS返回14處理器最基本的標(biāo)志:狀態(tài)標(biāo)志用來記錄指令執(zhí)行結(jié)果的輔助信息加減運算和邏輯運算指令主要設(shè)置它們其他有些指令的執(zhí)行也會相應(yīng)地設(shè)置它們處理器主要使用其中5個構(gòu)成各種條件,分支指令判斷這些條件實現(xiàn)程序分支8086的標(biāo)志OF111512DF10IF9TF8SF7ZF605AF403PF211CF094處理器最基本的標(biāo)志:狀態(tài)標(biāo)志用來記錄指令執(zhí)行結(jié)果的輔助信息83.指令指針寄存器EIP保存將要執(zhí)行的指令在主存的存儲器地址EIP是專用寄存器順序執(zhí)行時自動增量(加上該指令的字節(jié)數(shù)),指向下一條指令分支、調(diào)用等操作時執(zhí)行控制轉(zhuǎn)移指令修改,引起程序轉(zhuǎn)移到指定的指令執(zhí)行出現(xiàn)中斷或異常時被處理器賦值而相應(yīng)改變311615IP0EIP953.指令指針寄存器EIP保存將要執(zhí)行的指令在主存的存儲器地4.段寄存器段(Segment)是用于安排相關(guān)代碼或數(shù)據(jù)的一個主存區(qū)域段寄存器表明某個段在主存中的位置6個16位段寄存器:CSDSSSESFSGS應(yīng)用程序主要涉及3類段代碼段(CodeSegment) 存放程序中指令代碼數(shù)據(jù)段(DataSegment) 存放當(dāng)前運行程序所用數(shù)據(jù)堆棧段(StackSegment) 指明程序使用的堆棧區(qū)域主存空間指令段數(shù)據(jù)段堆棧段程序964.段寄存器段(Segment)是用于安排相關(guān)代碼或數(shù)據(jù)的1.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元每個存儲單元被編排一個號碼即存儲單元地址稱為存儲器地址(MemoryAddress)每個存儲單元以字節(jié)為基本存儲單位即字節(jié)編址(ByteAddressable)一個字節(jié)(Byte)等于8個二進(jìn)制位(Bit)二進(jìn)制位是計算機(jī)存儲信息的最小單位16位(2個字節(jié))構(gòu)成一個字(Word)32位(4個字節(jié))構(gòu)成一個雙字(DoubleWord)示意圖971.2.3存儲器組織主存儲器容量很大,被劃分成許多存儲單元數(shù)據(jù)的位格式返回D7D6D5D4D3D2D1D0字節(jié)LSBMSBD15……D1D0字LSBMSBD31……D1D0雙字LSBMSB31871615高字節(jié)低字節(jié)0字雙字98數(shù)據(jù)的位格式返回D7D6D5D4D3D2D1D0字節(jié)LSBM1.存儲模型物理存儲器以字節(jié)為基本存儲單位每個存儲單元被分配一個唯一的地址這個地址就是物理地址物理地址空間從0開始順序編排,直到處理器支持的最大存儲單元8086處理器支持1MB存儲器:00000H~FFFFFHIA-32處理器支持4GB存儲器:00000000H~FFFFFFFFH操作系統(tǒng)利用存儲管理單元進(jìn)行存儲管理,程序并不直接尋址物理存儲器IA-32處理器提供3種存儲模型,用于程序訪問存儲器示意圖991.存儲模型物理存儲器以字節(jié)為基本存儲單位示意圖20存儲器地址空間返回FFFFFFFFH00000000H00000001H00000002H00000003H00000004H雙字字節(jié)字字節(jié)字節(jié)字字節(jié)100存儲器地址空間返回FFFFFFFFH00000000H000IA-32處理器的存儲模型(1)平展存儲模型(FlatMemoryModel)存儲器是一個連續(xù)的地址空間:線性地址空間IA-32處理器支持4GB容量線性地址空間(2)段式存儲模型(SegmentedMemoryModel)存儲器由一組獨立的地址空間:段(Segment)每個段都可以達(dá)到4GB容量在處理器內(nèi)部,所有的段都被映射到線性地址空間(3)實地址存儲模型(Real-addressMemoryModel)8086處理器的存儲模型段式存儲模型的特例線性地址空間最大為1MB容量,段最大為64KB101IA-32處理器的存儲模型(1)平展存儲模型(FlatMe2.工作方式(1)保護(hù)方式(ProtectedMode)IA-32處理器固有的工作狀態(tài)具有強(qiáng)大的段頁式存儲管理和特權(quán)與保護(hù)能力使用全部32條地址總線,可尋址4GB物理存儲器使用平展或段式存儲模型利用虛擬8086方式支持實地址8086軟件(2)實地址方式(Real-addressMode)可以進(jìn)行32位處理的快速8086只能尋址1MB物理存儲器空間,每個段不超過64KB可以使用32位寄存器、32位操作數(shù)和32位尋址方式只能支持實地址存儲模型(3)系統(tǒng)管理方式(SystemManagementMode)實現(xiàn)供節(jié)能和系統(tǒng)安全管理1022.工作方式(1)保護(hù)方式(ProtectedMode)3.邏輯地址(LogicalAddress)在處理器內(nèi)部、程序員編程時采用的地址邏輯地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距離段基地址的位移量某個存儲單元可以有多個邏輯地址,但只有一個唯一的物理地址邏輯地址線性地址物理地址編程使用處理器轉(zhuǎn)換地址總線輸出示意圖1033.邏輯地址(LogicalAddress)在處理器內(nèi)部邏輯地址與物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221邏輯地址=相對地址:205(2層05號房間)物理地址=絕對地址:15(第15號房間)104邏輯地址與物理地址返回1082083081062063061基本段的邏輯地址代碼段(CodeSegment)段基地址:代碼段寄存器CS指示偏移地址:指令指針寄存器EIP保存數(shù)據(jù)段(DataSegment)段基地址:數(shù)據(jù)段寄存器DS指示有時也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各種存儲器尋址方式計算出來堆棧段(StackSegment)段基地址:堆棧段寄存器SS指示偏移地址:堆棧指針寄存器ESP保存主存空間指令段數(shù)據(jù)段堆棧段程序105基本段的邏輯地址代碼段(CodeSegment)主存空間指4.段選擇器16位段寄存器保存16位段選擇器段選擇器指向64位段描述符(Descriptor)段描述符包括段基地址平展存儲模型:指向地址0位置段式存儲模型:指向線性地址空間不同的段實地址存儲模型:保存段基地址的高16位段選擇器段基地址數(shù)據(jù)或指令段寄存器段描述符主存空間1064.段選擇器16位段寄存器保存16位段選擇器段選擇器段基地平展模型平展存儲模型是分段存儲模型的一種特例所有的段都有相同的段基地址(基地址為0),都重合于同一個線性地址空間IA-32微處理器上運行的應(yīng)用程序,廣泛采用平展存儲模型。107平展模型平展存儲模型是分段存儲模型的一種特例28分頁機(jī)制不采用分頁管理機(jī)制,線性地址就是對應(yīng)的物理地址空間采用了分頁管理機(jī)制,則要將線性空間地址映射到物理地址當(dāng)微處理器既采用段式存儲管理,又采用頁式存儲管理就是段頁式存儲管理方式108分頁機(jī)制不采用分頁管理機(jī)制,線性地址就是對應(yīng)的物理地址空間分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表偏移量入口頁目錄頁表入口段1段2
段3頁+109分頁線性地址空間頁物理地址物理地址空間線性地址頁目錄頁表存儲器模型與工作模式
保護(hù)模式工作模式實模式虛擬8086模式平展模型存儲器模型實地址模型分段模型段頁模型110存儲器模型與工作模式
保護(hù)模式工作模式實模式虛擬8086模5.Win32的虛擬地址分配應(yīng)用程序起始地址1115.Win32的虛擬地址分配應(yīng)用程序起始地址321.2.4程序設(shè)計語言機(jī)器語言(MachineLanguage)底層的計算機(jī)語言,對應(yīng)機(jī)器指令形成目標(biāo)(代碼)程序匯編語言(AssemblyLanguage)將機(jī)器指令用助記符號代替而形成的一種語言本質(zhì)上是機(jī)器語言需要匯編程序“匯編”(翻譯)高級語言(HighLevelLanguage)面向問題的程序設(shè)計語言需要“編譯”或“解釋”后執(zhí)行指令是處理器的母語moveax,100addeax,2561121.2.4程序設(shè)計語言機(jī)器語言(MachineLanguInstructions:LanguageoftheMachine
Tocommandacomputer'shardware,youmustspeakitslanguage.Thewordsofamachine'slanguagearecalledinstructions,anditsvocabularyiscalledaninstructionset.
為了控制計算機(jī)硬件,必須使用它的語言。機(jī)器語言的單詞稱為指令,它的詞匯表稱為指令集。“ComputerOrganization&Design --TheHardware/SoftwareInterface(2ndEdition)”byJohnL.HennessyandDavidA.PattersonMorganKaufmannPublishers,Inc.1998返回113Instructions:Languageofthe匯編語言和高級語言的比較匯編語言與處理器密切相關(guān),可移植性較差高級語言與具體計算機(jī)無關(guān),便于移植匯編語言功能有限、涉及硬件細(xì)節(jié),編寫繁瑣困難高級語言功能強(qiáng)大,語法自然,容易掌握和應(yīng)用匯編語言的優(yōu)勢:直接、有效地控制硬件,容易產(chǎn)生運行速度快、指令序列短小的高效率目標(biāo)程序高級語言不易直接控制計算機(jī)的各種操作,編譯程序產(chǎn)生的目標(biāo)程序往往比較龐大混合編程、取長補(bǔ)短?學(xué)習(xí)匯編語言的意義114匯編語言和高級語言的比較匯編語言與處理器密切相關(guān),可移植性較匯編語言的主要應(yīng)用場合程序要具有較快的執(zhí)行時間,或者只能占用較小的存儲容量程序與計算機(jī)硬件密切相關(guān),程序要直接、有效地控制硬件大型軟件需要提高性能、優(yōu)化處理的部分沒有合適的高級語言、或只能采用匯編語言的時候分析具體系統(tǒng)尤其是該系統(tǒng)的低層軟件、加密解密軟件、分析和防治計算機(jī)病毒等等115匯編語言的主要應(yīng)用場合程序要具有較快的執(zhí)行時間,或者只能占用1.2.5軟件系統(tǒng)Windows操作系統(tǒng)平臺MASM6.15匯編程序硬件BIOS應(yīng)用程序*.ASM,*.OBJ*.LST,*.EXE操作系統(tǒng)編輯程序,匯編程序連接程序,調(diào)試程序1161.2.5軟件系統(tǒng)Windows操作系統(tǒng)平臺硬件BIOS應(yīng)1.操作系統(tǒng)(OperatingSystem)操作系統(tǒng)管理著系統(tǒng)的軟硬件資源為用戶提供使用機(jī)器的交互界面為程序員使用資源提供可供調(diào)用的驅(qū)動程序為其他程序構(gòu)建穩(wěn)定的運行平臺32位控制臺環(huán)境%SystemRoot%\system32\cmd.exe16位模擬DOS環(huán)境%SystemRoot%\system32\32位控制臺環(huán)境和16位模擬DOS環(huán)境兩種基本功能和界面一致,但本質(zhì)不同1171.操作系統(tǒng)(OperatingSystem)操作系統(tǒng)管2.匯編程序(Assembler)將匯編語言源程序轉(zhuǎn)換為機(jī)器代碼微軟宏匯編程序MASMMASM6.11是最后一個獨立發(fā)行的MASM軟件包MASM6.15來自VisualC++6.0,支持到Pentium4的SSE2指令系統(tǒng)VisualC++.NET2005提供支持SSE3指令的MASM8.0支持64位指令的ML64.EXE程序匯編語言程序與匯編程序是兩個不同的概念1182.匯編程序(Assembler)將匯編語言源程序轉(zhuǎn)換為機(jī)3.文件路徑目錄(Directory):管理磁盤上文件的文件夾路徑(Path):分區(qū):\根目錄\子目錄\文件名絕對路徑:文件的完整路徑d:\masm\progs\eg0101.asm相對路徑:相對當(dāng)前目錄的路徑progs\eg0101.asm..\bin\ml.exe轉(zhuǎn)換分區(qū)d:進(jìn)入當(dāng)前目錄(CurrentDirectory)cd\masm1193.文件路徑目錄(Directory):管理磁盤上文件的文4.內(nèi)部命令和外部命令內(nèi)部命令:32位控制臺或DOS環(huán)境本身具有的、直接支持的命令,即駐留主存的命令使用方法:命令關(guān)鍵字參數(shù)選項外部命令:與其他可執(zhí)行文件一樣,以文件形式保存在磁盤上的命令執(zhí)行方法:路徑\文件名參數(shù)路徑搜索順序先當(dāng)前目錄后搜索路徑內(nèi)部命令PATH查看和設(shè)置當(dāng)前的搜索路徑你所執(zhí)行的命令不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件?1204.內(nèi)部命令和外部命令內(nèi)部命令:32位控制臺或DOS環(huán)境本5.進(jìn)入MASM目錄的批處理文件為便于進(jìn)入MASM目錄,可創(chuàng)建批處理文件32位Windows控制臺:WIN32.BAT
16位DOS環(huán)境:DOS16.BAT為便于訪問其中文件,增加搜索路徑:@setPATH=D:\MASM;D:\MASM\BIN;%PATH%在Windows資源管理器打開文件夾“D:\MASM”,雙擊該批處理文件,就可以進(jìn)入MASM環(huán)境1215.進(jìn)入MASM目錄的批處理文件為便于進(jìn)入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匯編語言程序格式程序用程序設(shè)計語言編寫,由指令構(gòu)成指令由操作碼和操作數(shù)(地址碼)組成操作碼(Opcode)表明處理器執(zhí)行的操作例如數(shù)據(jù)傳送、加法運算、跳轉(zhuǎn)等操作。操作數(shù)(Operand)是參與操作的數(shù)據(jù)對象主要以寄存器名或地址形式指明數(shù)據(jù)的來源通常的指令都有一個或兩個操作數(shù)有些指令無操作數(shù),個別指令有3或4個操作數(shù)多數(shù)操作數(shù)需要顯式指明,有些操作數(shù)隱含使用1231.3匯編語言程序格式程序用程序設(shè)計語言編寫,由指令構(gòu)成41.3.1指令的代碼格式(InstructionFormat)IA-32處理器采用可變長度指令格式操作碼可選的指令前綴(用于擴(kuò)展指令功能)1~3字節(jié)的主要操作碼操作數(shù)可選的尋址方式域(包括ModR/M和SIB字段)可選的位移量可選的立即數(shù)1241.3.1指令的代碼格式(InstructionForm使用最多、最基本的數(shù)據(jù)傳送指令傳送指令的助記符:MOV(取自Move)將數(shù)據(jù)從一個位置傳送到另一個位置類似高級語言的賦值語句
movdest,src;源操作數(shù)src:被傳送的數(shù)據(jù)或數(shù)據(jù)所在的位置;目的操作數(shù)dest:數(shù)據(jù)將要傳送到的位置moveax,ebx ;機(jī)器代碼:8BC3moveax,[ebx] ;機(jī)器代碼:8B03moveax,[ebx+esi*4+80h] ;機(jī)器代碼:8B84B380000000功能演示125使用最多、最基本的數(shù)據(jù)傳送指令傳送指令的助記符:MOV(取自傳送指令MOV的功能演示返回源操作數(shù)src目的操作數(shù)dest30H30H被傳送的數(shù)據(jù)126傳送指令MOV的功能演示返回源操作數(shù)src目的操作數(shù)de1.3.2語句格式源程序由語句組成一個語句常占一行(MASM有續(xù)行符“\”)一個語句不超過132個字符,4個部分執(zhí)行性語句:表達(dá)處理器指令(硬指令)標(biāo)號:硬指令助記符
操作數(shù),操作數(shù) ;注釋說明性語句:表達(dá)偽指令,控制匯編方式名字
偽指令助記符
參數(shù),參數(shù),……;注釋這是MASM語法,但具有一般性1271.3.2語句格式源程序由語句組成這是MASM語法,但具有1.標(biāo)號與名字標(biāo)號:執(zhí)行性語句中冒號分隔表示處理器指令在主存中的邏輯地址指示分支、循環(huán)等程序的目的地址名字:說明性語句中空格或制表符分隔變量名、段名、子程序名等反映變量、段和子程序等的邏輯地址標(biāo)號和名字是用戶自定義的標(biāo)識符1281.標(biāo)號與名字標(biāo)號:執(zhí)行性語句中標(biāo)號和名字是用戶自定義的標(biāo)標(biāo)識符(Identifier)最多由31個字母、數(shù)字及規(guī)定的特殊符號(如_、$、?、@)組成,不能以數(shù)字開頭一個源程序中,用戶定義的每個標(biāo)識符必須唯一不能是匯編程序采用的保留字保留字(ReservedWord)是編程語言本身需要使用的各種具有特定含義的標(biāo)識符、也稱為關(guān)鍵字硬指令助記符:MOV偽指令助記符:BYTE操作符:OFFSET寄存器名:EAX取名原則類似高級語言但默認(rèn)不區(qū)別大小寫字母129標(biāo)識符(Identifier)最多由31個字母、數(shù)字及規(guī)定的2.助記符助記符是幫助記憶指令功能的符號硬指令助記符表示處理器指令偽指令助記符表達(dá)一個匯編命令處理器指令示例:傳送指令MOV偽指令示例:字節(jié)變量定義助記符:BYTE
(或DB)功能:在主存中占用若干的存儲空間,用于保存變量值,該變量以字節(jié)為單位存取msg
byte
'Hello,Assembly!',13,10,01302.助記符助記符是幫助記憶指令功能的符號msgbyt3.操作數(shù)和參數(shù)處理器指令的操作數(shù):表示參與操作的對象具體的常量保存在寄存器的數(shù)據(jù)保存在存儲器中的變量逗號前常是目的操作數(shù),逗號后常是源操作數(shù)偽指令的參數(shù):常量、變量名、表達(dá)式等可以有多個,參數(shù)之間用逗號分隔msg
byte
'Hello,Assembly!',13,10,0mov
eax,offsetmsg1313.操作數(shù)和參數(shù)處理器指令的操作數(shù):表示參與操作的對象ms4.注釋和分隔符語句中分號后的內(nèi)容是注釋對指令或程序進(jìn)行說明匯編程序不對它們做任何處理注釋利于閱讀,應(yīng)養(yǎng)成書寫注釋的好習(xí)慣語句的4個組成部分要用分隔符分開標(biāo)號后的冒號注釋前的分號操作數(shù)間和參數(shù)間的逗號分隔其他部分采用一個或多個空格或制表符注釋使用英文或中文均可分隔符都是英文標(biāo)點良好的語句格式有利于編程1324.注釋和分隔符語句中分號后的內(nèi)容是注釋分隔符都是英文標(biāo)點1.3.3源程序框架;eg0000.asminWindowsConsole includeio32.inc ;包含32位輸入輸出文件
.data ;定義數(shù)據(jù)段
…… ;數(shù)據(jù)定義(數(shù)據(jù)待填)
.code ;定義代碼段start: ;程序執(zhí)行起始位置
…… ;主程序(指令待填)
exit0(或ret) ;程序正常執(zhí)行結(jié)束
…… ;子程序(指令待填)
endstart ;匯編結(jié)束1331.3.3源程序框架;eg0000.asminWind1.包含偽指令I(lǐng)NCLUDE將常用的常量定義、過程說明
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級下科學(xué)教學(xué)設(shè)計-磁鐵有磁性-教科版
- 2024秋五年級英語上冊 Unit 6 In a nature park Part B 第一課時教學(xué)設(shè)計 人教PEP
- Unit 6 Meet my family單元整體(教學(xué)設(shè)計)-2024-2025學(xué)年join in外研劍橋英語三年級上冊
- 9那一定會很好(教案)-2024-2025學(xué)年語文三年級上冊統(tǒng)編版
- 三年級信息技術(shù)上冊 第2課 初識電腦教學(xué)設(shè)計 閩教版
- 20精彩極了“和”糟糕透了(教學(xué)設(shè)計)-2024-2025學(xué)年統(tǒng)編版語文五年級上冊
- 物理壓強(qiáng)知識總結(jié)
- 一年級品德與社會下冊 我的身體教學(xué)設(shè)計 未來版
- 11《拆裝玩具》教學(xué)設(shè)計-2024-2025學(xué)年人教鄂教版(2024)科學(xué)一年級上冊
- Unit 8 Lesson 5 Grammar in Use教案 2024-2025學(xué)年仁愛科普版英語七年級下冊
- 第二節(jié)歐洲西部24
- 工程項目管理(第五版)第三章
- 客戶受電工程竣工檢驗意見書(南網(wǎng))
- 多媒體課件制作流程圖
- MT_T 695-1997 煤礦用高倍數(shù)泡沫滅火劑通用技術(shù)條件_(高清版)
- 《商業(yè)發(fā)票》word版
- 土地使用權(quán)(住宅用地)市場比較法評估測算表
- DFMEA全解(完整版)
- 《教案封面設(shè)計》word版
- 奧迪A4L汽車驅(qū)動橋的結(jié)構(gòu)設(shè)計畢業(yè)設(shè)計
- (最新整理)世界水利發(fā)展史
評論
0/150
提交評論