微机原理32位微机02章_第1页
微机原理32位微机02章_第2页
微机原理32位微机02章_第3页
微机原理32位微机02章_第4页
微机原理32位微机02章_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章

处理器结构2.1处理器功能结构2.2寄存器2.3存储器组织2.4汇编语言基础2.5数据寻址方式了解处理器的基本结构熟悉8086、80386和Pentium处理器的结构掌握IA-32常用寄存器的名称和作用掌握状态标志和控制标志的意义理解IA-32的存储器模型和工作方式掌握基本段、逻辑地址和物理地址掌握逻辑地址转换为物理地址的方法理解汇编语言的语句格式和程序格式掌握汇编语言程序的开发方法掌握数据寻址方式及其应用教学要求第2章处理器结构2.1处理器功能结构从应用角度看到的处理器内部结构Intel3868位CPUIntelPentiumIntel80862.1.1处理器基本结构算术逻辑单元寄存器指令处理单元内部数据总线控制总线数据总线地址总线暂存器累加器ALU标志寄存器指令寄存指令译码时序和控制逻辑通用寄存器组地址寄存器组地址总线控制数据总线控制1.算术逻辑单元ALU计算机的运算器,负责处理器所能进行的各种运算,主要就是算术运算和逻辑运算累加器结构的处理器累加器(Accumulator)提供一个操作数保存运算结果标志(Flag)寄存器反映运算结果的辅助信息例如:有无进借位、是否为零、是否为负等也称为程序状态字(PSW)2.寄存器(Register)处理器内部需要高速存储单元,用于暂时存放程序执行过程中的代码和数据透明寄存器对应用人员不可见、不能直接控制的寄存器可编程(Programmable)寄存器具有引用名称、供编程使用通用寄存器数量较多、使用频度较高,具有多种用途专用寄存器只用于特定目的3.指令处理单元处理器的控制单元,它控制指令的执行和信息的传输指令执行的过程取指:指令处理单元将指令从主存取出,并通过总线传输到处理器内部的指令寄存器译码:指令处理单元通过指令译码电路获得该指令的功能执行:指令处理单元的时序和控制逻辑按一定的时间顺序发出和接收相应信号,完成指令所要求的操作取指译码执行2.1.28086的功能结构123456内部寄存器

IP

ES

SS

DS

CS输入/输出控制电路外部总线执行部分控制电路ALU标志寄存器

AHAL

BHBLCHCL

DHDL

SP

BP

SI

DI通用寄存器地址加法器指令队列执行单元(EU)总线接口单元(BIU)16位20位16位1.总线接口单元和执行单元总线接口单元指令队列、指令指针、段寄存器、地址加法器和总线控制逻辑管理与系统总线的接口,负责对存储器和外设访问执行单元ALU、通用寄存器、标志寄存器和控制电路负责指令译码、数据运算和指令执行指令执行的两个主要阶段:取指和执行取指:从主存取出指令代码进入指令队列执行:译码指令、并发出有关控制信号实现指令功能取指译码执行指令演示8088指令执行过程示意返回2.指令预取(Prefetch)8086处理器的指令读取,实际上是指令预取8086处理器维护着长度为6个字节的指令队列EU单元译码、执行指令,同时BIU单元读取后续指令BIU和EU两个单元相互独立,可以并行操作最简单的指令流水线技术节省许多取指时间,提高了工作效率程序转移将使预取指令作废,降低了效率2.1.380386的功能结构总线接口单元:为处理器提供同外部的接口指令预取单元:先行读取指令指令译码单元:从预取队列中取来指令,译码成微指令代码执行单元:ALU、乘法器、除法器和移位器等

分段单元:逻辑地址变换成线性地址分页单元:将线性地址变换成物理地址各功能部件可以并行工作,进行流水线处理示意图80386的功能结构返回2.1.4Pentium的功能结构1.超标量流水线:2条指令流水线2.分离Cache:指令Cache和数据Cache3.动态分支预测:预测程序执行顺序4.其他性能增强的浮点处理单元FPU常用指令固化改进复杂指令的微代码算法节能特性电源电压:3.3V示意图Pentium的功能结构返回2.2寄存器寄存器就是暂时存放数据的地方通过编写程序、由处理器执行指令控制IA-32处理器基本执行环境:8个32位通用寄存器6个16位段寄存器32位标志寄存器32位指令指针对应用人员(程序员)来说,处理器被抽象为可编程寄存器示意图IA-32常用寄存器返回2.2.1通用寄存器处理器最常使用的整数通用寄存器可用于保存整数数据、地址等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:计数器(Counter)EDX:数据寄存器(Data)ESI:源变址寄存器(SourceIndex)EDI:目的变址寄存器(DestinationIndex)EBP:基址指针(BasePointer)ESP:堆栈指针(StackPointer)ESP(SP)应该作为专用寄存器对待示意图2.2.2标志寄存器标志(Flag)反映指令执行结果或控制指令执行形式用一个或多个二进制位表示一种标志0或1的不同组合表达标志的不同状态8086支持16位标志寄存器FLAGSIA-32处理器形成32位EFLAGS标志寄存器状态标志:记录指令执行结果的辅助信息控制标志:方向标志DF,仅用于串操作指令系统标志:控制操作系统或核心管理程序的操作方式示意图标志寄存器EFLAGS返回1.状态标志最基本的标志,有6个用来记录指令执行结果的辅助信息加减运算和逻辑运算指令是主要设置它们其他有些指令的执行也会相应地设置它们处理器主要使用其中5个构成各种条件,分支指令判断这些条件实现程序分支OF11DF10IF9TF8SF7ZF605AF403PF211CF0进位标志CF(CarryFlag)当加减运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=0针对无符号整数,判断加减结果是否超出表达范围N个二进制位表达无符号整数的范围:0~2N-18位:0~+25516位:0~+6553532位:0~+232-1进位标志CF:举例8位二进制数相加:

00111010+01111100=10110110十六进制表达:3A+7C=B6转换成十进制数:58+124=182没有产生进位:CF=08位二进制数相加:

10101010+01111100=[1]00100110十六进制表达:AA+7C=[1]26转换成十进制数:170+124=294=256+38产生进位:CF=10<182<255进位1表达256溢出标志OF(OverflowFlag)有符号数加减结果有溢出,则OF=1;否则OF=0针对有符号整数,判断加减结果是否超出表达范围N个二进制位表达有符号整数的范围:-2N-1~2N-1-18位:-128~+12716位:-32768~+3276732位:-231~+231-1杯中水已满,溢出标志OF:举例8位二进制数相加:

00111010+01111100=10110110十六进制表达:3A+7C=B6转换成十进制数:58+124=182超出范围:OF=18位二进制数相加:

10101010+01111100=[1]00100110十六进制表达:AA+7C=[1]26转换成十进制数:-86+124=38没有超出范围:OF=0182>127补码AAH表达-86进位和溢出的区别进位标志反映无符号整数运算结果是否超出范围有进位,加上进位或借位后运算结果仍然正确溢出标志反映有符号整数运算结果是否超出范围有溢出,运算结果已经不正确处理器按照无符号整数求得结果设置进位标志CF设置溢出标志OF程序员决定操作数是无符号数,关心进位操作数是有符号数,注意溢出溢出标志的判断处理器硬件判断规则最高位和次高位同时有进位或同时无进位,无溢出;最高位和次高位进位状态不同,有溢出人工判断的简单规则只有当两个相同符号数相加(含两个不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,不会产生溢出

00111010+01111100

10110110正数正数负数最高位次高位零标志ZF(ZeroFlag)运算结果为0,则ZF=1,否则ZF=0结果是0,ZF标志不是0!举例8位二进制数相加:

00111010+01111100=10110110

结果不是0,ZF=08位二进制数相加:

10000100+01111100=[1]00000000

结果是0,ZF=1结果进位符号标志SF(SignFlag)运算结果最高位为1,则SF=1;否则SF=0举例8位二进制数相加:

00111010+01111100=10110110

最高位=1:SF=18位二进制数相加:

10000100+01111100=[1]00000000

最高位=0:SF=0结果进位最高位=符号位=SF奇偶标志PF(ParityFlag)当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0举例8位二进制数相加:

00111010+01111100=10110110

“1”的个数为5个:PF=08位二进制数相加:

10000100+01111100=[1]00000000

“1”的个数为0个:PF=1结果进位仅最低8位“1”的个数2.控制标志方向标志DF(DirectionFlag)仅用于串操作指令,控制地址的变化方向设置DF=0,每次串操作后的存储器地址就自动增加,即从低地址向高地址处理数据串设置DF=1,每次串操作后的存储器地址就自动减少,即从高地址向低地址处理数据串执行CLD指令设置DF=0执行STD指令设置DF=13.系统标志中断允许标志IF(Interrupt-enableFlag)陷阱标志TF(TrapFlag),单步标志I/O特权层标志IOPL(I/OPrivilegeLevel)任务嵌套标志NT虚拟8086方式标志VM恢复标志RF对齐检测标志ACCPU识别标志ID(IdentificationFlag)虚拟中断标志VIF虚拟中断挂起标志VIP2.2.3专用寄存器专用寄存器往往只用于特定指令或场合1.指令指针寄存器EIP保存将要执行的指令在主存的地址2.段寄存器段是安排相关代码或数据的主存区域段寄存器表明段在主存中的位置6个16位段寄存器:CSDSSSESFSGS3.其他寄存器浮点寄存器、多媒体寄存器系统专用寄存器2.3存储器组织物理存储器以字节为基本存储单位每个存储单元被分配一个唯一的地址这个地址就是物理地址物理地址空间从0开始顺序编排,直到处理器支持的最大存储单元8086处理器支持1MB存储器:00000H~FFFFFHIA-32处理器支持4GB存储器:00000000H~FFFFFFFFH操作系统利用存储管理单元进行存储管理,程序并不直接寻址物理存储器IA-32处理器提供3种存储模型,用于程序访问存储器2.3.1存储模型1.平展存储模型(Flatmemorymodel)存储器是一个连续的地址空间--线性地址空间IA-32处理器支持4GB容量线性地址空间2.段式存储模型存储器由一组独立的地址空间--段(Segment)每个段都可以达到4GB容量在处理器内部,所有的段都被映射到线性地址空间3.实地址存储模型8086处理器的存储模型段式存储模型的特例线性地址空间最大为1MB容量,段最大为64KB2.3.2工作方式1.保护方式(Protectedmode)IA-32处理器固有的工作状态具有强大的段页式存储管理和特权与保护能力使用全部32条地址总线,可寻址4GB物理存储器使用平展或段式存储模型利用虚拟8086方式支持实地址8086软件2.实地址方式(Real-addressmode)可以进行32位处理的快速8086只能寻址1MB物理存储器空间,每个段不超过64KB可以使用32位寄存器、32位操作数和32位寻址方式只能支持实地址存储模型3.系统管理方式实现供节能和系统安全管理2.3.3逻辑地址(LogicalAddress)在处理器内部、程序员编程时采用的地址逻辑地址=段基地址∶偏移地址段基地址=在主存中的起始地址偏移地址=距离段基地址的位移量某个存储单元可以有多个逻辑地址,但只有一个唯一的物理地址示意图逻辑地址线性地址物理地址编程使用处理器转换地址总线输出逻辑地址与物理地址返回108208308106206306107207307109209309110105104103102101210205204203202201310305304303302301081828061626071727091929100504030201201514131211302524232221逻辑地址=相对地址:205(2层05号房间)物理地址=绝对地址:15(第15号房间)1.基本段编写应用程序时,涉及三类基本段:代码段(CodeSegment):存放指令代码程序的指令代码必须安排在代码段数据段(DataSegment):存放数据程序的数据默认存放在数据段数据也可放在其他段堆栈段(StackSegment):堆栈区域程序使用的堆栈一定在堆栈段基本段的逻辑地址代码段(CodeSegment)段基地址:代码段寄存器CS指示偏移地址:指令指针寄存器EIP保存数据段(DataSegment)段基地址:数据段寄存器DS指示有时也用附加段寄存器ES,段寄存器FS和GS指示偏移地址:各种存储器寻址方式计算出来堆栈段(StackSegment)段基地址:堆栈段寄存器SS指示偏移地址:堆栈指针寄存器ESP保存2.段选择器16位段寄存器保存16位段选择器段选择器指向64位段描述符(Descriptor)段描述符包括段基地址平展存储模型:指向地址0位置段式存储模型:指向线性地址空间不同的段实地址存储模型:保存段基地址的高16位段选择器16位段寄存器64位段描述符主存储器空间段基地址数据或指令3.保护方式的地址转换平展存储模型段基地址为0,偏移地址等于线性地址段式存储管理段基地址和偏移地址都是32位段基地址加上偏移地址形成线性地址线性地址映射到物理地址不使用分页机制:线性地址与物理地址对应使用分页机制:硬件支持下由操作系统或核心程序管理,构成虚拟存储器,转换成物理地址应用程序看到的都是线性地址空间4.实地址方式的地址转换主存空间1MB(=220B):00000H~FFFFFH程序设计时分段管理,但有两个限制:每个段最大为64KB段只能开始于低4位地址全为0的物理地址处逻辑地址=段地址∶偏移地址16位段寄存器保存20位段起始地址的高16位偏移地址也用16位数据表示物理地址=段地址×16+偏移地址左移二进制4位(十六进制1位)示意图实地址存储模型的逻辑地址和物理地址返回2.4汇编语言基础汇编语言以助记符形式表示计算机指令助记符(mnemonic)是便于人们记忆、并能描述指令功能和指令操作数的符号助记符是表明指令功能的英语单词或其缩写汇编格式指令以及使用它们编写程序的规则就形成汇编语言(AssemblyLanguage)汇编语言程序:用汇编语言书写的程序汇编程序:将汇编语言程序“汇编”成机器代码目标模块的程序汇编语言程序与汇编程序是两个概念2.4.1指令代码格式(Instructionformat)IA-32处理器采用可变长度指令格式操作码可选的指令前缀(用于扩展指令功能)1~3字节的主要操作码操作数可选的寻址方式域(包括ModR/M和SIB字段)可选的位移量可选的立即数指令代码示例数据传送指令MOV(取自Move)将数据从一个位置传送到另一个位置类似高级语言的赋值语句

movdest,src;源操作数Src:被传送的数据或数据所在的位置;目的操作数dest:数据将要传送到的位置moveax,ebx ;机器代码:8BC3moveax,[ebx] ;机器代码:8B03moveax,[ebx+esi*4+80h] ;机器代码:8B84B380000000指令功能传送指令MOV的功能返回源操作数src目的操作数dest30H30H被传送的数据2.4.2语句格式程序由语句组成一个语句常占一行(MASM有续行符“\”)一个语句不超过132个字符,4个部分执行性语句:表达处理器指令(硬指令)标号:硬指令助记符

操作数,操作数 ;注释说明性语句:表达伪指令,控制汇编方式名字

伪指令助记符

参数,参数,……;注释1.标号与名字标号:执行性语句中冒号分隔表示处理器指令在主存中的逻辑地址指示分支、循环等程序的目的地址名字:说明性语句中空格或制表符分隔变量名、段名、子程序名等反映变量、段和子程序等的逻辑地址标号和名字是用户自定义的标识符标识符(Identifier)最多由31个字母、数字及规定的特殊符号(如_、$、?、@)组成,不能以数字开头一个源程序中,用户定义的每个标识符必须唯一不能是汇编程序采用的保留字保留字(ReservedWord)是编程语言本身需要使用的各种具有特定含义的标识符、也称为关键字硬指令助记符:MOV伪指令助记符:BYTE操作符:OFFSET寄存器名:EAX取名原则类似高级语言默认不区别大小写字母“OPTIONCASEMAP:NONE”伪指令告知MASM区别用户定义标识符的大小写2.助记符助记符:帮助记忆指令功能的符号硬指令助记符对应处理器指令,表示一种处理器操作伪指令助记符表达一个汇编命令字节变量定义伪指令助记符:BYTE(或DB)功能:在主存中占用若干的存储空间,用于保存变量值,该变量以字节为单位存取msg

byte

'Hello,Assembly!',13,10,03.操作数和参数处理器指令的操作数:表示参与操作的对象具体的常量保存在寄存器的数据保存在存储器中的变量逗号前常是目的操作数,逗号后常是源操作数伪指令的参数:常量、变量名、表达式等可以有多个,参数之间用逗号分隔msg

byte

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

eax,offsetmsg4.注释语句中分号后的内容是注释对指令或程序进行说明汇编程序不对它们做任何处理注释利于阅读,应养成书写注释的好习惯语句的4个组成部分要用分隔符分开标号后的冒号注释前的分号操作数间和参数间的逗号分隔其他部分采用一个或多个空格或制表符注释使用英文或中文均可分隔符都是英文标点2.4.3源程序框架;eg0000.asminWindowsConsoleincludeio32.inc ;包含32位输入输出文件

.data ;定义数据段

…… ;数据定义(数据待填)

.code ;定义代码段start: ;程序执行起始位置

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

exit0 ;程序正常执行结束

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

endstart ;汇编结束完整程序框架 Datasegment[变量名][db|dw|dd|dq]数据DataendsCodesegmentAssumecs:code,ds:dataStart:Movax,dataMovds,ax……Movah,4chInt21HCodeendsEndstart1.包含伪指令INCLUDE将常用的常量定义、过程说明、共享的子程序库等内容进行声明(相当于C和C++语言中,包含头文件的作用)IO32.INC是配合本书的包含文件前3个语句:.686 ;32位指令.modelflat,stdcall ;选择平展模型,标准调用规范

optioncasemap:none ;告知MASM区分用户定义标识符的大小写2.段的简化定义数据段定义伪指令.DATA创建一个数据段代码段定义伪指令.CODE创建一个代码段堆栈段由Windows维护,用户不必设置程序开始执行的位置应用一个标号(例如:START)汇编结束END指令的参数应用程序执行结束语句“EXIT0”将控制权交还操作系统提供给操作系统一个返回代码通常用0表示执行正确源程序汇编结束END语句执行结束≠汇编结束〔例2-1〕信息显示程序在数据段给出这个字符串形式的信息:

;数据段msg byte'Hello,Assembly!',13,10,0 ;定义要显示的字符串在代码段编写显示字符串的程序:

;代码段

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

calldispmsg ;调用I/O子程序显示信息完整程序例2-1源程序;eg0201.asm includeio32.inc

.data ;数据段msg byte'Hello,Assembly!',13,10,0 .code ;代码段start:

;程序执行起始位置

moveax,offsetmsg

calldispmsg

exit0 ;程序正常执行结束

endstart ;汇编结束返回Hello,Assembly!运行结果3.输入输出子程序库键盘输入和显示器输出的I/O子程序含IO32.INC和IO32.LIB,需要包含文件声明源程序文件开始使用包含命令声明INCLUDEIO32.INC子程序调用方法MOVEAX,入口参数CALL子程序名宏调用方法宏名入口参数宏名WriteString子程序名DISPMSG入口参数EAX=字符串地址功能说明显示字符串(以0结尾)输入子程序输出子程序常用输出子程序返回子程序名功能说明DISPMSG显示字符串(以0结尾)DISPC显示一个字符DISPCRLF光标回车换行,到下一行首个位置DISPRD显示8个32位通用寄存器内容DISPRF显示6个状态标志的状态DISPHD以十六进制形式显示8位数据DISPUID显示无符号十进制整数DISPSID显示有符号十进制整数常用输入子程序返回子程序名功能说明READMSG输入一个字符串(回车结束)READC输入一个字符(回显)READHD输入8位十六进制数据READUID输入无符号十进制整数(≤232-1)READSID输入有符号十进制整数(-231~231-1)2.4.4开发过程1.开发软件抽取MASM6.11和VisualC++6.0集成开发环境中有关文件构造基本开发软件包BIN子目录:进行汇编、连接及配套的程序文件MASM目录:I/O库、包含文件以及批处理文件默认安装到D分区的MASM目录快速开发方法资源管理器中双击快捷方式进入MASM目录简单命令生成可执行文件MAKE32eg0201

操作演示MASM6.15开发软件快速开发方法END2.源程序的编辑源程序文件是无格式文件、纯文本类型以ASM为扩展名,使用任何文本编辑器Windows的记事本NotepadDOS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境专用于源程序文件编写的文本编辑软件,例如UltraEdit32本书源程序文件的命名规则EG=例题,EX=习题

前2位数字=章号,后2位数字=序号3.源程序的汇编生成目标模块文件(.OBJ)MASM6.x的汇编程序是ML.EXE

BIN\ML/c/coffeg0201.asm参数“/c”(小写)实现源程序的汇编参数“/coff”(小写字母)表示生成COFF格式的目标模块文件温馨提示:将源文件放在MASM目录温馨提示:ML.EXE的参数区别大小写4.目标文件的连接能把一个或多个目标文件和库文件合成一个可执行文件32位连接程序被更名为LINK32.EXE

BIN\LINK32/subsystem:consoleeg0201.obj“/subsystem:console”表示生成Windows控制台(Console)环境的可执行文件“/subsystem:windows”生成Windows图形窗口的可执行文件温馨提示:使用批处理文件方便操作温馨提示:汇编程序只指出语法错误5.可执行文件的运行进入控制台(或模拟DOS)环境在命令行提示符下输入文件名(可以省略扩展名)、按下回车键运行

eg0201.exe运行错误,就需要静态排错:阅读分析源程序动态排错:利用调试程序温馨提示:不要在Windows下双击运行操作演示源程序的编辑温馨提示:文件保存在MASM目录源程序的汇编和目标文件的连接可执行文件的执行温馨提示:上下方向键可以调出原来输入的命令END5.列表文件列表文件(.LST)含有源程序和目标代码

BIN\ML/c/coff/Fleg0201.asm“/Fl”创建列表文件(大写F、小写l,不是数字1)列表文件有两部分内容第一部分:源程序及其代码第二部分:各种标识符错误Error:比较严重的语法错误警告Warning:不太关键的语法错误操作演示列表文件列表文件列表文件列表文件列表文件END2.5数据寻址方式指令有两部分:操作码和操作数操作码:处理器要执行哪种操作 不可缺少,用助记符表示操作数:指令执行的参与者各种操作的对象,需要通过地址指示数据寻址方式:通过地址查找数据(操作数)立即数寻址:数据与指令操作码一起,用常量表达寄存器寻址:数据在寄存器中,用寄存器名表示存储器寻址:数据在主存中,用存储器地址代表2.5.1立即数寻址操作数紧跟操作码,是机器代码的一部分操作数从指令代码中立即得到,即立即数(Immediate),用常量形式直接表达立即数寻址方式只用于源操作数,常用来给寄存器和存储单元赋值例如:MOVEAX,33221100H机器代码:B800112233操作码:B8立即数:33221100示意图立即数寻址返回2.5.2寄存器寻址操作数存放在处理器的内部寄存器中用寄存器名表示它的内容绝大多数指令采用通用寄存器寻址部分指令支持专用寄存器,例如段寄存器寄存器寻址方式简单快捷,最常使用例如:MOVEBX,EAX32位通用寄存器:EAXEBXECXEDX……16位通用寄存器:AXBXCXDX……8位通用寄存器:AHALBHBL……2.5.3存储器寻址操作数在主存中,通过存储器地址指示编程时,存储器地址使用包含段选择器和偏移地址的逻辑地址段选择器(段寄存器)指示段基地址默认规定:数据在DS指向的数据段;EBP或ESP作为基地址,数据在SS指向的堆栈段显式说明:使用段超越指令前缀,段寄存器名后跟英文冒号偏移地址由各种寻址方式计算,常被称为有效地址EA(EffectiveAddress)1.段寄存器的默认和超越访问存储器的方式默认可超越偏移地址取指令CS无EIP堆栈操作SS无ESP一般数据访问DSCSESSSFSGS有效地址EABP基址的寻址方式SSCSESDSFSGS有效地址EA串操作的源操作数DSCSESSSFSGSESI串操作的目的操作数ES无EDI主存操作数常通过变量形式引用一般不需要使用段超越前缀指令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操作数:有效地址00405000H示意图存储器直接寻址返回4.寄存器间接寻址有效地址存放在寄存器中(寄存器内容=偏移地址)MASM用中括号括起寄存器可以方便地对数组的元素或字符串的字符进行操作寄存器间接寻址没有说明存储单元类型例如:movedx,[ebx]mov[esi],ecx5.寄存器相对寻址有效地址是寄存器内容与位移量之和也可以方便地对数组的元素或字符串的字符进行操作例如:

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

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

movesi,count[ebx] ;位移量:COUNT主存以字节为可寻址单位地址的加减是以字节为单位6.变址寻址使用变址寄存器寻址操作数便于支持两维数组等数据结构例如:

movedi,[ebx+esi]

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

moveax,[e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论