《第三章微机系统中的微处理器.ppt》由会员分享,可在线阅读,更多相关《第三章微机系统中的微处理器.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第第 3 3 章章 微机系统中的微处理器微机系统中的微处理器3.1 3.1 微处理器的一般结构微处理器的一般结构(略)略)3.2 3.2 8086 8086 微处理器的功能结构微处理器的功能结构3.3 3.3 8086 8086 的寄存器结构的寄存器结构3.4 3.4 8086 8086 的存储器组织的存储器组织3.5 3.5 8086 8086 的的I/OI/O组织组织3.6 3.6 8086 8086 的寻址方式的寻址方式3.7 3.7 Intel 80Intel 8086 86 系列高档微处理器简介系列高档微处理器简介(略)略)返回 3.2 8086 3.2 8086 微处理器的功能结
2、构微处理器的功能结构 8086(88)CPU有 20 条地址线,直接寻址能力达 1 MB。8086(88)CPU具有 16(8)条外部数据总线,内部总线和ALU均为 16 位,可进行 8 位和16 位操作,是16(准16)位微处理器。8086(88)采取了如下三方面的措施,使其性能大大提高。重叠:指第N条指令的取指与第N-1条指令的执行(在时间上)是重叠的(参重叠原理图)。返回 提高性能的三个措施提高性能的三个措施 (1)、通过建立一个6(4)字节的指令预取队列及将CPU划分为EU和BIU这两个功能相对独立的功能部件,使指令的取指与执行实现了一定程度上的并行,大大地提高了CPU的利用率及总线的
3、利用率(参8086 微处理器的内部功能结构图)。(2)、引入段的概念,并设立了一些段寄存器,使8086的最大可直接寻址空间达到1MB。(3)、在结构和指令上考虑了多处理器的连接,从而支持多处理器系统。返回 EUEU的定义、组成和工作过程的定义、组成和工作过程EU(Execution Unit):执行部件,由算术逻辑运算部件ALU、运算寄存器、标志寄存器、通用寄存器组和EU控制器构成。EU的任务是:执行指令,进行全部算术逻辑运算、完成偏移地址的计算,向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存器和标志寄存器进行管理。EU的工作过程 返回 EUEU的工作过程的工作过程EU的工
4、作过程如下:EU执行完一条指令后,就从BIU的指令预取队列中取出预先读入的指令代码加以执行。如此时指令预取队列是空的,EU处于等待状态。一旦指令预取队列中有指令,EU立即取出执行。在执行指令过程中,若需要访问存储器单元或I/O端口,EU就会发出命令,使BIU进入访问存储器或I/O端口的总线周期。若此时BIU正处于取指令总线周期,则必须在取指令总线周期结束后,BIU才能对EU的访问存储器或I/O端口的命令进行处理。返回 算术逻辑运算部件算术逻辑运算部件算术逻辑运算部件(ALU):专门进行诸如加、减、乘、除等算术运算以及诸如与、或、非、异或等逻辑运算和移位等运算的部件。它是运算器的核心,几乎所有的
5、算术运算、逻辑运算和移位操作都是由ALU完成的。返回 标志寄存器标志寄存器标志寄存器(FLAG或PSW):专门用于存放机器的状态标志和控制标志的寄存器。返回 通用寄存器组通用寄存器组 图 3.6 中 8 个 16 位通用寄存器分为两组:数据寄存器及地址指针和变址寄存器。返回1.1.数据寄存器数据寄存器 数据寄存器包括AX、BX、CX和DX,为16位寄存器。在指令执行过程中既可用来存放操作数,也可用于存放操作的结果,还可以用来存放与地址有关的信息。它们中的每一个又可分成两个独立的 8 位寄存器来使用。16 位数据寄存器主要用于存放数据,也可以用来存放与地址有关的信息。而 8 位寄存器(AH、AL
6、、BH、BL、CH、CL、DH和DL)只能用于存放数据。返回 2.2.地址指针和变址寄存器地址指针和变址寄存器 地址指针和变址寄存器包括SP、BP、SI和DI,均为16位寄存器。这 4 个寄存器可用作数据寄存器,也可用于存放段内偏移地址的全部或一部分。后面我们将说明偏移地址的概念和形成的方法。返回 地址指针(地址指针(SP和和BP)SP(Stack Pointer)堆栈指针,用于指向当前栈顶单元的指针。用于存放当前栈顶单元地址在堆栈段中的段内偏移地址。其段基值存放于堆栈段寄存器SS中。BP(Base Pointer)基址指针。在某些基址寻址方式中,BP用来存放段内偏移地址的的相关信息。特别值得
7、注意的是,凡包含有BP的寻址方式中,如果无特别说明,默认的段为堆栈段。返回 变址寄存器(变址寄存器(SISI和和DIDI)SI(Source Index)和DI(Destination Index)变址寄存器。在某些寻址方式中,SI和DI用来存放段内偏移地址的全部或一部分。在串操作指令中,SI用一般作源变址寄存器,DI一般用作目的变址寄存器。返回 总线接口部件总线接口部件BIU(Bus Interface Unit):总线接口部件。总线接口部件的组成总线接口部件的任务总线接口部件的工作过程 返回 总线接口部件的组成总线接口部件的组成 总线接口部件BIU包括段寄存器(4 个)、指令指针IP、指令
8、预取队列、完成与EU通讯的内部暂存器、将段寄存器中保存的段基和由IP或EU部件提供的偏移地址(均 为16 位二进制数)两者相加、进而形成 20 位物理地址的加法器以及总线控制逻辑几个部分。返回总线接口部件的任务总线接口部件的任务 它的任务是执行各种总线操作,完成CPU与存储器和I/O设备之间信息的传送。具体地讲,取指令时,从存储器指定存储器单元取出指令送入指令预取队列排队。执行指令时,根据EU的命令对指定存储器单元或I/O端口进行存取数据的操作。返回总线接口部件BIU 的工作过程:8086(88)CPU中,若 6(4)个字节的指令预取队列中出现两个以上的空闲字节,且EU没有命令BIU进入对存储
9、器和I/O端口进行访问的总线周期时,则BIU将自动执行取指令总线周期从存储器中取出指令并送入来指令预取队列。当指令预取队列中已满,且EU没有发出进入存储器和I/O端口访问总线周期的命令时,BIU进入空闲状态。下一页 在执行转移、子程序调用或返回指令时,指令预取队列的内容就被清空。BIU是通过对内部暂存器的检测来查看EU是否有对存储器或I/O端口的存取要求的,因此EU和BIU进行的操作是并行的,即EU从指令预取队列中取出指令、执行指令的工作与BIU从存储器中取出指令并送入指令预取队列的工作是在一定程度上同时进行的。这样大大提高了CPU的利用率,也降低了CPU对存储器速度的要求。返回 图3.4 8
10、086 微处理器的内部功能结构图返回 图3.5 一般处理器与8086(88)处理器指令执行过程对比(a)一般处理器指令执行过程;(b)8086(88)处理器指令执行过程 返回重叠的概念重叠的概念 3 3、3 3 8086 8086 的寄存器结构的寄存器结构 8086 CPU内部具有 14 个 16 位寄存器,用于提供参加运算的操作数,控制指令执行和对指令及操作数寻址,这就是我们前面所说的工作寄存器。其寄存器结构如图 3.6 所示。3.3.1 3.3.1 通用寄存器组通用寄存器组3.3.2 3.3.2 段寄存器组段寄存器组3.3.3 3.3.3 控制寄存器组控制寄存器组 返回图3.6 8086
11、CPU的寄存器结构返回变址变址寄存器寄存器 通用寄存器通用寄存器工作寄存器:暂存用于寻址的相关信息或在计算过程中参加运算的操作数以及中间结果的寄存器。工作寄存器分为两组:数据寄存器组和地址寄存器组。但有的寄存器兼有双重用途。由于访问寄存器要比访问存储器快得多,所以如要多次使用某些数据时,可以首先将这些数据存入数据寄存器,进行必要的计算,然后将结果送回存储器。一般情况下,CPU所含的数据寄存器越多,计算速度越快。地址寄存器组一般用于操作数的寻址。通用寄存器:可用作数据寄存器的工作寄存器。返回 3.3.2 3.3.2 段寄存器组段寄存器组 前面已经指出。访问存储器单元的地址码由段基值和段内偏移地址
12、两部分组成。段寄存器是专门用来存放段基值的寄存器。总线接口部件BIU中设置 了4 个段寄存器。CPU可通过 4 个段寄存器访问存储器中 4 个不同的段(每段的最大长度为64K字节)。四个段寄存器分别是:代码段寄存器CS(Code Segment)。数据段寄存器DS(Data Segment)。堆栈段寄存器SS(Stack Segment)。附加段寄存器ES(Extra Segment)。DS和ES都可由用户用程序设置初值。若DS和ES的初值相同,则数据段和附加段重叠。返回代码段寄存器CS(Code Segment)。它存放当前执行程序所在段的段基。CS的内容左移四位再加上指令指针IP的内容就得
13、到存放下一条将要执行的指令的单元的地址。下一条将要执行的指令存放单元的地址=CS*16+IP 返回数据段寄存器DS(Data Segment)。它存放当前参加运算的数据所在段的段基。通常数据段用来存放数据和变量。DS的内容左移四位再加上按相应寻址方式计算出来的偏移地址,即为对数据段中要进行读写操作的单元的地址。数据段中存放数据单元的地址=DS*16+EA 返回 堆栈寄存器SS(Stack Segment)。它存放当前堆栈段的段基。堆栈是存储器中开辟的按“后进先出”的原则组织的一个特别的存储区,它规定每次操作在栈顶单元进行。当前栈顶单元的地址由SS的内容左移四位加上SP的内容得到。当前栈顶单元的
14、在堆栈段中的地址=SS*16+SP 返回 附加段寄存器ES(Extra Segment)。附加段是一个附加的数据段。附加段可在进行串操作时作为目的区地址使用,此时,可用 ES存放附加段的段基,DI存放相应单元在附加段中的段内偏移地址。附加数据段中存放数据单元的地址=ES*16+EA 返回 3.3.3 3.3.3 控制寄存器组控制寄存器组 1.1.指令指针指令指针IP(Instruction Pointer)IP(Instruction Pointer)是存放下一条将要执行指令的偏移地址的指针。在用户程序中不能直接用传送类指令对该寄存器置值,但可以用动态调试程序DEBUG中的命令改变其值,以改变
15、程序执行的顺序,用于调试程序。某些指令如转移指令、子程序调用指令和子程序返回指令等将改变IP的内容。下一页2.2.标志寄存器标志寄存器(FLAGFLAG或或PSW)PSW)8086 CPU设立了一个两字节的标志寄存器,共 9 个标志。其中 6 个是反映上一次ALU运算结果的状态标志,3 个是控制CPU操作特征的控制标志,如下所示:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OFDFIFTFSFZFAFPFCF 下一页状态标志有:CF(Carry Flag):进位标志。如果加法时最高位(对字节操作是D7位,对字操作是D15位)向更高位有进位或减法时最高位向更高位有借
16、位,则CF=1,否则CF=0。PF(Parity Flag):奇偶标志。如果运算结果的低 8 位中含有偶数个 1,则PF=1,否则PF=0。AF(Auxiliary Carry Flag):辅助进位标志。如果在加法时D3位向D4位有进位或减法时D3位向D4位有借位,则AF=1,否则AF=0。这个标志位用于实现BCD码算术运算结果的校正。下一页 ZF(Zero Flag):零标志。如果运算结果各位都为零,则ZF=1,否则ZF=0。SF(Sign Flag):符号标志。如果运算结果为正,则SF=0,如果运算结果为负,则SF=1。它总是和结果的最高位(字节操作时是D7,字操作时是D15)相同。因为在
17、补码运算时最高位是符号位,所以运算结果为负时,SF=1,否则SF=0。下一页 OF(Overflow Flag):溢出标志。在加或减法运算中若结果超出 8 位或 16 位有符号数所能表示的数值范围(-128+127 或-32768+32767)时,即 产生溢出。此时,OF=1,否则OF=0。溢出:指要表示的数超出计算机所能表示的数的范围,则产生溢出。上溢:指要表示的数从绝对值大的方向超出计算机所能表示的数的范围,为错误状态。下溢:指要表示的数从绝对值小的方向超出计算机所能表示的数的范围,此时,只有精度上的损失。下一页 例如,假设前一条指令执行加法:0010 0011 0100 0101 +01
18、01 0010 0001 1001 0111 0101 0101 1110 那么,执行完这条指令后各标志的状态是:SF=0,ZF=0,PF=0,AF=0,CF=0,OF=0。下一页 假如前一条指令执行加法:0101 0100 0011 1001 +0100 0111 0110 1010 1001 1011 1010 0011 那么,执行完这条指令后各标志是:SF=1,ZF=0,PF=1,AF=1,CF=0,OF=1。下一页假如前一条指令执行减法:0101 0100 0011 1010 -1111 1110 0000 0000 0101 0110 0011 1010那么,执行完这条指令后各标志是
19、:SF=0,ZF=0,PF=1,AF=0,CF=1,OF=0。下一页控制标志有:DF(Direction Flag):方向标志。可用指令预置。串操作指令执行时受它的控制。若DF=0 时,执行串操作指令时,变址寄存器的内容自动递增;当DF=1 时,则变址寄存器的内容自动递减。IF(Interrupt Enable Flag):中断允许标志。可用指令预置。当IF=1,CPU可响应可屏蔽中断请求;若IF=0,CPU不响应可屏蔽中断请求。下一页TF(Trap Flag):陷阱标志。若TF=1,则CPU处于单步执行指令工作方式。每执行一条指令就自动产生一次类型 1 的内部中断。IBM PC系统中,用系统
20、调试程序DEBUG时,T命令就是利用这种中断,服务子程序的功能是显示所有寄存器的当前值和将要执行的下一条指令。返回 3 3、4 4 8086 8086 的存储器组的存储器组织织3.4.1 3.4.1 存储器地址空间和数据存储格式存储器地址空间和数据存储格式3.4.2 3.4.2 存储器的分段和物理地址的形成存储器的分段和物理地址的形成3.4.3 3.4.3 信息的分段存储与段寄存器的关系信息的分段存储与段寄存器的关系 返回 3.4.1 3.4.1 存储器地址空间和数据存储格式存储器地址空间和数据存储格式字节、存储字字节、存储字存储器单元的编址存储器单元的编址字和双字在存储器中的存放原则字和双字
21、在存储器中的存放原则对准的和未对准的字对准的和未对准的字 返回 字节和存储字字节和存储字字节:计算机中作为一个单位来处理的一串二进制位,一般为8位。存储字:计算机系统中,可作为一个整体一次存放到内存储器或从内存储器中取出的数据所占的最大二进制位为一个存储字。存储字的位数一般与内部数据总线的宽度一致。例如:8位机的存储字是8位字长;16位机的存储字是16位字长;32位机的存储字是32位字长。返回 存储器单元的编址存储器单元的编址 8086 的存储器是以字节(8 位)为单位编址的,即每一个单元的宽度为8bits。它具有 20 条地址总线,所以可直接寻址的最大的存储器地址空间为220B(约1 MB)
22、,其地址范围为0220-1(用十六进制表示为 00000FFFFFH)。返回 字和双字在存储器中的存放原则字和双字在存储器中的存放原则 8086系统的存储字在存储器中的存放满足高(位字节)高(位地址)、低(位字节)低(位地址)的原则。双字在存储器中的存放也满足高(位字)高(位地址)、低(位字)低(位地址)的原则。返回 对准的和未对准的字对准的和未对准的字8086为16位CPU,其存储字的宽度为16bits。由于8086的存储器按字节编址,故一个16bits的存储字就占据了两个连续的8bits存储器单元。8086 允许一个存储字从任何地址开始存放。若该字的低位字节单元地址为偶地址时,称该字的存储
23、是对准的;若该字的低位字节单元的地址为奇地址时,则称该字的存储是未对准的。8086 CPU数据总线 16 位,对于访问一个字节单元的指令,需要执行一个总线周期;对于访问一个对准的字的指令,也只需要执行一个执行总线周期;而对于访问一个未对准的字的指令,则需要执行两个总线周期(CPU自动完成)。返回 3 3、4 4、2 2 存储器的分段和物理地址的形成存储器的分段和物理地址的形成存储器分段的原因存储器分段的原因存储器中的段、段地址和段基存储器中的段、段地址和段基 段内偏移量段内偏移量逻辑地址逻辑地址物理地址物理地址 返回 存储器分段的原因存储器分段的原因8086有20条地址线,其可直接寻址的最大的
24、存储器地址空间为1MB,而8086 CPU的内部数据总线和ALU均为16位,故只能进行16位运算,在程序中也只能使用16位地址,其可直接寻址的最大的存储器地址空间为216=64KB,为了能寻址1MB单元,所以引入分段的概念。在存储器中一般存放的信息有程序代码、数据和堆栈信息,此时,可使用不同的内存区域存放不同的信息,即可用不同的存储段存放不同的信息。返回 存储器中的段、段基和段地址存储器中的段、段基和段地址存储器中的段是存储器中长度64KB的连续空间,程序可按段组织。各段间可互不相干、部分重叠或完全重叠。段基是当前段寄存器的内容,它指示相应段的起始位置。段地址是当前段的起始位置,由相应段基左移
25、4位得到。返回 段内偏移量段内偏移量 段内偏移量(又称有效地址-EA)是指定存储单元的物理地址相对于相应段的段地址间的距离,一般为16位二进制值。返回 逻辑地址逻辑地址逻辑地址指在程序中可用指令编排的地址。逻辑地址由段基和段内偏移量两部分组成;其表示格式为:16位段基:16位段内偏移量(二进制)。返回 物理地址物理地址物理地址指信息在存储器中实际存放的单元的地址。物理地址=段地址+段内偏移量 =段基*16+段内偏移量其中,段基和段内偏移量的值均为16位二进制数的值。返回3 3、4 4、3 3 信息的分段存储与段寄存器的关系信息的分段存储与段寄存器的关系程序一般组织在代码段中,数据一般组织在数据
26、段和附加数据段中,堆栈一般组织在堆栈段中。段寄存器使用时的一些基本约定如下:返回 3 3、5 5 8086 8086 的的I/OI/O组组织织接口和端口接口和端口可以给每一个可以给每一个I/OI/O端口分配一个唯一对应的端口分配一个唯一对应的地址(编址方式后述)。地址(编址方式后述)。返回 接口和端口接口和端口外围接口电路(外设接口):把外围设备同微型计算机连接起来实现数据传送的控制电路。微处理器与外设接口之间通过数据总线、地址总线和控制总线连接。微处理器与外设接口之间传送的信息仍为数据信息、地址信息和控制信息。(微处理器通过)外设接口同外设之间传输的信息包括:微处理器向外设发送的控制信息、外
27、设向微处理器发出的状态信息、微处理器同外设之间传送的数据信息。端口:在接口电路中应有存放上述控制信息、状态信息和数据信息的寄存器,这些寄存器可以由CPU对它们进行读/写。接口电路中这些可读/写的寄存器称为端口。存放控制信息的寄存器称为控制端口;存放状态信息的寄存器称为状态端口;存放数据信息的寄存器称为数据端口。返回 3 3、6 6 8086 8086 的寻址方式的寻址方式从四地址指令到零地址指令从四地址指令到零地址指令形式地址、有效地址和寻址方式形式地址、有效地址和寻址方式3 3、6 6、1 1 与数据有关的寻址方式与数据有关的寻址方式 3 3、6 6、2 2 与转移地址有关的寻址方式与转移地
28、址有关的寻址方式 返回 形式地址、有效地址和寻址方式形式地址、有效地址和寻址方式 形式地址是指令码中所包含的地址。有效地址(EA)即段内偏移量,由形式地址经各种寻址方式变换后得到的16位地址。寻址方式是由形式地址到有效地址的变换方式。返回 3 3、6 6、1 1 与数据有关的寻址方式与数据有关的寻址方式1 1、立即寻址立即寻址2 2、寄存器寻址寄存器寻址3 3、直接寻址直接寻址4 4、寄存器间接寻址寄存器间接寻址5 5、寄存器相对寻址寄存器相对寻址6 6、基址变址寻址基址变址寻址7 7、基址变址相对寻址基址变址相对寻址8 8、隐含寻址隐含寻址各种寻址方式下的有效地址(各种寻址方式下的有效地址(
29、EAEA)的表示的表示寻址方式的例子寻址方式的例子 返回 立即寻址立即寻址立即寻址方式:在这种寻址方式中,在指令的操作数地址部分给出的不是参加运算的操作数所在存储器单元的(偏移)地址,而是参加运算的操作数本身。由于这个操作数是立即得到的,故又叫做立即数。该立即数可以是8 bits,也可以是16 bits。返回 寄存器寻址寄存器寻址寄存器寻址方式:在这种寻址方式中,在指令的操作数地址部分给出的不是参加运算的操作数所在存储器单元在相应段中的偏移地址,而是某一寄存器的编号,在该寄存器中,存放着参加运算的操作数。对于16位数据,寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP之一(相应编码为
30、000111b)。对于8位数据,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH之一(相应编码为000111b)。返回 直接寻址直接寻址直接寻址方式:在这种寻址方式中,在指令的操作数地址部分给出的是参加运算的操作数所在存储器单元在相应段中的16位的偏移地址,在该单元中存放着参加运算的8bits或16bits操作数。返回 寄存器间接寻址寄存器间接寻址寄存器间接寻址方式:在这种寻址方式中,在指令的操作数地址部分给出的是某一16位寄存器的编号,在该寄存器中,存放着参加运算的操作数在存储器中的相应段中的16位段内偏移量,该操作数可为8位或16位操作数。该寄存器可以为BX、BP、SI和DI之一
31、(相应编码为0011b)。当寄存器为BP时,默认的段为堆栈段。当寄存器为BX或BP之一时,又称为基址寻址;当寄存器为SI或DI之一时,又称为变址寻址。返回 寄存器相对寻址寄存器相对寻址寄存器相对寻址方式:在这种寻址方式中,在指令的操作数地址部分给出的是某一16位寄存器的编号和一个8位或16位的位移量。该寄存器的内容与指令中给定的8位或16位的位移量相加,即得到相应操作数所在的存储单元在相应段中的16位段内偏移量。该操作数可为8位或16位操作数。该寄存器可以为BX、BP、SI和DI之一(相应编码为0011b)。当寄存器为BP时,默认的段为堆栈段。返回 基址变址寻址基址变址寻址基址变址寻址方式:在
32、这种寻址方式中,在指令的操作数地址部分给出的是一个基址寄存器的编号和一个变址寄存器的编号。该基址寄存器的内容与该变址寄存器的内容相加,即得到相应操作数所在的存储单元在相应段中的16位段内偏移量。该操作数可为8位或16位操作数。该基址寄存器可以为BX和BP之一(相应编码为0b或1b);该变址寄存器可以为SI和DI之一(相应编码为0b或1b)。当基址寄存器为BP时,默认的段为堆栈段。返回 基址变址相对寻址基址变址相对寻址基址变址相对寻址方式:在这种寻址方式中,在指令的操作数地址部分给出的是一个基址寄存器的编号和一个变址寄存器的编号以及一个8位或16位的位移量。该基址寄存器的内容与该变址寄存器的内容
33、相加,再与指令中给定的8位或16位的位移量相加,即得到相应操作数所在的存储单元在相应段中的16位段内偏移量。该操作数可为8位或16位操作数。该基址寄存器可以为BX和BP之一(相应编码为0b或1b);该变址寄存器可以为SI和DI之一(相应编码为0b或1b)。当基址寄存器为BP时,默认的段为堆栈段。返回 隐含寻址隐含寻址隐含寻址方式:在这种寻址方式中,指令的操作数地址部分的不指明参加运算的操作数的地址部分,而是默认操作数于某一寄存器(或寄存器对)或默认了操作数地址的形成方式及使用的寄存器,故指令中不需指出。这种寻址方式称为隐含寻址方式。如乘、除法运算指令和串操作类指令等就采用这种寻址方式。返回 各
34、种各种寻址寻址方式下的有效地址(方式下的有效地址(EAEA)的表示的表示1 1、立即寻址立即寻址:EA=本条指令的操作码取出时的IP值2 2、寄存器寻址寄存器寻址 EA=rr(表16位通用寄存器)的代码或 EA=r(表8位寄存器)的代码3 3、直接寻址直接寻址 EA=nn(表16位偏移量)下一页4 4、寄存器间接寻址寄存器间接寻址 EA=SI、DI、BX、BP之一的内容 为BP时,默认的段为堆栈段。5 5、寄存器相对寻址寄存器相对寻址 EA=SI、DI、BX、BP之一的内容+d或 EA=SI、DI、BX、BP之一的内容+dd d为8位位移量(有符数),dd为16位位移量(有符数)。为BP时,默
35、认的段为堆栈段。6 6、基址变址寻址基址变址寻址 EA=SI、DI之一的内容+BX、BP 之一的内容 基址寄存器为为BP时,默认的段为堆栈段。下一页7 7、基址变址相对寻址基址变址相对寻址 EA=SI、DI之一的内容+BX、BP 之一的内容+d或 EA=SI、DI之一的内容+BX、BP 之一的内容+dd d为8位位移量(有符数),dd为16位位移量(有符数)。基址寄存器为为BP时,默认的段为堆栈段。8 8、隐含寻址隐含寻址 EA=隐含的寄存器代码或偏移量 返回 寻址方式的例子寻址方式的例子例如,若BX=0158H,DI=10A5H,位移量dd=1B57H,DS=2100H,SS=1100H,B
36、P=0100H,段寄存器按默认段寄存器,则相对于各种寻址方式的有效地址和物理地址将是:(1)、直接寻址:EA=dd=nn=1B57H 物理地址=DS*16+EA =21000H+1B57H=22B57H(2)、寄存器间接寻址(假设寄存器为BX):EA=BX=0158H 物理地址=DS*16+EA =21000H+0158H=21158H 下一页(3)、寄存器相对寻址(假设寄存器为BP):EA=BP+dd =0100H+1B57H=1C57H 物理地址=SS*10H+EA =11000H+1C57H=12C57H(4)、基址变址寻址(假设寄存器为BX和DI):EA=BX+DI =0158H+10
37、A5H=11FDH 物理地址=21000H+11FDH=221FDH 下一页(5)、基址变址相对寻址(假设寄存器为BP和DI):EA=BP+DI+dd =0100H+10A5H+1B57H=2CFCH 物理地址=SS*16+EA =11000H+2CFCH=13CFCH 返回 3 3、6 6、2 2 与转移地址有关的寻址方式与转移地址有关的寻址方式段内转移和段间转移段内转移和段间转移1.1.段内直接寻址段内直接寻址2.2.段内间接寻址段内间接寻址3.3.段间直接寻址段间直接寻址4.4.段间间接寻址段间间接寻址 返回 段内转移和段间转移段内转移和段间转移程序可以组织在一个代码段中,也可以组织在多
38、个代码段中。这样,转移的方向地址(转移之后要执行的指令的地址)和转移指令所在的起始单元地址可以在同一个代码段中,此时的转移称为段内转移;转移的方向地址和转移指令所在的起始单元地址也可以在不同的代码段中,此时的转移称为段间转移。明显地,段内转移时只需修改指令指针IP的值;而段间转移时不但需要修改指令指针IP的值,还需要修改代码段寄存器CS的值。返回 段内直接寻址段内直接寻址段内直接寻址方式:在这种寻址方式中,在指令的转移方向地址码中包括一个位移量d(8 bits有符数)或dd(16 bits有符数),转移的方向地址的有效地址为:EA=IP+d或为:EA=IP+dd。这里IP表示当前的IP值,即本
39、条指令取出时的IP值。因为位移量是相对于当前IP的值来计算的,所以又称为相对寻址。如果为IP+d,称为段内短程转移;如果为IP+dd,称为段内近程转移。转移时完成的操作为:EA=IP+d(或dd)IP 返回 段内间接寻址段内间接寻址段内间接寻址方式:在这种寻址方式中,要转移到的指令单元的方向地址的16 位的段内偏移地址存放在存储器中的2个相邻的单元中或一个16位的通用寄存器中。这2个相邻存储单元地址的16 位段内偏移地址,是在指令码中以前面讨论过的数据的寻址方式中的某一种形式给出的。只不过在由寻址方式决定的16位偏移地址所对应的相应段中2个相邻单元中或16位的通用寄存器中存放的不是的操作数,而
40、是转移的方向地址在相应代码段中的16 位段内偏移地址。下一页转移时完成的操作为:(MM)=OFFSET 方向地址IP 或 rr =OFFSET 方向地址IP其中:OFFSET 方向地址表示转移的20位方向地址在相应代码段中的16 位段内偏移地址。MM表示连续2个字节单元在相应段中的 16 位段内偏移地址,(MM)表示MM作为16 位段内偏移地址的在相应段中连续两个单元的内容;rr表示一个16位的通用寄存器的内容。返回 段间直接寻址段间直接寻址段间直接寻址方式:在这种寻址方式中,在指令的转移方向地址码中包括一个32位的地址指针(由一个16位的段基和一个16 位的段内偏移地址组成),该地址指针的存
41、放满足高(位字)高(位地址)、低(位字)低(位地址)的原则。转移时完成的操作为:OFFSET 方向地址IP SEG 方向地址CS 其中,SEG 方向地址 表示20位方向地址的段基。OFFSET 方向地址 表示20位方向地址的16 位的段内偏移地址。返回 段间间接寻址段间间接寻址段间间接寻址方式:在这种寻址方式中,要转移到的指令单元的方向地址对应的一个32位的地址指针(由一个16位的段基和一个16 位的段内偏移地址组成)存放在存储器中的4个相邻的单元中。这4个相邻存储单元地址的16 位段内偏移地址,是在指令码中以前面讨论过的数据的寻址方式中的某一种形式给出的。只不过在由寻址方式决定的16位偏移地址所对应的4个相邻单元中存放的不是的操作数,而是转移的方向地址的32位地址指针。下一页转移时完成的操作为:(DMM)=OFFSET 方向地址IP (DMM+2)=SEG 方向地址CS其中:SEG 方向地址表示20位方向地址的段基。OFFSET 方向地址表示20位方向地址的16 位的段内偏移地址。DMM表示连续4个字节单元的 16 位段内偏移地址,(DMM)表示DMM作为16 位段内偏移地址的连续两个单元的内容;(DMM+2)表示DMM+2作为16 位段内偏移地址的连续两个单元的内容。返回