第3章8086寻址方式与指令系统.ppt
《第3章8086寻址方式与指令系统.ppt》由会员分享,可在线阅读,更多相关《第3章8086寻址方式与指令系统.ppt(195页珍藏版)》请在三一文库上搜索。
1、第3章 8086寻址方式与指令系统,本章主要内容,3.1 概述,指令是指挥计算机进行操作的命令。 指令系统是指微处理器能执行的各种指令的集合。 程序是一系列按一定顺序排列的指令。 执行程序的过程就是计算机的工作过程。 微处理器的主要功能由它的指令系统来体现。 不同的微处理器有不同的指令系统,其中每一条指令对应着处理器的一种基本操作,这在设计微处理器时确定。,通常一条指令包括两部分: 操作码:决定要完成的操作 操作数:指参加运算的数据或是该数所在的内存单元的地址。 指令的一般格式如下: 操作码 操作数1,操作数2,操作数n 没有操作数的指令称为无操作数指令。 有两个操作数的指令称为双操作数或二地
2、址指令。 操作码和操作数地址都由二进制数码表示,整条指令以二进制编码的形式存放在存储器中。,指令系统与寻址方式的重要性,采用不同CPU的计算机的指令系统不同。 采用不同CPU的计算机的指令的格式不同。 采用不同CPU的计算机的各指令允许的寻址方式不同。 要使用某种微处理器,必须先要掌握其指令系统和各指令允许的寻址方式。,3.2 8086寻址方式,寻址方式: 指令中给出的求出操作数有效地址的方法。 寻址操作: 计算机按照指令给出的寻址方式求出操作数有效地址的过程。,808的七种基本的数据寻址方式,(1)立即寻址; (2)寄存器寻址; (3)直接寻址; (4)寄存器间接寻址; (5)寄存器相对寻址
3、; (6)基址变址寻址; (7)相对基址变址寻址。,存储器寻址方式,3.2.1 立即寻址,操作数直接出现在指令中,此时的操作数也叫立即数。 立即数紧跟在操作码后面,一起存放在代码段中。 例如: MOV AX,2010H 在该指令格式中,AX是目标操作数,2010H是源操作数。,立即寻址方式的指令执行示意图,立即寻址方式说明,在所有的指令中,立即数只能作源操作数,不能作目标操作数。 立即数应与目标操作数的长度一致。 立即数默认采用十进制形式,以十六进制形式出现的立即数应以字母H为后缀,以八进制形式出现的立即数应以字母Q为后缀。 以十六进制形式出现的立即数,若以字母开头,则必须以数字0为前缀。 立
4、即数还可以用表示+、-、/表示的算术表达式,也可以用圆括号改变运算顺序。 立即数只能是整数,不能是小数、变量或其它类型的数据。,3.2.2 寄存器寻址,操作数在寄存器中,在指令中指定寄存器号。 由于寄存器号短,因此,采用寄存器寻址方式的指令的机器码长度短。 操作数在寄存器中,指令执行时,操作就在CPU的内部进行,不需要通过访问存储器来取得操作数,因而指令的执行速度快。 在编程中,如有可能,应尽量在指令中使用这种寻址方式。 例如: MOV AX,2010H,寄存器寻址方式可用的寄存器,对于16位操作数,寄存器可以是: AX,BX,CX,DX SI,DI,SP,BP CS,DS,SS和ES 对8位
5、操作数,寄存器可以是: AH,AL BH,BL CH,CL DH,DL,寄存器寻址方式指令执行示意图,寄存器寻址方式说明,在一条指令中,寄存器寻址方式既可用于源操作数,也可用于目标操作数,还可以两者都用寄存器寻址方式。 源操作数与目标操作数的长度应一致。例如,不能将寄存器AX的内容传送到寄存器BH中,也不能将寄存器BH的内容传送到寄存器AX中。 两个操作数不能同时为段寄存器。 目标操作数不能是代码段寄存器。,3.2.4 直接寻址,操作数在存储器中,指令中以具体数值的形式直接给出操作数所在存储单元的有效地址EA。为了与立即数区别,该有效地址必须用括起。 例如: MOV AX,2010H 该指令的
6、源操作数采用直接寻址方式。 若(DS)=2000H,那么指令执行后,(AX)=1225H。,直接寻址方式指令执行示意图,采用直接寻址方式时,如果指令中没有用前缀说明操作数存放在哪个段,则操作数默认存放在数据段。 8086系统允许操作数存放在代码段、堆栈段或附加段。此时,就需要在指令中指明段超越。 例如: MOV ES:1225H,AX 该指令的目标操作数采用直接寻址方式。操作数存放在由ES指示的附加段中。 物理地址=ES10H+1225H。,在汇编语言指令中,可以用符号地址代替数值地址。 例如: MOV AX,NUMA 此时,NUMA是存放操作数的内存单元的符号地址。 上面这条指令还可以写成如
7、下的形式: MOV AX,NUMA 如DATA1数据存放在附加段,则可以用如下的形式指定段跨越前缀: MOV AX,ES: NUMA或 MOV AX,ES: NUMA,3.2.4 寄存器间接寻址,操作数的有效地址EA存放在基址寄存器BX、BP或变址寄存器SI、DI中。 为了区别于寄存器寻址方式,指令中指定的寄存器名要用括起来。 指令中使用SI、DI、BX寄存器时,操作数默认存放在数据段中;使用BP寄存器时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址=(DS)10H+(SI)/(DI)/(BX) 或 (SS)10H+(BP),例如: MOV AX,SI 该指令的源操作数采用寄存器间
8、接寻址方式。 若(DS)=2000H,(SI)=2010H,那么指令执行后,(AX)=1225H。 如操作数不存放在间址寄存器默认的段,则指定段超越的指令可采用如下形式。 MOV AX,ES:SI 此时,操作数的物理地址=ES10H+SI。,寄存器间接寻址方式指令执行示意图,3.2.5 寄存器相对寻址,操作数的有效地址EA是指令中指定的基址或变址寄存器的值与位移量之和。 指令中使用SI、DI、BX寄存器时,操作数默认存放在数据段中;使用BP寄存器时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址=(DS)10H+(SI)/(DI)/(BX)+8位或16位位移量 或 =(SS)10H+
9、(BP)+8位或16位位移量,例如: MOV AX,8BX 该指令的源操作数采用寄存器相对寻址方式。 若(DS)=2000H,(BX)=2008H,那么指令执行后,(AX)=1225H。,寄存器相对寻址方式的指令执行示意图,寄存器相对寻址说明,偏移量是符号数,8位偏移量的取值范围为:000FFH(即+127D-128D); 16位偏移量的取值范围为:00000FFFFH(即+32767D-32768D)。 8086汇编允许用下面三种形式表示相对寻址,它们是等效的。 MOV AX,BX+8 MOV AX,8BX MOV AX,BX+8,3.2.6基址变址寻址,操作数的有效地址EA是指令中指定的基
10、址寄存器的值与变址寄存器的值之和。 指令中使用基址寄存器BX时,操作数默认存放在数据段中; 使用基址寄存器BP时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址 =(DS)10H+(SI)/(DI)+(BX) 或 =(SS)10H+(SI)/(DI)+(BP),例如: MOV AX,BX SI 该指令的源操作数采用基址变址寻址方式。 若(DS)=2000H,(BX)=2008H,(SI)=8H,那么指令执行后,(AX)=1225H。,基址变址寻址方式的指令执行示意图,3.2.7 相对基址变址寻址,操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值以及8位或16位位移量之
11、和。 指令中使用基址寄存器BX时,操作数默认存放在数据段中; 使用基址寄存器BP时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址 =(DS)10H+(SI)/(DI)+(BX)+8位或16位位移量 或 =(SS)10H+(SI)/(DI)+(BP)+8位或16位位移量,例如: MOV AX,3BX SI 该指令的源操作数采用寄存器相对寻址方式。 若(DS)=2000H,(BX)=2008H,(SI)=5H,那么指令执行后,(AX)=1225H。,相对基址变址寻址方式的指令执行示意图,3.3 8086指令系统,8086指令系统包括六大类指令: 数据传送指令 算术运算指令 逻辑运算和移
12、位指令 串操作指令 控制转移指令 处理器控制指令,8086汇编指令中的操作数可以有零个、一个或两个,通常称为零地址、一地址或二地址指令。 二地址指令中的两个操作数分别称为源操作数和目标操作数。,3.3.1数据传送指令,数据传送指令是将数据或地址传送到寄存器、存储单元或I/O端口中。 包括5类: 通用数据传送指令; 累加器专用传送指令; 地址传送指令; 标志传送指令; 数据类型转换指令。,数据传送指令的共同特点,除了POPF和SAHF指令外,其他的数据传送指令的执行结果都不影响标志位。 指令中如果列出两个操作数,则指令的执行过程是:目标操作数源操作数。 指令中如果仅列出一个操作数,则另一个操作数
13、为隐含操作数。,1.通用数据传送指令,1)传送指令 格式:MOV 目标操作数,源操作数 功能:将源操作数的内容(一个字或一个字节)传送到目标操作数指定的寄存器或内存单元,源操作数内容不变。,MOV指令举例,MOV AL,5;字节传送,立即数送通用寄存器 MOV AX,BX;字传送,通用寄存器送通用寄存器 MOV DS,AX ;字传送,通用寄存器送段寄存器,MOV指令的使用说明,源操作数可以是立即数、寄存器或内存操作数。 目标操作数可以是寄存器或内存操作数。 立即数和CS寄存器只能作为源操作数,不允许作为目标操作数。 IP和PSW都不可作为源操作数或是目标操作数。 立即数不允许直接传送至DS、E
14、S或SS寄存器。 源操作数和目标操作数不允许同时是内存操作数,也不允许同时是段寄存器。 源操作数和目标操作数的类型必须相同,即同为字节类型或字类型。,1.通用数据传送指令(续),2)数据交换指令 格式:XCHG 目标操作数,源操作数 功能:源操作数的内容(一个字或字节)与目标操作数的内容(一个字或字节)互换。 例如: XCHG BL,AH ;字节交换,寄存器与寄存器的内容交换 XCHG AX,BXSI ;字交换,寄存器与内存单元的内容交换,XCHG指令的使用说明,源操作数和目标操作数都可以是寄存器或内存操作数。 源操作数和目标操作数不可同时是内存操作数。 源操作数和目标操作数不可以同时是寄存器
15、(累加器)AX。 段寄存器、寄存器IP或立即数不可以作为源操作数或目标操作数。 例如: XCHG AX,2011H;源操作数不能是立即数 XCHG CS,5SI;CS不能作为操作数 XCHG AX,AX ;源操作数和目标操作数不可同是AX,【例3-1】若两个字数据分别存储在内存单元NUM1和NUM2中,编写汇编程序段将这两个内存单元的内容互换。 汇编程序段如下: MOV AX,NUM1 XCHG AX,NUM2 MOV NUM1,AX,堆栈,堆栈是一块按照“后进先出”原则工作的内存区域。 把数据从栈顶存入堆栈中的操作称为入栈(或压入); 把数据通过栈顶从堆栈中取出的操作称为出栈(或弹出)。 堆
16、栈常被用于数据的暂存、交换、子程序的参数传递等场合。 在调用子程序或转入中断服务程序时,堆栈是默认的被用于保存返回地址的内存区域。 为了实现子程序或中断嵌套,也必须使用堆栈技术。,在8086系统中,堆栈所在的段就是堆栈段,它可以占用的最大空间是64KB。 堆栈段的段地址由SS寄存器指示。 堆栈指针寄存器SP始终指示栈顶的偏移地址并随着入栈和出栈操作而自动变化。 当进行压入操作后堆栈指针达到定义值,表明堆栈满;当执行弹出操作后堆栈指针回到初值,表明堆栈空。 当栈满时,再压入数据,称为“堆栈溢出”。,1.通用数据传送指令(续),3)堆栈操作指令 8086指令系统中: 堆栈操作指令中操作数的类型只能
17、是字,不能是字节。 立即数不能作为操作数。,进栈指令,格式:PUSH 源操作数 功能:源操作数入栈。 指令的执行如下操作: (SP) (SP) -2 (SS:SP)源操作数 说明: 源操作数可以是寄存器或是内存操作数。,出栈指令,格式:POP 目标操作数 功能:数据出栈,存入目标操作数。 指令的执行如下操作: 目标操作数(SS:SP) (SP) (SP) +2 说明: 目标操作数可以是段寄存器、16位寄存器或内存操作数。 当目标操作数是段寄存器时,不能是CS寄存器。,【例3-2】,设(SS)=2011H,(SP)=0020H,依次执行下列汇编指令后,分析堆栈中的数据和寄存器AX、BX、SP的变
18、化情况。 MOV AX,0103H MOV BX,1228H PUSH AX PUSH BX POP BX,2.累加器专用传送指令,(1)换码指令 格式一:XLAT 格式二:XLAT 表格首地址 功能:将内存表格中某一单元的值传送至寄存器AL,实现一种编码到另一种编码的转换。例如,把字符的扫描码转换成ASCII码。 指令的执行如下操作: 把数据段中偏移地址为BX+AL的内存单元的内容送到AL中,即:(AL) ( BX + AL)。,XLAT指令使用说明,源操作数、目标操作数均隐含。 该指令隐含说明:寄存器BX保存内存表格的首地址;寄存器AL保存表格中某单元在此表格中的偏移量。因此,在使用该指令
19、之前,必须先初始化BX和AL这两个寄存器。 该指令能访问的内存表格中的数据只能是字节类型的。 该指令能访问的内存表格的最大容量是256字节。 格式二中的表格首地址部分,只是为了提高程序的可读性而设置的。指令执行时,使用BX的值作为表格首地址。,XLAT指令用法举例,若(DS)=2000H,(BX)=0020H,(AL)=9H, 则执行指令XLAT后,(AL)=39H。,(2)输入/输出指令(I/O指令),(1)输入指令 格式一:IN AL,端口地址 格式二:IN AX,端口地址 格式三:IN AL,DX 格式四:IN AX,DX 功能:从指令中指定的I/O端口读入一字节数据到AL或一个字数据到
20、AX。,(2)输出指令,格式一:OUT 端口地址,AL 格式二:OUT 端口地址,AX 格式三:OUT DX,AL 格式四:OUT DX,AX 功能:将AL或AX的内容输出到一个8位I/O端口或16位I/O端口。,IN/OUT指令的使用说明,采用格式一和格式二时,端口地址的取值范围是:0FFH,可以寻址256个I/O端口。 当端口地址值超过255D时,只能采用格式三或格式四,把端口地址保存到寄存器DX中,此时,端口地址的取值范围是:0FFFFH,可以寻址65536个I/O端口。 当端口是8位时,目标操作数选用AL寄存器;当端口是16位时,目标操作数选AX寄存器。,IN/OUT指令的使用举例,M
21、OV DX,60H ;端口地址送DX寄存器中 IN AL,DX ;从60H端口写入一个8位数 OUT 90H,AX ;将16位数输出到90H端口,3.地址传送指令,在汇编程序中,地址是一种特殊操作数,区别于一般数据操作数,它无符号,长度为16位。 在8086系统中,有专门的指令进行地址传送。,(1)取有效地址指令LEA,格式:LEA r16,mem 功能:取内存单元mem的有效地址,送到16位寄存器r16中,即:r16 EA(mem)。 例如,设DS=2100H,BX=100H,SI=10H,(DS:110H)=1234H,则指令: LEA BX,BX+SI 执行后,(BX)=(BX)+(SI
22、)=110H。,(2)地址指针装入DS指令LDS 格式:LDS r16,m32 功能:把内存中的32位源操作数中的低16位送到指定寄存器r16中,高16位送到段寄存器DS中。即:r16 m32低16位;DS m32高16位。 (3)地址指针装入ES指令LES 把上述指令中的DS换成ES,即成为LES指令。,4.标志传送指令,标志寄存器用于记载指令执行引起的状态变化及一些特殊控制位,以此作为控制程序执行的依据。 标志寄存器是特殊寄存器,不能像一般数据寄存器那样随意操作,以免其中的值发生变化。,(1)取标志指令LAHF 格式:LAHF 该指令中的源操作数隐含为标志寄存器低8位,目标操作数隐含为AH
23、。 功能:把16位的标志寄存器低8位送寄存器AH。 (2)置标志指令SAHF 格式:SAHF 该指令中的源操作数隐含为AH,目标操作数隐含为标志寄存器。 功能:把寄存器AH中内容送至16位的标志寄存器低8位,此操作是LAHF的逆操作。,【例3-3】 编写汇编程序段,把标志寄存器的CF位求反,其他位不变。 LAHF ;取标志寄存器的低8位 XOR AH,01H ;最低位求反,其他位不变 SAHF ;送入标志寄存器的低8位,(3)标志入栈指令PUSHF 格式:PUSHF 该指令中的源操作数隐含为标志寄存器,目标操作数隐含为堆栈区。 功能:标志寄存器入栈。 SP SP2; (SP + 1,SP) F
24、LAG。,(4)标志弹出指令POPF 格式:POPF 该指令中的源操作数隐含为堆栈区,目标操作数隐含为标志寄存器。 功能:数据出栈到标志寄存器。 FLAG (SP+1,SP); SP SP + 2。 此操作是LAHF的逆操作。 SAHF和POPF指令直接改变标志寄存器的值。利用这一特性,可以非常方便地改变有关的标志位。,【例3-4】 编写汇编程序段,把标志寄存器TF位清零,其他标志位不变。 PUSHF ;标志寄存器入栈 POP AX ;取标志寄存器内容 AND AX,0FEFFH ;TF清零,其他位不变 PUSH AX ;新值入栈 POPF ;送入标志寄存器,5.数据类型转换指令,(1)字节转
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 寻址 方式 指令系统
链接地址:https://www.31doc.com/p-2601942.html