匯編語(yǔ)言基礎(chǔ)_第1頁(yè)
匯編語(yǔ)言基礎(chǔ)_第2頁(yè)
匯編語(yǔ)言基礎(chǔ)_第3頁(yè)
匯編語(yǔ)言基礎(chǔ)_第4頁(yè)
匯編語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

控制器寄存器組

主存儲(chǔ)器總線輸入輸出接口電路外部設(shè)備軟件微處理器微型計(jì)算機(jī)微型計(jì)算機(jī)系統(tǒng)71.2.1硬件組成I/O接口主存儲(chǔ)器系統(tǒng)總線CPU寄存器控制器運(yùn)算器輔助存儲(chǔ)器輸入設(shè)備輸出設(shè)備匯編語(yǔ)言程序員將硬件抽象為:寄存器、存儲(chǔ)器地址和輸入輸出地址81.2.2寄存器(Register)處理器內(nèi)部的高速存儲(chǔ)單元用于暫時(shí)存放程序執(zhí)行過(guò)程中的代碼和數(shù)據(jù)透明寄存器對(duì)應(yīng)用人員不可見、不能編程直接控制可編程(Programmable)寄存器具有引用名稱、供編程使用通用寄存器(General-PurposeRegister)具有多種用途數(shù)量較多、使用頻度較高專用寄存器各自只用于特定目的9IA-32常用寄存器8個(gè)32位通用寄存器6個(gè)16位段寄存器1個(gè)32位標(biāo)志寄存器1個(gè)32位指令指針101.通用寄存器處理器最常使用的整數(shù)通用寄存器可用于保存整數(shù)數(shù)據(jù)、地址等8個(gè)32位通用寄存器EAX,EBX,ECX,EDXESI,EDI,EBP,ESP8個(gè)16位通用寄存器AX,BX,CX,DXSI,DI,BP,SP8個(gè)8位通用寄存器AH,BH,CH,DHAL,BL,CL,DL31871615AHAL0AXEAX既是一個(gè)整體又可獨(dú)立使用11通用寄存器的名稱EAXAccumulator累加器EBXBase基址寄存器ECXCounter計(jì)數(shù)器EDXData數(shù)據(jù)寄存器ESISourceIndex源變址寄存器EDIDestinationIndex目的變址寄存器EBPBasePointer基址指針ESPStackPointer堆棧指針122.標(biāo)志寄存器標(biāo)志(Flag)反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式用一個(gè)或多個(gè)二進(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)或核心管理程序的操作方式示意圖13標(biāo)志寄存器EFLAGS返回14處理器最基本的標(biāo)志:狀態(tài)標(biāo)志用來(lái)記錄指令執(zhí)行結(jié)果的輔助信息加減運(yùn)算和邏輯運(yùn)算指令主要設(shè)置它們其他有些指令的執(zhí)行也會(huì)相應(yīng)地設(shè)置它們處理器主要使用其中5個(gè)構(gòu)成各種條件,分支指令判斷這些條件實(shí)現(xiàn)程序分支8086的標(biāo)志OF111512DF10IF9TF8SF7ZF605AF403PF211CF0153.指令指針寄存器EIP保存將要執(zhí)行的指令在主存的存儲(chǔ)器地址EIP是專用寄存器順序執(zhí)行時(shí)自動(dòng)增量(加上該指令的字節(jié)數(shù)),指向下一條指令分支、調(diào)用等操作時(shí)執(zhí)行控制轉(zhuǎn)移指令修改,引起程序轉(zhuǎn)移到指定的指令執(zhí)行出現(xiàn)中斷或異常時(shí)被處理器賦值而相應(yīng)改變311615IP0EIP164.段寄存器段(Segment)是用于安排相關(guān)代碼或數(shù)據(jù)的一個(gè)主存區(qū)域段寄存器表明某個(gè)段在主存中的位置6個(gè)16位段寄存器:CSDSSSESFSGS應(yīng)用程序主要涉及3類段代碼段(CodeSegment) 存放程序中指令代碼數(shù)據(jù)段(DataSegment) 存放當(dāng)前運(yùn)行程序所用數(shù)據(jù)堆棧段(StackSegment) 指明程序使用的堆棧區(qū)域主存空間指令段數(shù)據(jù)段堆棧段程序171.2.3存儲(chǔ)器組織主存儲(chǔ)器容量很大,被劃分成許多存儲(chǔ)單元每個(gè)存儲(chǔ)單元被編排一個(gè)號(hào)碼即存儲(chǔ)單元地址稱為存儲(chǔ)器地址(MemoryAddress)每個(gè)存儲(chǔ)單元以字節(jié)為基本存儲(chǔ)單位即字節(jié)編址(ByteAddressable)一個(gè)字節(jié)(Byte)等于8個(gè)二進(jìn)制位(Bit)二進(jìn)制位是計(jì)算機(jī)存儲(chǔ)信息的最小單位16位(2個(gè)字節(jié))構(gòu)成一個(gè)字(Word)32位(4個(gè)字節(jié))構(gòu)成一個(gè)雙字(DoubleWord)示意圖18數(shù)據(jù)的位格式返回D7D6D5D4D3D2D1D0字節(jié)LSBMSBD15……D1D0字LSBMSBD31……D1D0雙字LSBMSB31871615高字節(jié)低字節(jié)0字雙字191.存儲(chǔ)模型物理存儲(chǔ)器以字節(jié)為基本存儲(chǔ)單位每個(gè)存儲(chǔ)單元被分配一個(gè)唯一的地址這個(gè)地址就是物理地址物理地址空間從0開始順序編排,直到處理器支持的最大存儲(chǔ)單元8086處理器支持1MB存儲(chǔ)器:00000H~FFFFFHIA-32處理器支持4GB存儲(chǔ)器:00000000H~FFFFFFFFH操作系統(tǒng)利用存儲(chǔ)管理單元進(jìn)行存儲(chǔ)管理,程序并不直接尋址物理存儲(chǔ)器IA-32處理器提供3種存儲(chǔ)模型,用于程序訪問存儲(chǔ)器示意圖20存儲(chǔ)器地址空間返回FFFFFFFFH00000000H00000001H00000002H00000003H00000004H雙字字節(jié)字字節(jié)字節(jié)字字節(jié)21IA-32處理器的存儲(chǔ)模型(1)平展存儲(chǔ)模型(FlatMemoryModel)存儲(chǔ)器是一個(gè)連續(xù)的地址空間:線性地址空間IA-32處理器支持4GB容量線性地址空間(2)段式存儲(chǔ)模型(SegmentedMemoryModel)存儲(chǔ)器由一組獨(dú)立的地址空間:段(Segment)每個(gè)段都可以達(dá)到4GB容量在處理器內(nèi)部,所有的段都被映射到線性地址空間(3)實(shí)地址存儲(chǔ)模型(Real-addressMemoryModel)8086處理器的存儲(chǔ)模型段式存儲(chǔ)模型的特例線性地址空間最大為1MB容量,段最大為64KB222.工作方式(1)保護(hù)方式(ProtectedMode)IA-32處理器固有的工作狀態(tài)具有強(qiáng)大的段頁(yè)式存儲(chǔ)管理和特權(quán)與保護(hù)能力使用全部32條地址總線,可尋址4GB物理存儲(chǔ)器使用平展或段式存儲(chǔ)模型利用虛擬8086方式支持實(shí)地址8086軟件(2)實(shí)地址方式(Real-addressMode)可以進(jìn)行32位處理的快速8086只能尋址1MB物理存儲(chǔ)器空間,每個(gè)段不超過(guò)64KB可以使用32位寄存器、32位操作數(shù)和32位尋址方式只能支持實(shí)地址存儲(chǔ)模型(3)系統(tǒng)管理方式(SystemManagementMode)實(shí)現(xiàn)供節(jié)能和系統(tǒng)安全管理233.邏輯地址(LogicalAddress)在處理器內(nèi)部、程序員編程時(shí)采用的地址邏輯地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距離段基地址的位移量某個(gè)存儲(chǔ)單元可以有多個(gè)邏輯地址,但只有一個(gè)唯一的物理地址邏輯地址線性地址物理地址編程使用處理器轉(zhuǎn)換地址總線輸出示意圖24邏輯地址與物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221邏輯地址=相對(duì)地址:205(2層05號(hào)房間)物理地址=絕對(duì)地址:15(第15號(hào)房間)25基本段的邏輯地址代碼段(CodeSegment)段基地址:代碼段寄存器CS指示偏移地址:指令指針寄存器EIP保存數(shù)據(jù)段(DataSegment)段基地址:數(shù)據(jù)段寄存器DS指示有時(shí)也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各種存儲(chǔ)器尋址方式計(jì)算出來(lái)堆棧段(StackSegment)段基地址:堆棧段寄存器SS指示偏移地址:堆棧指針寄存器ESP保存主存空間指令段數(shù)據(jù)段堆棧段程序264.段選擇器16位段寄存器保存16位段選擇器段選擇器指向64位段描述符(Descriptor)段描述符包括段基地址平展存儲(chǔ)模型:指向地址0位置段式存儲(chǔ)模型:指向線性地址空間不同的段實(shí)地址存儲(chǔ)模型:保存段基地址的高16位段選擇器段基地址數(shù)據(jù)或指令段寄存器段描述符主存空間275.Win32的虛擬地址分配應(yīng)用程序起始地址281.2.4程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言(MachineLanguage)底層的計(jì)算機(jī)語(yǔ)言,對(duì)應(yīng)機(jī)器指令形成目標(biāo)(代碼)程序匯編語(yǔ)言(AssemblyLanguage)將機(jī)器指令用助記符號(hào)代替而形成的一種語(yǔ)言本質(zhì)上是機(jī)器語(yǔ)言需要匯編程序“匯編”(翻譯)高級(jí)語(yǔ)言(HighLevelLanguage)面向問題的程序設(shè)計(jì)語(yǔ)言需要“編譯”或“解釋”后執(zhí)行指令是處理器的母語(yǔ)moveax,100addeax,25629Instructions:LanguageoftheMachine

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

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

16位DOS環(huán)境:DOS16.BAT為便于訪問其中文件,增加搜索路徑:@setPATH=D:\MASM;D:\MASM\BIN;%PATH%在Windows資源管理器打開文件夾“D:\MASM”,雙擊該批處理文件,就可以進(jìn)入MASM環(huán)境38具有搜索路徑的批處理文件返回@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.BAT391.3匯編語(yǔ)言程序格式程序用程序設(shè)計(jì)語(yǔ)言編寫,由指令構(gòu)成指令由操作碼和操作數(shù)(地址碼)組成操作碼(Opcode)表明處理器執(zhí)行的操作例如數(shù)據(jù)傳送、加法運(yùn)算、跳轉(zhuǎn)等操作。操作數(shù)(Operand)是參與操作的數(shù)據(jù)對(duì)象主要以寄存器名或地址形式指明數(shù)據(jù)的來(lái)源通常的指令都有一個(gè)或兩個(gè)操作數(shù)有些指令無(wú)操作數(shù),個(gè)別指令有3或4個(gè)操作數(shù)多數(shù)操作數(shù)需要顯式指明,有些操作數(shù)隱含使用401.3.1指令的代碼格式(InstructionFormat)IA-32處理器采用可變長(zhǎng)度指令格式操作碼可選的指令前綴(用于擴(kuò)展指令功能)1~3字節(jié)的主要操作碼操作數(shù)可選的尋址方式域(包括ModR/M和SIB字段)可選的位移量可選的立即數(shù)41使用最多、最基本的數(shù)據(jù)傳送指令傳送指令的助記符:MOV(取自Move)將數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置類似高級(jí)語(yǔ)言的賦值語(yǔ)句

mov

dest,src;源操作數(shù)src:被傳送的數(shù)據(jù)或數(shù)據(jù)所在的位置;目的操作數(shù)dest:數(shù)據(jù)將要傳送到的位置mov

eax,ebx ;機(jī)器代碼:8BC3mov

eax,[ebx] ;機(jī)器代碼:8B03mov

eax,[ebx+esi*4+80h] ;機(jī)器代碼:8B84B3800000

00功能演示42傳送指令MOV的功能演示返回源操作數(shù)src目的操作數(shù)dest30H30H被傳送的數(shù)據(jù)431.3.2語(yǔ)句格式源程序由語(yǔ)句組成一個(gè)語(yǔ)句常占一行(MASM有續(xù)行符“\”)一個(gè)語(yǔ)句不超過(guò)132個(gè)字符,4個(gè)部分執(zhí)行性語(yǔ)句:表達(dá)處理器指令(硬指令)標(biāo)號(hào):硬指令助記符

操作數(shù),操作數(shù) ;注釋說(shuō)明性語(yǔ)句:表達(dá)偽指令,控制匯編方式名字

偽指令助記符

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

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

byte

'Hello,Assembly!',13,10,0473.操作數(shù)和參數(shù)處理器指令的操作數(shù):表示參與操作的對(duì)象具體的常量保存在寄存器的數(shù)據(jù)保存在存儲(chǔ)器中的變量逗號(hào)前常是目的操作數(shù),逗號(hào)后常是源操作數(shù)偽指令的參數(shù):常量、變量名、表達(dá)式等可以有多個(gè),參數(shù)之間用逗號(hào)分隔msg

byte

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

eax,offset

msg484.注釋和分隔符語(yǔ)句中分號(hào)后的內(nèi)容是注釋對(duì)指令或程序進(jìn)行說(shuō)明匯編程序不對(duì)它們做任何處理注釋利于閱讀,應(yīng)養(yǎng)成書寫注釋的好習(xí)慣語(yǔ)句的4個(gè)組成部分要用分隔符分開標(biāo)號(hào)后的冒號(hào)注釋前的分號(hào)操作數(shù)間和參數(shù)間的逗號(hào)分隔其他部分采用一個(gè)或多個(gè)空格或制表符注釋使用英文或中文均可分隔符都是英文標(biāo)點(diǎn)良好的語(yǔ)句格式有利于編程491.3.3源程序框架;eg0000.asminWindowsConsole includeio32.inc ;包含32位輸入輸出文件

.data ;定義數(shù)據(jù)段

…… ;數(shù)據(jù)定義(數(shù)據(jù)待填)

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

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

exit0 ;程序正常執(zhí)行結(jié)束

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

endstart ;匯編結(jié)束501.包含偽指令I(lǐng)NCLUDE將常用的常量定義、過(guò)程說(shuō)明、共享的子程序庫(kù)等內(nèi)容進(jìn)行聲明(相當(dāng)于C和C++語(yǔ)言中,包含頭文件的作用)IO32.INC是配合本書的包含文件前3個(gè)語(yǔ)句:.686 ;32位指令.modelflat,stdcall ;選擇平展模型,標(biāo)準(zhǔn)調(diào)用規(guī)范

optioncasemap:none ;告知MASM區(qū)分用戶定義標(biāo)識(shí)符的大小寫512.段的簡(jiǎn)化定義數(shù)據(jù)段定義偽指令.DATA創(chuàng)建一個(gè)數(shù)據(jù)段代碼段定義偽指令.CODE創(chuàng)建一個(gè)代碼段堆棧段由Windows維護(hù),用戶不必設(shè)置程序開始執(zhí)行的位置應(yīng)用一個(gè)標(biāo)號(hào)(例如:START)匯編結(jié)束END指令的參數(shù)應(yīng)用程序執(zhí)行結(jié)束語(yǔ)句“EXIT0”將控制權(quán)交還操作系統(tǒng)提供給操作系統(tǒng)一個(gè)返回代碼通常用0表示執(zhí)行正確源程序匯編結(jié)束END語(yǔ)句執(zhí)行結(jié)束≠匯編結(jié)束52〔例1-1〕信息顯示程序在數(shù)據(jù)段給出這個(gè)字符串形式的信息:

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

;代碼段

mov

eax,offset

msg ;指定字符串的偏移地址

calldispmsg ;調(diào)用I/O子程序顯示信息完整程序53匯編語(yǔ)言源程序EG0101.ASM;eg0101.asm

includeio32.inc

.data ;數(shù)據(jù)段msg byte'Hello,Assembly!',13,10,0

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

mov

eax,offset

msg calldispmsg

exit0 ;程序正常執(zhí)行結(jié)束

endstart ;匯編結(jié)束返回Hello,Assembly!運(yùn)行結(jié)果對(duì)比54信息顯示的C語(yǔ)言源程序#include<stdio.h>intmain(){

printf("Hello,world!\n"); exit(0);}返回Hello,world!運(yùn)行結(jié)果553.輸入輸出子程序庫(kù)匯編程序通常不提供任何函數(shù)或程序庫(kù)必須利用操作系統(tǒng)的編程資源本書配套鍵盤輸入和顯示器輸出的I/O子程序含IO32.INC和IO32.LIB,需要包含文件聲明源程序文件開始使用包含命令聲明INCLUDEIO32.INC子程序調(diào)用方法MOVEAX,入口參數(shù)CALL子程序名子程序名DISPMSG入口參數(shù)EAX=字符串地址功能說(shuō)明顯示字符串(以0結(jié)尾)輸入子程序輸出子程序56常用輸出子程序返回子程序名功能說(shuō)明DISPMSG顯示字符串(以0結(jié)尾)DISPC顯示一個(gè)字符DISPCRLF光標(biāo)回車換行,到下一行首個(gè)位置DISPRD顯示8個(gè)32位通用寄存器內(nèi)容DISPRF顯示6個(gè)狀態(tài)標(biāo)志的狀態(tài)DISPHD以十六進(jìn)制形式顯示8位數(shù)據(jù)DISPUID顯示無(wú)符號(hào)十進(jìn)制整數(shù)DISPSID顯示有符號(hào)十進(jìn)制整數(shù)57常用輸入子程序返回子程序名功能說(shuō)明READMSG輸入一個(gè)字符串(回車結(jié)束)READC輸入一個(gè)字符(回顯)READHD輸入8位十六進(jìn)制數(shù)據(jù)READUID輸入無(wú)符號(hào)十進(jìn)制整數(shù)(≤232-1)READSID輸入有符號(hào)十進(jìn)制整數(shù)(-231~231-1)581.3.4開發(fā)過(guò)程591.開發(fā)軟件抽取MASM6.11和VisualC++6.0集成開發(fā)環(huán)境中有關(guān)文件構(gòu)造基本開發(fā)軟件包MASM主目錄:I/O庫(kù)、包含文件及批處理文件BIN子目錄:進(jìn)行匯編、連接及配套程序文件WINDBG子目錄:調(diào)試程序WinDbg.EXE默認(rèn)安裝到D分區(qū)的MASM目錄快速開發(fā)方法

①進(jìn)入MASM目錄雙擊批處理文件WIN32.BAT

②生成可執(zhí)行文件MAKE32eg0101快速開發(fā)過(guò)程60快速開發(fā)過(guò)程返回感性認(rèn)識(shí)因直觀而印象深刻612.源程序的編輯源程序文件是無(wú)格式文件、純文本類型以ASM為擴(kuò)展名,可使用任何文本編輯器Windows的記事本Notepad其他程序開發(fā)工具中的編輯環(huán)境專注于源程序編寫的編輯軟件,例如UltraEdit32本書配套開發(fā)軟件M

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論