cpu与汇编第二章寻址方式_第1页
cpu与汇编第二章寻址方式_第2页
cpu与汇编第二章寻址方式_第3页
cpu与汇编第二章寻址方式_第4页
cpu与汇编第二章寻址方式_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

第二章Intel8086/8088CPU的寻址方式和指令系统,2.1计算机组织结构,计算机系统,硬件:,软件:系统软件用户软件,Mainmemory,I/Obridge,Businterface,ALU,Registerfile,CPU,Systembus,Memorybus,Diskcontroller,Graphicsadapter,USBcontroller,Mouse,Keyboard,Display,Disk,I/Obus,Expansionslotsforotherdevicessuchasnetworkadapters,PC,hardware,Mainmemory,I/Obridge,Businterface,ALU,Registerfile,CPU,Systembus,Memorybus,Diskcontroller,Graphicsadapter,USBcontroller,Mouse,Keyboard,Display,Disk,I/Obus,Expansionslotsforotherdevicessuchasnetworkadapters,helloexecutablestoredondisk,PC,hellocode,hello.c,Mainmemory,I/Obridge,Businterface,ALU,Registerfile,CPU,Systembus,Memorybus,Diskcontroller,Graphicsadapter,USBcontroller,Mouse,Keyboard,Display,Disk,I/Obus,Expansionslotsforotherdevicessuchasnetworkadapters,helloexecutablestoredondisk,PC,hellocode,hello,worldn,hello,worldn,微型计算机的工作过程,微型计算机的工作过程就是执行程序的过程,而程序由指令序列组成,因此,执行程序的过程,就是执行指令序列的过程,即逐条地从存储器中取出指令并完成指令所指定的操作。由于执行每一条指令,都包括取指、译码和执行三个基本步骤,所以,微型计算机的工作过程,也就是不断地取指令、译码和执行的过程,直到遇到停机指令时才结束机器的运行。,优点:处理器简单通用,把复杂问题转移到存放解释程序存储器中,即把复杂的硬件设计转化为复杂的软件设计。,8086微处理器,8086/8088CPU内部的寄存器组,寄存器是CPU内部存放操作数的地方,它的操作速度比内存操作数速度快。8086共有14个寄存器,它们都是16位的,可以存放16位二进制数。通用寄存器:4个数据寄存器:AX、BX、CX和DX每个寄存器又可分为2个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL2个变址寄存器:DI和SI2个指针寄存器:SP和BP段寄存器4个段寄存器:ES、CS、SS和DS控制寄存器1个标志寄存器:FLAG(CF、AF、PF、ZF、OF、SF、IF、DF、TF)1个指令指针寄存器:IP,通用寄存器的作用,(1)数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。4个16位寄存器:AX:Accumulator,累加器BX:BaseRegister,基址寄存器CX:CountRegister,计数寄存器DX:DataRegister,数据寄存器上述4个寄存器可分为8个8位寄存器,分别为AH和AL、BH和BL、CH和CL、DH和DL。每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器“能分可合”的特性,灵活地处理双字、字和字节等信息。在32位处理器中,有4个32位寄存器:EAX、EBX、ECX和EDX。,通用寄存器,AX(accumulator):作为累加器,是算术运算的主要寄存器。所有I/O指令都使用它和外部设备传送信息。BX(base):除了作为一般的数据寄存器使用外,经常用做基址寄存器。CX(count):除了作为一般的数据寄存器使用外,常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。DX(data):除了作为一般的数据寄存器使用外,可以在处理双字长运算时把DX和AX组合使用,DX存放高位字。,通用寄存器,SP(stackpointer):除了作为一般的数据寄存器使用外,用来指示栈顶的偏移地址;BP(basepointer):除了作为一般的数据寄存器使用外,可以和堆栈段寄存器SS联合使用来指示堆栈段中的存储单元地址;SI(sourceindex)和DI(destinationindex):除了作为一般的数据寄存器使用外,可以和数据段寄存器DS联合使用来确定数据段中存储单元的地址注意:这四个寄存器只能以16位为单位一起使用,标志寄存器(程序状态字寄存器PSW),1514131211109876543210,状态标志:控制标志:,OF溢出标志DF方向标志SF符号标志IF中断标志ZF零标志TF陷阱标志CF进位标志AF辅助进位标志PF奇偶标志,OFDFIFTFSFZFAFPFCF,例:MOVAX,1MOVBX,2ADDAX,BX指令执行后,(AX)=3,OF=0,CF=0,ZF=0,SF=0例:MOVAX,FFFFHMOVBX,1ADDAX,BX指令执行后,(AX)=0,OF=0,CF=1,ZF=1,SF=0,Debug下的内存和寄存器(1),Debug下的内存和寄存器(2),一个16位寄存器可以存储一个16位的数据。(数据的存放情况)一个16位寄存器所能存储的数据的最大值为多少?答案:216-1。,通用寄存器,16位数据在寄存器中的存放情况,数据:18二进制表示:10010在寄存器AX中的存储:,16位数据在寄存器中的存放情况,数据:20000二进制表示:0100111000100000在寄存器AX中的存储:,通用寄存器,以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况:,通用寄存器,通用寄存器的作用,(2)变址寄存器(IndexRegister)SI:SourceIndexRegister,源变址寄存器DI:DestinationIndexRegister,目标变址寄存器它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,且具有特殊的功能。(3)指针寄存器(PointerRegister)它们主要用于访问堆栈内的存储单元,并且规定:BP:基指针(BasePointer)寄存器,用它可直接存取堆栈中的数据SP:堆栈指针(StackPointer)寄存器,用它只可访问栈顶,通用寄存器的作用,通用寄存器的隐含使用及特殊用途,几条汇编指令,汇编指令不区分大小写,几条汇编指令,CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。,几条汇编指令,寄存器与存储器的比较:寄存器存储器,在CPU内部在CPU外部访问速度快访问速度慢容量小,成本高容量大,成本低用名字表示用地址表示,Registers,On-chipL1cache(SRAM),Mainmemory(DRAM),Localsecondarystorage(localdisks),Larger,slower,andcheaper(perbyte)storagedevices,Remotesecondarystorage(distributedfilesystems,Webservers),Off-chipL2cache(SRAM),CPUregistersholdwordsretrievedfromcachememory.,L0:,L1:,L2:,L3:,L4:,L5:,Smaller,faster,andcostlier(perbyte)storagedevices,8086在取指令和寻找内存操作数的地址时,采用了分段寻找的方式,在同一时刻可将内存分成4个段:代码段、数据段、堆栈段和特别数据段,段与段之间允许有重叠。4个段寄存器是:CS(CodeSegmentRegister,代码分段寄存器)DS(DataSegmentRegister,数据分段寄存器)SS(StackSegmentRegister,堆栈分段寄存器)ES(ExtraSegmentRegister,特别分段寄存器)。这4个寄存器都只能够作为16位寄存器使用。8086内部有20根地址线,它可以直接访问的物理空间为1M字节,其编码区间为:00000H0FFFFFH。而CPU内部存放存储单元偏移量的寄存器(如IP、SP、BP、SI、DI和BX等)都是16位,它们的编码范围仅为:00000H0FFFFH。如何用16位寄存器有效地访问1MB的存储空间,8086采用了内存分段的管理模式,并引入存储器分段的概念。,段寄存器的作用,8086内存分段管理模式,(1)存储器的分段计算机的内存单元是以“字节”为最小单位进行线性编址的。为了标识每个存储单元,就给每个存储单元规定一个编号,此编号就是该存储单元的物理地址。16位微机把内存空间划分成若干个逻辑段,每个逻辑段的要求如下:逻辑段的起始地址(通常简称为:段地址)必须是16的倍数,即最低4位二进制必须全为0;逻辑段的最大容量为64K,这由16位寄存器的寻址空间所决定。按上述规定,1M内存最多可分成64K个段,即65536个段(段之间相互重叠),至少可分成16个相互不重叠的段。(2)物理地址的形成方式存储单元的逻辑地址分为两部分:段地址和偏移量。由逻辑地址得到其物理地址(PAPhysicalAddress)的计算方法如下:物理地址PA段地址16+偏移量,逻辑地址到物理地址的生成,加法器,逻辑地址,19,15,0,0,偏移地址,段地址0000,20-bit物理存储器地址,15,0,物理地址:每个存储单元唯一的20位地址段地址:段起始地址的高16位偏移地址:段内相对于段起始地址的偏移值(16位)(有效地址EA),8086内存分段管理模式,(3)段寄存器的引用段寄存器是因为对内存的分段管理而设置的。一般情况下,段寄存器及其指针寄存器的引用关系方面有如下规定:取指令所用的段寄存器和偏移量一定是用CS和IP;堆栈操作所用的段寄存器和偏移量一定是SS和SP;串操作的目标操作数所用的段寄存器和偏移量一定是ES和DI;其它情况,段寄存器除其默认段寄存器外,还可以强行改变为其它段寄存器。,CS和IP,CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器;IP为指令指针寄存器。,8086PC工作过程的简要描述,(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;(2)IP=IP+所读取指令的长度,从而指向下一条指令;(3)执行指令。转到步骤(1),重复这个过程。,8086PC工作过程的简要描述,在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。,CS和IP,内存中指令和数据都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。CPU根据什么将内存中的信息看作指令?CPU将CS:IP指向的内存单元中的内容看作指令。,CS和IP,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。,修改CS、IP的指令,在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。我们如何改变CS、IP的值呢?,修改CS、IP的指令,8086CPU必须提供相应的指令mov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令,修改CS、IP的指令,同时修改CS、IP的内容:jmp段地址:偏移地址jmp2AE3:3jmp3:0B16功能:用指令中给出的段地址修改CS,偏移地址修改IP。,修改CS、IP的指令,仅修改IP的内容:jmp某一合法寄存器jmpax(类似于movIP,ax)jmpbx功能:用寄存器中的值修改IP。,(4)存储单元的内容存储单元中所存放的二进制信息称为该存储单元的内容或值,并且规定:一个字节的内容是该字节单元内存放的二进制信息;一个字的内容是该字地址所指向的单元及其后继一个单元的内容拼接而成;一个双字的内容是该字地址所指向的单元及其后三个单元的内容拼接而成。在拼接“字内容”时,我们按“高高低低”的原则来处理,即:高存储单元(地址大的存储单元)的值是“字内容”的高8位,低存储单元(地址小的存储单元)的值是“字内容”的低8位。在拼接“双字内容”时也是如此。,8086内存分段管理模式,3.存储器,存储单元的地址和内容:,存储器以字节(8bit)为单位存储信息每个字节单元有一个地址,从0编号,顺序加1地址用二进制数表示(无符号整数,写成十六进制)一个字要占用相继的两个字节低位字节存入低地址,高位字节存入高地址机器以偶地址访问(读/写)存储器字单元地址用它的低地址来表示,存储器的分段:,20根地址线:地址范围00000HFFFFFH机器字长16位:仅能表示地址范围0000HFFFFH小段:每16个字节为一小段,共有64K个小段小段的首地址00000H0000FH00010H0001FH00020H0002FHFFFF0HFFFFFH段起始地址:小段首地址段的大小:64K范围内的任意字节,存储器的逻辑分段:,例:(DS)=0400H,EA=1234H,物理地址=16d(DS)+EA=05234H,CPU可以用不同的段地址和偏移地址形成同一个物理地址:物理地址段地址偏移地址05234H0400H1234H0523H0004H0520H0034H,8086/8088有两个独立的存储空间和I/O地址空间,地址空间为1MB,I/O地址空间为64KB。数据按字节、字或双字存放,存放方式可按对正的双字边界或非对正的双字为边界。逻辑地址(logicaladdress)物理地址(physicaladdress)。物理地址=段地址*16+偏移地址,地址,00001H,00008H,00007H,00006H,00005H,00004H,00003H,00002H,Byte8,Byte7,Byte6,Byte5,Byte4,Byte3,Byte2,Byte1,Word6,Word4,Word2,Word0,Byte0,00000H,Word5,Word1,物理存储器,双字对齐,字对齐,Doubleword0,Doubleword4,图3.2对正的数据字和双字,Byte8,图(a)中数据5AF0H存放在对正的双字地址02000H,其中0F0H存放在低字节地址02000H,5AH存放在高字节地址02001H。图(b)中数据2C96H,对正的双字地址边界是0200CH。,地址,存储器(二进制),存储器(十六进制),地址,0200116,0200016,01011010,11110000,存储器(二进制),00101100,10010110,0200E16,0200D16,5A,F0,(b),(a),物理存储器,图3.4非对正的字或双字为边界的例子,地址,00001H,00008H,00007H,00006H,00005H,00004H,00003H,00002H,Byte8,Byte7,Byte6,Byte5,Byte4,Byte3,Byte2,Byte1,Word7,Word3,Byte0,00000H,字未对齐,Doubleword1,Doubleword2,Doubleword5,Doubleword3,双字未对齐,(a)非对正的双字边界的双字存储(b)对正的双字存储,(a)其中0123H存放在02104H处,此地址是对正的双字边界地址,而ABCD存放的起始地址是02102H,而该字的对正的双字边界应为02100H。完整的双字是0123ABCDH。,逻辑地址与物理地址之间的关系:段基址为002B0H,偏移地址为0013H,物理地址为002C3H。段基址为002C0H,偏移地址为0003H,物理地址为002C3H。,逻辑地址,2C4H,2C3H,2C2H,2C1H,2C0H,2BFH,2BEH,2BDH,2BCH,2BBH,2BAH,2B9H,2B8H,2B7H,2B6H,2B5H,2B4H,2B3H,2B2H,2B1H,2B0H,段基址,偏移(3H),偏移(13H),段基址,物理地址,图表示堆栈结构堆栈是一个特殊的随机存储区,用于临时存放一些信息如数据或地址。对于实模式,堆栈区为64KB,按32K个字组织,.,.堆栈段.,存储器(字宽),0000H,SP,SS,FFFEH,堆栈底部,堆栈顶部,图PUSHAX指令执行前的堆栈状态,堆栈,0011,2233,4455,6677,8899,AABB,0123,4567,89AB,CDEF,0105,0008,1062,1060,105E,105C,105A,1058,1056,1054,1052,1050,SS,SP,TOS,堆栈底部,PUSHAX指令执行后、POPAX和POPBX执行后堆栈状况,1062,1060,105E,105C,105A,1058,1056,1054,1052,1050,SS,SP,POPAX,TOP,控制寄存器的作用,(1)指令指针寄存器(InstructionPointer)指令指针IP是16位的寄存器,存放着下次将要执行的指令在代码段的偏移量。在80386及其高档处理器处于保护模式时,其指令指针寄存器是32位的EIP。(2)标志寄存器(FlagsRegister)FLAG寄存器的各位用来存放各种不同的标志。算术运算指令和逻辑运算指令的运行结果都将定性地反映在不同的标志位上,以便后续的条件判断指令根据这些标志实现判断转移,判断转移的实质是修改CS和IP。这也正是计算机能够实现判断转移的底层原理。,6个状态标志:OF、SF、ZF、AF、PF、CF3个控制标志:IF、DF、TF;7位保留;,标志寄存器,CF:进位标志,在进行字/字节运算产生进位或借位时置1,否则置0。PF:奇偶性标志,结果有偶数位为1时置1,否则置0。AF:辅助进位标志,当进行字节运算有低4位向高4位进位或借位时置1,否则置0。在作BCD码运算时常常使用。ZF:零标志,当运算结果为0时置1,否则置0。SF:符号标志,运算结果为负,即结果最高位为1时置1,否则置0。TF:陷阱标志,若IF=1,则在执行指令时产生单步中断。IF:中断标志,若IF=1开中断,响应可屏蔽中断;IF=0,关中断。DF:方向标志,DF置1引起串操作指令的变址寄存器自动减值,DF置0引起串操作指令的变址寄存器自动增值。OF:溢出标志,运算溢出时自动置1,当它为1时可用溢出中断指令产生中断。,机器语言(machinelanguage)CPU执行的程序都是用机器语言写成的。机器代码是二进制代码,一条机器语言指令长度,可以是1个字节或多个字节。微处理器只能理解机器语言,但直接用机器语言写程序几乎是不可能的。因此程序常采用其它语言来编写。汇编语言(Assembler),2.2寻址方式,程序(program)源代码(sourcecode)目标代码(objectcode)编译(assember)连接(link)指令(instruction)指令系统(指令集)操作码(opcode)操作数(operand)目标操作数(destinationoperand)源操作数(sourceoperand),指令格式操作码字段操作数地址字段地址结构二地址单地址隐含地址基本指令长度1-6字节。寻址方式形式地址有效地址EA物理地址PA,利用汇编语言编写程序具有以下优点:(1)用汇编语言编写的程序,程序的代码短,程序占用的内存少,程序运行速度要比用高级语言写的程序快;(2)汇编语言给予程序设计者更强的能力,实现高技术任务,而这些任务若用高级语言是难以实现或根本不能实现;(3)汇编语言的知识,有助于理解微处理器的结构,这是高级语言所没有的;(4)驻留程序和中断服务程序总是用汇编语言开发,汇编语言语句的一般格式是:标号:指令;注释例:START:MOVAX,BX;COPYBXINTOAXSTART是该指令的地址标识,叫做标号(Label)。在指令后面由分号(;)标识的是注释。00138A24NEXT:MOVAH,SI;MOVEABYTE其中8A24是指令MOVAH,SI的机器码,这是一条双字节指令,该指令的存储器地址是0013H和0014H。,汇编指令的书写形式一条汇编指令通常可以写成如下形式:标号:操作码目标操作数,源操作数;注释(1)其中中的内容为可选项。(2)标号必须是用字母打头的字母或数字组成的字符串,标号供转移指令作为转移的目标。(3)指令末尾的分号表示由;起直至ENTER前均为注释部分,在输入源程序时,每一条汇编指令的末尾必须输入换行键ENTER表示本指令的结束,下一指令的开始。,汇编指令的书写形式,操作码目标操作数,源操作数一条能汇编成机器代码指令的汇编指令必须有唯一的操作码。操作码是汇编指令的关键字,它指出该指令要做什么。一条汇编指令中的源操作数用来指出指令处理的对象来自何处。一条汇编指令中的目标操作数用来指出指令的处理结果置于何处。在许多指令中目标操作数既表示处理的对象之一来自何处,又指出处理的结果置于何处。目标操作数总是紧接着操作码出现在源操作数的左边,因此有也称目标操作数为左源。,汇编指令的书写形式,操作码目标操作数,源操作数指令行中可以没有源操作数和目标操作数。在这种情况下通常是对某一固定的或称作隐含操作数的操作。指令行中可以没有源操作数而仅含目标操作数。这时目标操作数既指出处理对象来自何处,又指出处理结果置于何处。这种指令被称为单操作数指令。指令行中既有源操作数又有目标操作数的指令称为双操作数指令。双操作数指令中目标操作数一定出现在源操作数的左边。,寻址方式就是寻找指令中的操作数的方式,寻址主要是指寻找内存数据的地址。,几个概念,寻址方式:根据指令中给出的地址寻找真实操作数地址的方式形式地址:指令中的地址码字段给出的地址有效地址:能够直接访问的存储器地址物理地址:存储器地址,汇编指令的书写形式,举例:LOOP1:AAA;此处可添加注释MOVAX,053H;此处可添加注释INCDH;此处可添加注释第一条指令:带标号LOOP1,AAA是操作码,这一指令隐含使用固定操作数AL;第二条指令:MOV是操作码,双操作数指令,AX是目标操作数,053H是源操作数第三条指令:INC是操作码单操作数指令在DOS下运行汇编程序,注释部分只能用英文和ASCII码符号书写,在中文操作系统下则可用中文书写,是指换行键。操作码通常是指指令功能的助记符,它给出了指令功能便于记忆的形式,例如,MOV是Movement的缩写等。,三种类型的操作数,(1)立即数(2)寄存器(3)内存,单操作数指令的操作数只能是寄存器操作数或内存操作数。双操作数指令的目标操作数只能是寄存器操作数或内存操作数,而源操作数可以是三者之一,但是两操作数不能同时为内存操作数。,(1)立即数操作数,立即数操作数作为代码指令的一部分出现在双操作数指令中。除了乘法、除法和字符串操作指令之外,立即数操作数均可作为源操作数。立即数操作数在汇编指令中可以以十六进、八进制、二进制或十进制形式书写,例如0F0H、777Q、101B、99D等,注意,在用十六进制书写时第一个字符是非数字09时,前面一定要补一个0,例如,FAH应记为0FAH。汇编指令中立即数操作数还可以以一个表达式的形式出现,此时该立即数就是表达式的值。,(2)寄存器操作数,寄存器操作数是以寄存器的内容参加运算,或用寄存器存放结果。MOVAX,3456H中的AX,MOVDL,41H中的DL就是寄存器操作数。段寄存器的内容指出当前4个段的基址,这些寄存器不能用一般的传送指令将立即数送入。如果需要将立即数置入段寄存器中的DS、ES或SS,则首先应将该值送入AX或其他通用寄存器,然后再由AX传送给DS、ES或SS。至于CS因其与指令地址有关,一般不需用户干预。标志寄存器FLAG的各位在执行算术逻辑运算指令后一般均被修改,其状态将依指令及执行结果而定,它可以反映出当时处理器和累加器所检测到的结果。标志寄存器一般不能作为操作数,但可用标志指令或INC、DEC、ADD、MUL、DIV等来处理。通用寄存器(AX、BX、CX、DX、SP、BP、SI、DI、AH、AL、BH、BL、CH、CL、DH、DL)和指针及变址寄存器(BX、BP、SI、DI)均可参加算术和逻辑运算操作。虽然经常把AX作为累加器,但所有通用寄存器均可用作累加器。通用寄存器在单操作数指令中可作目标操作数,在双操作数指令中既可作源操作数也可作目标操作数。,(2)寄存器操作数,一些汇编指令中虽然没有显式地写有寄存器,但是它却隐含着使用所指定的通用寄存器,详见表。,(3)内存操作数,内存操作数又称为存储器操作数,是指把内存某地址存放的字节、字作为指令的处理对象。这时要将该字节、字作为源操作数或目标操作数,当其作为源操作数时从内存中取出,或送到某个寄存器,或参加运算等;当其作为目标操作数时,则是将操作的结果置入该内存单元。无论是何种内存操作数,关键是必须找到其所在地址,即必须指出其所在段和相对于段首的位移(即有效地址EA),才能确定其物理地址。内存操作数地址的确定是寻址规则的重点。内存操作数所在段的段寄存器的名字在汇编指令中一般是不写的,它遵循着如前面的表所示的隐含原则,根据内存操作数类型的不同相应使用不同的段寄存器。,寻址方式,与数据有关的寻址方式(1)隐含寻址方式(2)立即数寻址(ImmediateAddressing)(3)寄存器寻址(RegisterAddressing)(4)直接寻址(DirectAddressing)(5)寄存器间接寻址(RegisterIndexAddressing)(6)寄存器相对寻址(RegisterRelativeAddressing)(7)基址加变址寻址(BasedIndexedAddressing)(8)相对基址变址寻址(BasedIndexedAddressing)与转移地址有关的寻址方式(1)段内直接寻址(2)段内间接寻址(3)段间直接寻址(4)段间间接寻址I/O端口寻址(I/OPORTAddressing),1.8086的寻址方式,与数据有关的寻址方式:立即寻址MOVAX,3069H寄存器寻址MOVAL,BH直接寻址MOVAX,2000H寄存器间接寻址MOVAX,BX寄存器相对寻址MOVAX,COUNTSI基址变址寻址MOVAX,BPDI相对基址变址寻址MOVAX,MASKBXSI,1隐含寻址方式2立即寻址方式操作数直接存放在指令中,紧跟在操作码后,它作为指令的一部分存放在代码中。操作数叫做立即数。立即数可以是8位、16位。例:MOVAL,15H机器码如下:地址存储器内容指令01000HB015MOVAL,15H01002HXX下一条指令,(1)立即寻址方式*操作数在指令中给出MOVAL,5MOVAX,3064HMOVAL,A*只能用于SRC字段*SRC和DST的字长一致MOVAH,3064H,3寄存器寻址方式指令的操作数存放在处理器的寄存器中,指令指明寄存器号,这些内部寄存器包括段寄存器和通用寄存器,寄存器可以分8位、16位。例:MOVAX,BXBX为源操作数,AX是目的操作数,该指令是将BX中的内容传送至AX,即传送后,BX的内容保持不变。地址储器内容指令010008BC3MOVAX,BX01002XX下一条指令,(2)寄存器寻址方式*操作数在指定的寄存器中MOVAX,BXMOVAL,BHMOVAX,3064H*字节寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字长一致MOVAH,BX*CS不能用MOV指令改变MOVCS,AX,4存储器寻址操作数存放在存储器中。CPU首先计算这个操作数的物理地址PA(physicaladdress),然后读或写这个操作数。PA=SBA:EA段基址*16+偏移量SBA(segmentbaseaddress)一个物理存储器段的起始地址。EA(effectiveaddress)为操作数相对该存储器段开始的偏移量。其有效地址计算的公式如下:EA=base+index+displacementBase为基址寄存器:BX、BP。Index为变址寄存器:SI、DI,Displacement为位移量:16位或8位。,隐含段前缀:DS:BX、DS:SI、DS:DI、SS:BP超越段前缀:可以利用其它的段寄存器作为段基址,需要使用段超越,即将段寄存器用显式方式“段寄存器”:放在间接寻址寄存器的左方括号前,如:MOVAL,ES:SI,(1)、直接寻址方式指令中地址码中给出的是有效地址,即形式地址就是有效地址。PA=段基址:直接地址段基址指:CS、DS、SS、ES例:MOVCX,DS:BETA地址存储器内容指令010008B0E3412MOVCX,DS:BETA01004XX设(03234)=0EDH,(03235)=0BEH,(DS)=0200H,BETA=1234H,指令执行后,将操作数0BEEDH传至CX。,(3)直接寻址方式*有效地址EA由指令直接给出例:MOVAX,2000HEA=2000H,假设(DS)=3000H,那么PA=32000H,*隐含的段为数据段DS*可使用段跨越前缀MOVAX,ES:2000H*操作数地址可由变量(符号地址)表示VALUEDB10MOVAH,VALUEMOVAX,VALUEMOVAX,WORDPTRVALUE,MOVAX,2000H;设(DS)=3000H执行结果(AX)=3050H可以用符号地址代替数值地址,如:MOVAX,VALUE;或者MOVAX,VALUEVALUE为存放操作数单元的符号地址。,DATASEGMENTDB41H;偏移量0DB42H;偏移量1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAGO:MOVAX,DATAMOVDS,AXMOVDL,DS:0;MOVAH,2INT21HMOVDL,DS:1;INT21HMOVAH,4CHINT21HCODEENDSENDGO,DATASEGMENTA1DB41H;变量A1,偏移量0B1DB42H;变量B1,偏移量1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAGO:MOVAX,DATAMOVDS,AXMOVDL,A1;MOVAH,2INT21HMOVDL,B1;INT21HMOVAH,4CHINT21HCODEENDSENDGO,(2)、寄存器间接寻址方式操作数的有效地址存放在通用寄存器BX、BP、SI、DI中。例:MOVAX,SI;其隐含的段寄存器为DS,设DS=0200H,SI=1234H,所读取的操作数物理地址为03234H,读取的操作数为0BEEDH,传送至寄存器AX中。地址存储器内容指令010008B04MOVAX,SI01002XX下一条指令.03234ED源操作数03235BE,(4)寄存器间接寻址*EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)中MOVAX,BXPA=16d(DS)+(BX)MOVAX,ES:BXPA=16d(ES)+(BX)MOVAX,BPPA=16d(SS)+(BP),*不允许使用AX、CX、DX存放EAMOVAX,CX*SRC和DST的字长一致MOVDL,BX;BX指示一个字节单元MOVDX,BX;BX指示一个字单元*适于数组、字符串、表格的处理,举例假设有指令:MOVAX,BX;在执行时,(DS)=2000H,(BX)=1000H,执行指令后AX50A0H.EA=1000H,物理地址为21000H,这种寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可取出表格中的下一项。,(3)、基址(变址)寻址方式(寄存器相对寻址)操作数的有效地址是由基址(变址)寄存器中的内容加上偏移量。偏移量是8位或16位的。基址寄存器:BX、BP变址寄存器:SI、DI例:MOVBX+BETA,AL其中BETA为立即数,操作数的有效地址是EA=BX+BETA该指令也可以写成如下形式:MOVBETABX,AL或MOVBX+BETA,AL,(5)寄存器相对寻址方式*例:MOVAX,COUNTSI或MOVAX,COUNT+SI假设(DS)=3000H,(SI)=2000H,COUNT=100H,那么PA=32100H假设(32100H)=1234H,那么(AX)=1234H*适于数组、字符串、表格的处理,若DS=0200H,BX=1000H,BETA=1234H,AL=0EDH,则指令执行后,指令的机器码及操作数按下述方式在存储器中存储:地址存储器内容指令0100088873412MOVBX+BETA,AL01004XX下一条指令.04234ED04235XX,基址寻址常用于对一维数组的访问,用基地址指向一维数组的第一个元素的地址指针,用偏移量指向数组中要访问的元素。,如图:,Element0,Element2,.数据结构.,Elementn,偏移量,基址寄存器,+,存储器,Elementn-1,Element1,一个数组元素的变址寻址,Elementn-1,Elementn,.数组.,变址寄存器,偏移地址,+,存储器,Element0,Element1,Element2,例如:MOVAX,BPVARAMOVAX,VARABPMOVAX,BPVARA,举例:MOVAX,COUNTSI,其中,COUNT为16位偏移量的符号地址。如果(DS)=3000H,(SI)=2000H,COUNT=3000H,则EA=2000H+3000H=5000H物理地址=30000H+5000H=35000H执行结果(AX)=1234H,(4)、基址变址寻址方式有效地址是基址寄存器与变址寄存器中数据之和。这种寻址模式可以被用于访问复杂的数据结构如二维数组。基址变址寻址的物理地址如下式所示:PA=段基址:基址+变址其有效地址如下:BXSI或BXSI表示:EA=(BX)(SI)BXDI或BXDI表示:EA=(BX)(DI)BPSI或BPSI表示:EA=(BP)(SI)BPDI或BXDI表示:EA=(BP)(DI),(6)基址变址寻址方式*MOVAX,BXDI或MOVAX,BX+DIMOVAX,ES:BXSI*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合MOVAX,BXBPMOVAX,SIDI,有效地址,(BX)(SI)(BP)(DI),+,举例:MOVAX,BXDI也可以表示为:MOVAX,BX+DI如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,则EA=0158H+10A5H=11FDH物理地址=21000H+11FDH=221FDH执行结果(AX)=1234H,(7)相对基址变址寻址方式MOVAX,MASKBXSI或MOVAX,MASKBX+SI或MOVAX,MASK+BX+SI,有效地址=,(BX)(SI)8位(BP)(DI)16位,+,+,位移量,访问存储器的方式偏移地址,默认的段寄存器,可跨越的段寄存器,取指令CS无IP堆栈操作SS无SP一般数据访问DSCSESSSEABP作为基址的寻址SSCSDSESBP串操作的源操作数DSCSESSSSI串操作的目的操作数ES无DI,段寄存器的使用规定,其有效地址如下:BXSIdisp表示:EA=(BX)(SI)dispBXDIdisp表示:EA=(BX)(DI)dispBPSIdisp表示:EA=(BP)(SI)dispBPDIdisp表示:EA=(BP)(DI)disp下列表达形式是等价的:BXSIdispdispBXSI或BXSIdispBXSIdisp但格式:BX1000H+SI、SI1000H+BX等是错误的,即所用寄存器不能在”“,”之外,该限制对寄存器相对寻址方式的书写也同样起作用。,相对基址变址寻址的有效地址形成,举例:MOVAX,MASKBXSI如果(DS)=3000H,(BX)=2000H,MASK=0250H,(SI)=1000H,则物理地址=30000H+2000H+1000H+0250H=33250H执行结果(AX)=1234H,相对基址加变址寻址方式与其它寻址方式之间的变形关系,5、与转移地址有关的寻址方式,这些寻址方式用来确定转移指令及CALL指令的转向地址。(1)段内直接寻址(Intrasegmentdirectaddressing)(2)段内间接寻址(Intrasegmentindirectaddressing)(3)段间直接寻址(Intersegmentdirectaddressing)(4)段间间接寻址(Intersegmentindirectaddressing),(1)段内直接寻址(Intrasegmentdirectaddressing)转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位偏移量之和。这是一种相对寻址方式;适用于条件转移及无条件转移指令,但当它用于条件转移时,位移量只允许8位,这称为短跳转。举例JMPNEARPRTPROGIAJMPSHORTQUESTPROGIA和QUEST均为转向的符号地址,在机器指令中,用偏移量来表示,符合程序再定位要求。在汇编指令中,如果偏移量为16位,则在符号地址前加操作符NEARPRT,如果偏移量为8位,则在符号地址前加操作符SHORT。,(2)段内间接寻址(Intrasegmentindirectaddressing)转向有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向有效地址用来取代IP寄存器的内容。此寻址方式及后两

温馨提示

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

评论

0/150

提交评论