微機原理32位微機02章_第1頁
微機原理32位微機02章_第2頁
微機原理32位微機02章_第3頁
微機原理32位微機02章_第4頁
微機原理32位微機02章_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章

處理器結(jié)構(gòu)2.1處理器功能結(jié)構(gòu)2.2寄存器2.3存儲器組織2.4匯編語言基礎(chǔ)2.5數(shù)據(jù)尋址方式了解處理器的基本結(jié)構(gòu)熟悉8086、80386和Pentium處理器的結(jié)構(gòu)掌握IA-32常用寄存器的名稱和作用掌握狀態(tài)標志和控制標志的意義理解IA-32的存儲器模型和工作方式掌握基本段、邏輯地址和物理地址掌握邏輯地址轉(zhuǎn)換為物理地址的方法理解匯編語言的語句格式和程序格式掌握匯編語言程序的開發(fā)方法掌握數(shù)據(jù)尋址方式及其應(yīng)用教學(xué)要求第2章處理器結(jié)構(gòu)2.1處理器功能結(jié)構(gòu)從應(yīng)用角度看到的處理器內(nèi)部結(jié)構(gòu)Intel3868位CPUIntelPentiumIntel80862.1.1處理器基本結(jié)構(gòu)算術(shù)邏輯單元寄存器指令處理單元內(nèi)部數(shù)據(jù)總線控制總線數(shù)據(jù)總線地址總線暫存器累加器ALU標志寄存器指令寄存指令譯碼時序和控制邏輯通用寄存器組地址寄存器組地址總線控制數(shù)據(jù)總線控制1.算術(shù)邏輯單元ALU計算機的運算器,負責(zé)處理器所能進行的各種運算,主要就是算術(shù)運算和邏輯運算累加器結(jié)構(gòu)的處理器累加器(Accumulator)提供一個操作數(shù)保存運算結(jié)果標志(Flag)寄存器反映運算結(jié)果的輔助信息例如:有無進借位、是否為零、是否為負等也稱為程序狀態(tài)字(PSW)2.寄存器(Register)處理器內(nèi)部需要高速存儲單元,用于暫時存放程序執(zhí)行過程中的代碼和數(shù)據(jù)透明寄存器對應(yīng)用人員不可見、不能直接控制的寄存器可編程(Programmable)寄存器具有引用名稱、供編程使用通用寄存器數(shù)量較多、使用頻度較高,具有多種用途專用寄存器只用于特定目的3.指令處理單元處理器的控制單元,它控制指令的執(zhí)行和信息的傳輸指令執(zhí)行的過程取指:指令處理單元將指令從主存取出,并通過總線傳輸?shù)教幚砥鲀?nèi)部的指令寄存器譯碼:指令處理單元通過指令譯碼電路獲得該指令的功能執(zhí)行:指令處理單元的時序和控制邏輯按一定的時間順序發(fā)出和接收相應(yīng)信號,完成指令所要求的操作取指譯碼執(zhí)行2.1.28086的功能結(jié)構(gòu)123456內(nèi)部寄存器

IP

ES

SS

DS

CS輸入/輸出控制電路外部總線執(zhí)行部分控制電路ALU標志寄存器

AHAL

BHBLCHCL

DHDL

SP

BP

SI

DI通用寄存器地址加法器指令隊列執(zhí)行單元(EU)總線接口單元(BIU)16位20位16位1.總線接口單元和執(zhí)行單元總線接口單元指令隊列、指令指針、段寄存器、地址加法器和總線控制邏輯管理與系統(tǒng)總線的接口,負責(zé)對存儲器和外設(shè)訪問執(zhí)行單元ALU、通用寄存器、標志寄存器和控制電路負責(zé)指令譯碼、數(shù)據(jù)運算和指令執(zhí)行指令執(zhí)行的兩個主要階段:取指和執(zhí)行取指:從主存取出指令代碼進入指令隊列執(zhí)行:譯碼指令、并發(fā)出有關(guān)控制信號實現(xiàn)指令功能取指譯碼執(zhí)行指令演示8088指令執(zhí)行過程示意返回2.指令預(yù)?。≒refetch)8086處理器的指令讀取,實際上是指令預(yù)取8086處理器維護著長度為6個字節(jié)的指令隊列EU單元譯碼、執(zhí)行指令,同時BIU單元讀取后續(xù)指令BIU和EU兩個單元相互獨立,可以并行操作最簡單的指令流水線技術(shù)節(jié)省許多取指時間,提高了工作效率程序轉(zhuǎn)移將使預(yù)取指令作廢,降低了效率2.1.380386的功能結(jié)構(gòu)總線接口單元:為處理器提供同外部的接口指令預(yù)取單元:先行讀取指令指令譯碼單元:從預(yù)取隊列中取來指令,譯碼成微指令代碼執(zhí)行單元:ALU、乘法器、除法器和移位器等

分段單元:邏輯地址變換成線性地址分頁單元:將線性地址變換成物理地址各功能部件可以并行工作,進行流水線處理示意圖80386的功能結(jié)構(gòu)返回2.1.4Pentium的功能結(jié)構(gòu)1.超標量流水線:2條指令流水線2.分離Cache:指令Cache和數(shù)據(jù)Cache3.動態(tài)分支預(yù)測:預(yù)測程序執(zhí)行順序4.其他性能增強的浮點處理單元FPU常用指令固化改進復(fù)雜指令的微代碼算法節(jié)能特性電源電壓:3.3V示意圖Pentium的功能結(jié)構(gòu)返回2.2寄存器寄存器就是暫時存放數(shù)據(jù)的地方通過編寫程序、由處理器執(zhí)行指令控制IA-32處理器基本執(zhí)行環(huán)境:8個32位通用寄存器6個16位段寄存器32位標志寄存器32位指令指針對應(yīng)用人員(程序員)來說,處理器被抽象為可編程寄存器示意圖IA-32常用寄存器返回2.2.1通用寄存器處理器最常使用的整數(shù)通用寄存器可用于保存整數(shù)數(shù)據(jù)、地址等8個32位通用寄存器EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP8個16位通用寄存器AX,BX,CX,DX,SI,DI,BP,SP8個8位通用寄存器AH,AL,BH,BL,CH,CL,DH,DL存取16位寄存器,高16位不受影響存取8位寄存器,16/32位寄存器其他位不受影響示意圖通用寄存器的名稱EAX:累加器(Accumulator)EBX:基址寄存器(Base)ECX:計數(shù)器(Counter)EDX:數(shù)據(jù)寄存器(Data)ESI:源變址寄存器(SourceIndex)EDI:目的變址寄存器(DestinationIndex)EBP:基址指針(BasePointer)ESP:堆棧指針(StackPointer)ESP(SP)應(yīng)該作為專用寄存器對待示意圖2.2.2標志寄存器標志(Flag)反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式用一個或多個二進制位表示一種標志0或1的不同組合表達標志的不同狀態(tài)8086支持16位標志寄存器FLAGSIA-32處理器形成32位EFLAGS標志寄存器狀態(tài)標志:記錄指令執(zhí)行結(jié)果的輔助信息控制標志:方向標志DF,僅用于串操作指令系統(tǒng)標志:控制操作系統(tǒng)或核心管理程序的操作方式示意圖標志寄存器EFLAGS返回1.狀態(tài)標志最基本的標志,有6個用來記錄指令執(zhí)行結(jié)果的輔助信息加減運算和邏輯運算指令是主要設(shè)置它們其他有些指令的執(zhí)行也會相應(yīng)地設(shè)置它們處理器主要使用其中5個構(gòu)成各種條件,分支指令判斷這些條件實現(xiàn)程序分支OF11DF10IF9TF8SF7ZF605AF403PF211CF0進位標志CF(CarryFlag)當(dāng)加減運算結(jié)果的最高有效位有進位(加法)或借位(減法)時,進位標志置1,即CF=1;否則CF=0針對無符號整數(shù),判斷加減結(jié)果是否超出表達范圍N個二進制位表達無符號整數(shù)的范圍:0~2N-18位:0~+25516位:0~+6553532位:0~+232-1進位標志CF:舉例8位二進制數(shù)相加:

00111010+01111100=10110110十六進制表達:3A+7C=B6轉(zhuǎn)換成十進制數(shù):58+124=182沒有產(chǎn)生進位:CF=08位二進制數(shù)相加:

10101010+01111100=[1]00100110十六進制表達:AA+7C=[1]26轉(zhuǎn)換成十進制數(shù):170+124=294=256+38產(chǎn)生進位:CF=10<182<255進位1表達256溢出標志OF(OverflowFlag)有符號數(shù)加減結(jié)果有溢出,則OF=1;否則OF=0針對有符號整數(shù),判斷加減結(jié)果是否超出表達范圍N個二進制位表達有符號整數(shù)的范圍:-2N-1~2N-1-18位:-128~+12716位:-32768~+3276732位:-231~+231-1杯中水已滿,溢出標志OF:舉例8位二進制數(shù)相加:

00111010+01111100=10110110十六進制表達:3A+7C=B6轉(zhuǎn)換成十進制數(shù):58+124=182超出范圍:OF=18位二進制數(shù)相加:

10101010+01111100=[1]00100110十六進制表達:AA+7C=[1]26轉(zhuǎn)換成十進制數(shù):-86+124=38沒有超出范圍:OF=0182>127補碼AAH表達-86進位和溢出的區(qū)別進位標志反映無符號整數(shù)運算結(jié)果是否超出范圍有進位,加上進位或借位后運算結(jié)果仍然正確溢出標志反映有符號整數(shù)運算結(jié)果是否超出范圍有溢出,運算結(jié)果已經(jīng)不正確處理器按照無符號整數(shù)求得結(jié)果設(shè)置進位標志CF設(shè)置溢出標志OF程序員決定操作數(shù)是無符號數(shù),關(guān)心進位操作數(shù)是有符號數(shù),注意溢出溢出標志的判斷處理器硬件判斷規(guī)則最高位和次高位同時有進位或同時無進位,無溢出;最高位和次高位進位狀態(tài)不同,有溢出人工判斷的簡單規(guī)則只有當(dāng)兩個相同符號數(shù)相加(含兩個不同符號數(shù)相減),而運算結(jié)果的符號與原數(shù)據(jù)符號相反時,產(chǎn)生溢出;其他情況下,不會產(chǎn)生溢出

00111010+01111100

10110110正數(shù)正數(shù)負數(shù)最高位次高位零標志ZF(ZeroFlag)運算結(jié)果為0,則ZF=1,否則ZF=0結(jié)果是0,ZF標志不是0!舉例8位二進制數(shù)相加:

00111010+01111100=10110110

結(jié)果不是0,ZF=08位二進制數(shù)相加:

10000100+01111100=[1]00000000

結(jié)果是0,ZF=1結(jié)果進位符號標志SF(SignFlag)運算結(jié)果最高位為1,則SF=1;否則SF=0舉例8位二進制數(shù)相加:

00111010+01111100=10110110

最高位=1:SF=18位二進制數(shù)相加:

10000100+01111100=[1]00000000

最高位=0:SF=0結(jié)果進位最高位=符號位=SF奇偶標志PF(ParityFlag)當(dāng)運算結(jié)果最低字節(jié)中“1”的個數(shù)為零或偶數(shù)時,PF=1;否則PF=0舉例8位二進制數(shù)相加:

00111010+01111100=10110110

“1”的個數(shù)為5個:PF=08位二進制數(shù)相加:

10000100+01111100=[1]00000000

“1”的個數(shù)為0個:PF=1結(jié)果進位僅最低8位“1”的個數(shù)2.控制標志方向標志DF(DirectionFlag)僅用于串操作指令,控制地址的變化方向設(shè)置DF=0,每次串操作后的存儲器地址就自動增加,即從低地址向高地址處理數(shù)據(jù)串設(shè)置DF=1,每次串操作后的存儲器地址就自動減少,即從高地址向低地址處理數(shù)據(jù)串執(zhí)行CLD指令設(shè)置DF=0執(zhí)行STD指令設(shè)置DF=13.系統(tǒng)標志中斷允許標志IF(Interrupt-enableFlag)陷阱標志TF(TrapFlag),單步標志I/O特權(quán)層標志IOPL(I/OPrivilegeLevel)任務(wù)嵌套標志NT虛擬8086方式標志VM恢復(fù)標志RF對齊檢測標志ACCPU識別標志ID(IdentificationFlag)虛擬中斷標志VIF虛擬中斷掛起標志VIP2.2.3專用寄存器專用寄存器往往只用于特定指令或場合1.指令指針寄存器EIP保存將要執(zhí)行的指令在主存的地址2.段寄存器段是安排相關(guān)代碼或數(shù)據(jù)的主存區(qū)域段寄存器表明段在主存中的位置6個16位段寄存器:CSDSSSESFSGS3.其他寄存器浮點寄存器、多媒體寄存器系統(tǒng)專用寄存器2.3存儲器組織物理存儲器以字節(jié)為基本存儲單位每個存儲單元被分配一個唯一的地址這個地址就是物理地址物理地址空間從0開始順序編排,直到處理器支持的最大存儲單元8086處理器支持1MB存儲器:00000H~FFFFFHIA-32處理器支持4GB存儲器:00000000H~FFFFFFFFH操作系統(tǒng)利用存儲管理單元進行存儲管理,程序并不直接尋址物理存儲器IA-32處理器提供3種存儲模型,用于程序訪問存儲器2.3.1存儲模型1.平展存儲模型(Flatmemorymodel)存儲器是一個連續(xù)的地址空間--線性地址空間IA-32處理器支持4GB容量線性地址空間2.段式存儲模型存儲器由一組獨立的地址空間--段(Segment)每個段都可以達到4GB容量在處理器內(nèi)部,所有的段都被映射到線性地址空間3.實地址存儲模型8086處理器的存儲模型段式存儲模型的特例線性地址空間最大為1MB容量,段最大為64KB2.3.2工作方式1.保護方式(Protectedmode)IA-32處理器固有的工作狀態(tài)具有強大的段頁式存儲管理和特權(quán)與保護能力使用全部32條地址總線,可尋址4GB物理存儲器使用平展或段式存儲模型利用虛擬8086方式支持實地址8086軟件2.實地址方式(Real-addressmode)可以進行32位處理的快速8086只能尋址1MB物理存儲器空間,每個段不超過64KB可以使用32位寄存器、32位操作數(shù)和32位尋址方式只能支持實地址存儲模型3.系統(tǒng)管理方式實現(xiàn)供節(jié)能和系統(tǒng)安全管理2.3.3邏輯地址(LogicalAddress)在處理器內(nèi)部、程序員編程時采用的地址邏輯地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距離段基地址的位移量某個存儲單元可以有多個邏輯地址,但只有一個唯一的物理地址示意圖邏輯地址線性地址物理地址編程使用處理器轉(zhuǎn)換地址總線輸出邏輯地址與物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221邏輯地址=相對地址:205(2層05號房間)物理地址=絕對地址:15(第15號房間)1.基本段編寫應(yīng)用程序時,涉及三類基本段:代碼段(CodeSegment):存放指令代碼程序的指令代碼必須安排在代碼段數(shù)據(jù)段(DataSegment):存放數(shù)據(jù)程序的數(shù)據(jù)默認存放在數(shù)據(jù)段數(shù)據(jù)也可放在其他段堆棧段(StackSegment):堆棧區(qū)域程序使用的堆棧一定在堆棧段基本段的邏輯地址代碼段(CodeSegment)段基地址:代碼段寄存器CS指示偏移地址:指令指針寄存器EIP保存數(shù)據(jù)段(DataSegment)段基地址:數(shù)據(jù)段寄存器DS指示有時也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各種存儲器尋址方式計算出來堆棧段(StackSegment)段基地址:堆棧段寄存器SS指示偏移地址:堆棧指針寄存器ESP保存2.段選擇器16位段寄存器保存16位段選擇器段選擇器指向64位段描述符(Descriptor)段描述符包括段基地址平展存儲模型:指向地址0位置段式存儲模型:指向線性地址空間不同的段實地址存儲模型:保存段基地址的高16位段選擇器16位段寄存器64位段描述符主存儲器空間段基地址數(shù)據(jù)或指令3.保護方式的地址轉(zhuǎn)換平展存儲模型段基地址為0,偏移地址等于線性地址段式存儲管理段基地址和偏移地址都是32位段基地址加上偏移地址形成線性地址線性地址映射到物理地址不使用分頁機制:線性地址與物理地址對應(yīng)使用分頁機制:硬件支持下由操作系統(tǒng)或核心程序管理,構(gòu)成虛擬存儲器,轉(zhuǎn)換成物理地址應(yīng)用程序看到的都是線性地址空間4.實地址方式的地址轉(zhuǎn)換主存空間1MB(=220B):00000H~FFFFFH程序設(shè)計時分段管理,但有兩個限制:每個段最大為64KB段只能開始于低4位地址全為0的物理地址處邏輯地址=段地址∶偏移地址16位段寄存器保存20位段起始地址的高16位偏移地址也用16位數(shù)據(jù)表示物理地址=段地址×16+偏移地址左移二進制4位(十六進制1位)示意圖實地址存儲模型的邏輯地址和物理地址返回2.4匯編語言基礎(chǔ)匯編語言以助記符形式表示計算機指令助記符(mnemonic)是便于人們記憶、并能描述指令功能和指令操作數(shù)的符號助記符是表明指令功能的英語單詞或其縮寫匯編格式指令以及使用它們編寫程序的規(guī)則就形成匯編語言(AssemblyLanguage)匯編語言程序:用匯編語言書寫的程序匯編程序:將匯編語言程序“匯編”成機器代碼目標模塊的程序匯編語言程序與匯編程序是兩個概念2.4.1指令代碼格式(Instructionformat)IA-32處理器采用可變長度指令格式操作碼可選的指令前綴(用于擴展指令功能)1~3字節(jié)的主要操作碼操作數(shù)可選的尋址方式域(包括ModR/M和SIB字段)可選的位移量可選的立即數(shù)指令代碼示例數(shù)據(jù)傳送指令MOV(取自Move)將數(shù)據(jù)從一個位置傳送到另一個位置類似高級語言的賦值語句

movdest,src;源操作數(shù)Src:被傳送的數(shù)據(jù)或數(shù)據(jù)所在的位置;目的操作數(shù)dest:數(shù)據(jù)將要傳送到的位置moveax,ebx ;機器代碼:8BC3moveax,[ebx] ;機器代碼:8B03moveax,[ebx+esi*4+80h] ;機器代碼:8B84B380000000指令功能傳送指令MOV的功能返回源操作數(shù)src目的操作數(shù)dest30H30H被傳送的數(shù)據(jù)2.4.2語句格式程序由語句組成一個語句常占一行(MASM有續(xù)行符“\”)一個語句不超過132個字符,4個部分執(zhí)行性語句:表達處理器指令(硬指令)標號:硬指令助記符

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

偽指令助記符

參數(shù),參數(shù),……;注釋1.標號與名字標號:執(zhí)行性語句中冒號分隔表示處理器指令在主存中的邏輯地址指示分支、循環(huán)等程序的目的地址名字:說明性語句中空格或制表符分隔變量名、段名、子程序名等反映變量、段和子程序等的邏輯地址標號和名字是用戶自定義的標識符標識符(Identifier)最多由31個字母、數(shù)字及規(guī)定的特殊符號(如_、$、?、@)組成,不能以數(shù)字開頭一個源程序中,用戶定義的每個標識符必須唯一不能是匯編程序采用的保留字保留字(ReservedWord)是編程語言本身需要使用的各種具有特定含義的標識符、也稱為關(guān)鍵字硬指令助記符:MOV偽指令助記符:BYTE操作符:OFFSET寄存器名:EAX取名原則類似高級語言默認不區(qū)別大小寫字母“OPTIONCASEMAP:NONE”偽指令告知MASM區(qū)別用戶定義標識符的大小寫2.助記符助記符:幫助記憶指令功能的符號硬指令助記符對應(yīng)處理器指令,表示一種處理器操作偽指令助記符表達一個匯編命令字節(jié)變量定義偽指令助記符:BYTE(或DB)功能:在主存中占用若干的存儲空間,用于保存變量值,該變量以字節(jié)為單位存取msg

byte

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

byte

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

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

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

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

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

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

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

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

endstart ;匯編結(jié)束完整程序框架 Datasegment[變量名][db|dw|dd|dq]數(shù)據(jù)DataendsCodesegmentAssumecs:code,ds:dataStart:Movax,dataMovds,ax……Movah,4chInt21HCodeendsEndstart1.包含偽指令I(lǐng)NCLUDE將常用的常量定義、過程說明、共享的子程序庫等內(nèi)容進行聲明(相當(dāng)于C和C++語言中,包含頭文件的作用)IO32.INC是配合本書的包含文件前3個語句:.686 ;32位指令.modelflat,stdcall ;選擇平展模型,標準調(diào)用規(guī)范

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

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

;代碼段

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

calldispmsg ;調(diào)用I/O子程序顯示信息完整程序例2-1源程序;eg0201.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é)果3.輸入輸出子程序庫鍵盤輸入和顯示器輸出的I/O子程序含IO32.INC和IO32.LIB,需要包含文件聲明源程序文件開始使用包含命令聲明INCLUDEIO32.INC子程序調(diào)用方法MOVEAX,入口參數(shù)CALL子程序名宏調(diào)用方法宏名入口參數(shù)宏名WriteString子程序名DISPMSG入口參數(shù)EAX=字符串地址功能說明顯示字符串(以0結(jié)尾)輸入子程序輸出子程序常用輸出子程序返回子程序名功能說明DISPMSG顯示字符串(以0結(jié)尾)DISPC顯示一個字符DISPCRLF光標回車換行,到下一行首個位置DISPRD顯示8個32位通用寄存器內(nèi)容DISPRF顯示6個狀態(tài)標志的狀態(tài)DISPHD以十六進制形式顯示8位數(shù)據(jù)DISPUID顯示無符號十進制整數(shù)DISPSID顯示有符號十進制整數(shù)常用輸入子程序返回子程序名功能說明READMSG輸入一個字符串(回車結(jié)束)READC輸入一個字符(回顯)READHD輸入8位十六進制數(shù)據(jù)READUID輸入無符號十進制整數(shù)(≤232-1)READSID輸入有符號十進制整數(shù)(-231~231-1)2.4.4開發(fā)過程1.開發(fā)軟件抽取MASM6.11和VisualC++6.0集成開發(fā)環(huán)境中有關(guān)文件構(gòu)造基本開發(fā)軟件包BIN子目錄:進行匯編、連接及配套的程序文件MASM目錄:I/O庫、包含文件以及批處理文件默認安裝到D分區(qū)的MASM目錄快速開發(fā)方法資源管理器中雙擊快捷方式進入MASM目錄簡單命令生成可執(zhí)行文件MAKE32eg0201

操作演示MASM6.15開發(fā)軟件快速開發(fā)方法END2.源程序的編輯源程序文件是無格式文件、純文本類型以ASM為擴展名,使用任何文本編輯器Windows的記事本NotepadDOS中的全屏幕文本編輯器EDIT其他程序開發(fā)工具中的編輯環(huán)境專用于源程序文件編寫的文本編輯軟件,例如UltraEdit32本書源程序文件的命名規(guī)則EG=例題,EX=習(xí)題

前2位數(shù)字=章號,后2位數(shù)字=序號3.源程序的匯編生成目標模塊文件(.OBJ)MASM6.x的匯編程序是ML.EXE

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

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

eg0201.exe運行錯誤,就需要靜態(tài)排錯:閱讀分析源程序動態(tài)排錯:利用調(diào)試程序溫馨提示:不要在Windows下雙擊運行操作演示源程序的編輯溫馨提示:文件保存在MASM目錄源程序的匯編和目標文件的連接可執(zhí)行文件的執(zhí)行溫馨提示:上下方向鍵可以調(diào)出原來輸入的命令END5.列表文件列表文件(.LST)含有源程序和目標代碼

BIN\ML/c/coff/Fleg0201.asm“/Fl”創(chuàng)建列表文件(大寫F、小寫l,不是數(shù)字1)列表文件有兩部分內(nèi)容第一部分:源程序及其代碼第二部分:各種標識符錯誤Error:比較嚴重的語法錯誤警告Warning:不太關(guān)鍵的語法錯誤操作演示列表文件列表文件列表文件列表文件列表文件END2.5數(shù)據(jù)尋址方式指令有兩部分:操作碼和操作數(shù)操作碼:處理器要執(zhí)行哪種操作 不可缺少,用助記符表示操作數(shù):指令執(zhí)行的參與者各種操作的對象,需要通過地址指示數(shù)據(jù)尋址方式:通過地址查找數(shù)據(jù)(操作數(shù))立即數(shù)尋址:數(shù)據(jù)與指令操作碼一起,用常量表達寄存器尋址:數(shù)據(jù)在寄存器中,用寄存器名表示存儲器尋址:數(shù)據(jù)在主存中,用存儲器地址代表2.5.1立即數(shù)尋址操作數(shù)緊跟操作碼,是機器代碼的一部分操作數(shù)從指令代碼中立即得到,即立即數(shù)(Immediate),用常量形式直接表達立即數(shù)尋址方式只用于源操作數(shù),常用來給寄存器和存儲單元賦值例如:MOVEAX,33221100H機器代碼:B800112233操作碼:B8立即數(shù):33221100示意圖立即數(shù)尋址返回2.5.2寄存器尋址操作數(shù)存放在處理器的內(nèi)部寄存器中用寄存器名表示它的內(nèi)容絕大多數(shù)指令采用通用寄存器尋址部分指令支持專用寄存器,例如段寄存器寄存器尋址方式簡單快捷,最常使用例如:MOVEBX,EAX32位通用寄存器:EAXEBXECXEDX……16位通用寄存器:AXBXCXDX……8位通用寄存器:AHALBHBL……2.5.3存儲器尋址操作數(shù)在主存中,通過存儲器地址指示編程時,存儲器地址使用包含段選擇器和偏移地址的邏輯地址段選擇器(段寄存器)指示段基地址默認規(guī)定:數(shù)據(jù)在DS指向的數(shù)據(jù)段;EBP或ESP作為基地址,數(shù)據(jù)在SS指向的堆棧段顯式說明:使用段超越指令前綴,段寄存器名后跟英文冒號偏移地址由各種尋址方式計算,常被稱為有效地址EA(EffectiveAddress)1.段寄存器的默認和超越訪問存儲器的方式默認可超越偏移地址取指令CS無EIP堆棧操作SS無ESP一般數(shù)據(jù)訪問DSCSESSSFSGS有效地址EABP基址的尋址方式SSCSESDSFSGS有效地址EA串操作的源操作數(shù)DSCSESSSFSGSESI串操作的目的操作數(shù)ES無EDI主存操作數(shù)常通過變量形式引用一般不需要使用段超越前綴指令2.偏移地址的組成

32位有效地址 =基址寄存器+(變址寄存器×比例)+位移量基址寄存器:任何8個32位通用寄存器之一變址寄存器:除ESP之外的任何32位通用寄存器之一比例:1,2,4或8位移量:8或32位有符號值

16位有效地址 =基址寄存器+變址寄存器+位移量基址寄存器:BX或BP變址寄存器:SI或DI位移量:8或16位有符號值多種主存尋址方式3.直接尋址有效地址只有位移量部分,直接包含在指令代碼中常用于存取變量例如: MOVECX,COUNT;COUNT是變量 MOVECX,DS:[405000H]指令代碼:8B0D00504000操作碼和尋址方式:8B0D操作數(shù):有效地址00405000H示意圖存儲器直接尋址返回4.寄存器間接尋址有效地址存放在寄存器中(寄存器內(nèi)容=偏移地址)MASM用中括號括起寄存器可以方便地對數(shù)組的元素或字符串的字符進行操作寄存器間接尋址沒有說明存儲單元類型例如:movedx,[ebx]mov[esi],ecx5.寄存器相對尋址有效地址是寄存器內(nèi)容與位移量之和也可以方便地對數(shù)組的元素或字符串的字符進行操作例如:

movesi,[ebx+4] ;位移量:4

movedi,[ebp-08h] ;位移量:-08H

movesi,count[ebx] ;位移量:COUNT主存以字節(jié)為可尋址單位地址的加減是以字節(jié)為單位6.變址尋址使用變址寄存器尋址操作數(shù)便于支持兩維數(shù)組等數(shù)據(jù)結(jié)構(gòu)例如:

movedi,[ebx+esi]

movedi,[ebx][esi] ;基址變址尋址,功能:EDI=DS:[EBX+ESI]

moveax,[e

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論