1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五章 微机,CPU,的指令系统,1,计算机与信息工程学院,程序示例,2,DATASEGMENT,;段定义开始(,DATA,段),BUF1 DB 34H,BUF2 DB 2AH,SUM DB,?,DATAENDS,;段定义结束(,DATA,段),CODESEGMENT,;段定义开始(,CODE,段),ASSUME CS:CODE,DS:DATA,START:,MOVAX,,,DATA,MOVDS,,,AX,MOVAL,,,BUF1,ADDAL,,,BUF2,MOVSUM,,,AL,INT21H,CODEE
2、NDS,;段定义结束(,CODE,段),ENDSTART,;整个源程序结束,数据段,(数据定义),代码段,(汇编指令),第,5,章,3,常用传送指令,加减法指令,逻辑运算和移位指令,控制转移指令,字符(串)输入输出功能调用,5.1,汇编语言指令格式,汇编语言的语句一般是由分隔符分成的,三,个部分组成,:,指令助记符,操作数,操作数,;,注释,mov,ax,,,1000h,;对,ax,赋值,指令助记符可以是任何一条处理器指令,操作数的个数由对应的指令决定,助记符与操作数间由空格,(/TAB),分割,操作数间由逗号分割,以分号,开始的为注释内容,用以增加程序的可读性,4,5.1,汇编语言指令格式,
3、在学习一条指令时,请同学们注意如下几个方面:,指令的功能,该指令能够实现何种操作。,指令支持的寻址方式,该指令中的操作数可以采用何种寻址方式。,指令对标志,位,的影响,该指令执行后是否对各个标志位有影响,或者是标志位是如何影响指令执行的。,其他方面,该指令其他需要特别注意的地方,例如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等等。,5,5.2,指令系统,指令系统,就是指该计算机能够执行的全部指令的集合,每种计算机都有它支持的指令集合。,Intel 8086,指令系统共有,117,条基本指令,按照其功能可以分为以下几大类:,数据传送指令、,标志位操作指令、,算术运算指令、逻辑运算指令
4、移位操作指令,、位操作指令、比较运算指令、循环指令、,转移指令,、条件设置字节指令与,字符串操作指令,等等。,6,5.2.1,数据传送指令,数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令,传送指令把数据从一个位置传送到另一个位置,除标志寄存器传送指令外,均,不影响标志位,重点掌握,MOV XCHG XLAT PUSH POP LEA,7,5.2.1,数据传送指令,1.,传送指令,MOV,(,Move Instruction,),是使用最频繁的指令,相当于高级语言中赋值语句的作用。,指令格式,:,MOV op1,,,op2,op1,可以是寄存器或是存储器操作数,op
5、2,可以是寄存器、存储器或是立即数,8,传送指令,MOV,9,它的功能是把源操作数的值传送给目的操作数,指令执行以后目的操作数的值变化。,MOV,指令不影响标志位。,传送指令,MOV,MOV,指令的使用可以分为以下,4,种情况:,1).,寄存器与寄存器之间的数据传送,Mov,AX,,,BX,Mov,CL,,,AL,Mov,DX,,,ES,Mov,DS,,,AX,注意的是:,不能同时为段寄存器(演示),CS,不能作为目的操作数,但可以作为源操作数。,指针指令,IP,不能作为操作数。,10,通用寄存器到通用寄存器之间,通用寄存器与段寄存器之间,传送指令,MOV,2).,立即数到通用寄存器的数据传送
6、Mov AL,,,5FH,Mov BX,,,4045,Mov CH,,,0AH,注意立即数不能做为源操作数,就好像在高级语言中不能给常数赋值一样(不存在,3=a+1,这样的语句),立即数也不能传送到段寄存器。,11,传送指令,MOV,3).,寄存器与存储器之间的传送,Mov,AL,,,BUF1,Mov,AL,,,1000H,Mov,DI,,,DL,Mov,AX,,,BX+SI,Mov,BX+SI+100H,,,CL,12,buf1,是符号地址,直接寻址。,直接寻址。,寄存器间接寻址。,基址加变址寻址方式。,相对基址加变址寻址方式。,传送指令,MOV,4).,立即数到存储器的数据传送,立即数只
7、能作为源操作数,并需要与存储器变量类型一致。,MOV buf1,,,25,MOV BYTE PTR SI,,,40,13,传送指令,MOV,使用,MOV,指令需要注意以下几点:,立即数只能作为源操作数,也不能能将立即数传送给段代码寄存器,通用寄存器可以与段寄存器、存储器相互传送,通用寄存器之间也可以。但是段寄存器之间不能传送,,CS,也不能作为目的操作数,,IP,不参加传送。,存储器之间不能进行数据传送,需要借助通用寄存器作为中介。,14,5.2.1,数据传送指令,2.,传送填充指令,MOVSX/MOVZX,(,Move and Fill Instruction,),这一指令与,MOV,的功能
8、类似,不同之处是在传送时对目的操作数进行填充,可分为符号填充,(,MOVSX,),和零填充,(,MOVZX,),。,指令格式:,MOVSX/MOVZX,Reg/Mem,Reg/Mem/Imm,符号填充,(,MOVSX,),的填充方式是用源操作数的符号位来填充目的操作数的高位。,零填充,(,MOVZX,),的填充方式是用,0,来填充目的操作数的高位。,15,传送填充指令,例:已知(,AL,),=87H,指令,MOVSX CX,,,AL,和,MOVZX DX,,,AL,的执行结果是什么?,MOVSX CX,,,AL,MOVZX DX,,,AL,16,(,CX,),=0FF87H,(,DX,),=0
9、087H,5.2.1,数据传送指令,3.,交换指令,XCHG,(,Exchange Instruction,),交换指令用来将源操作数和目的操作数内容交换,操作数可以是字、也可以是字节,可以在,通用寄存器,与通用寄存器或存储器之间对换数据,,但不能在存储器与存储器之间对换数据。,指令格式:,XCHG,Reg,Reg/Mem,17,交换指令,XCHG,18,交换指令,XCHG,用交换指令实现寄存器之间的数据交换,mov,ax,1234h;ax=1234h,mov,bx,5678h;,bx,=5678h,xchg,ax,bx,;ax=5678h,,,bx,=1234h,xchg,ah,al ;ax
10、7856h,用交换指令实现寄存器与存储器之间的数据交换,xchg,ax,2000h;,也可以表达为,xchg,2000h,ax,xchg,al,2000h;,也可以表达为,xchg,2000h,al,19,5.2.1,数据传送指令,4.,取有效地址指令,LEA,(,Load Effective Address,),LEA,的功能是将存储器的有效地址传递给指定寄存器,指令格式如下:,LEA,Reg,,,Mem,通常用来为指针或变址寄存器,BX,、,DI,或,SI,等赋初值。,20,取有效地址指令,LEA,例:有效地址的获取,mov,bx,0400h,mov,si,3ch,lea bx,bx+s
11、i+0f62h;,BX=0400+003c+0f62=139EH,这里,BX,得到的是主存单元的有效地址,不是物理地址,也不是该单元的内容。,21,5.2.1,数据传送指令,5.,取段寄存器指令(,Load Segment Instruction,),这组指令的功能是把内存单元的一个“低字”传给制定的,16,位寄存器,把随后的“高字”传给相应的段寄存器(,DS,,,ES,,,SS,,,FS,和,GS,)。其指令格式如下:,LDS/LES/LSS/LFS/LGS,Reg,Mem,22,取段寄存器指令,23,取段寄存器指令,例:地址指针的传送,Mov,word ptr3060h,0100h,Mov
12、word ptr3062h,1450h,lds,si,3060h;,ds,=1450h,,,si,=0100h,les di,3060h;,es,=1450h,,,di,=0100h,(讲一下书上的图,5.5,),24,5.2.1,数据传送指令,6.,堆栈操作指令,堆栈是一种重要的数据结构,具有“先进后出”的特点,主要具有两大类操作:进栈操作和出栈操作。先来看一下堆栈的结构:,25,堆栈操作指令,进栈操作,指令格式:,PUSH,Reg/Mem/Imm,SP,SP-2,SS:SP,reg/mem/seg,26,Push 7812h,PushA,;,其功能是依次把,AX,、,CX,与,BX,等寄
13、存器压入堆栈中。,(,pushAD,是其,32,位版本),堆栈操作指令,27,堆栈操作指令,出栈操作,指令格式:,POP,Reg/Mem,reg/mem/seg,SS:SP,SP,SP+2,28,PopA,;,其功能是依次把,AX,、,CX,与,BX,等弹出堆栈,与,pushA,对称使用。,(,POPAD,是其,32,位版本),POP ax,堆栈操作指令,29,堆栈操作指令,堆栈是系统中不可缺少的数据区域。堆栈可用来临时存放数据,以便随时恢复它们。堆栈也常用于在子程序间传递参数。堆栈还常用于子程序或中断现场的保护和恢复,30,5.2.1,数据传送指令,7.,转换指令,XLAT,换码指令有两个隐
14、含的操作数,BX,和,AL,,,指令格式如下:,XLAT ;,alds:bx+al,换码指令用于将,BX,指定的缓冲区中、,AL,指定的位移处的数据取出赋给,AL,。,例:将首地址为,100H,的表格中的,3,号数据取出,mov,bx,100h,mov,al,03h,xlat,31,转换指令,XLAT,32,5.2.2,标志位操作指令,标志位操作指令包括两类:,一类是标志位传送(主要是对标志位的保存和恢复)。,另一类是标志位操作(直接对标志位进行置位或复位操作)。,33,标志位传送指令,LAHF,;AHFLAGS,的低字节,SAHF,;FLAGS,的低字节,AH,SAHF,和,LAHF,是一对
15、相反功能的指令。它们只影响标志寄存器的低,8,位。,PUSHF,;SPSP-2,,,SS:SPFLAGS,POPF,;FLAGSSS:SP,,,SPSP+2,PUSHF,指令可用来保存全部标志位,,POPF,指令设置标志寄存器。,34,标志位操作指令,对进位,CF,操作,CLC,;,复位进位标志:,CF0,STC,;,置位进位标志:,CF1,CMC,;,进位标志求反:,CFCF,对方向位,DF,操作,CLD,;,复位方向标志:,DF0,STD,;,置位方向标志:,DF1,对中断允许位,IF,操作,CLI,;,复位中断标志,禁止可屏蔽中断:,IF0,STI,;,置位中断标志,允许可屏蔽中断:,IF1,35,






