《微机课件03第三章:指令系统》由会员分享,可在线阅读,更多相关《微机课件03第三章:指令系统(96页珍藏版)》请在金锄头文库上搜索。
1、第三章 8086指令系统,南理工紫金学院 帅辉明,8086操作数寻址方式 8086指令格式、功能,以及指令执行完以后对标志寄存器的影响,本章重点,指令 指令系统 指令格式:操作码+操作数 操作码 :表明指令完成的什么操作,以助记符形式 MOV、ADD、SUB等 操作数:表示指令的操作对象 常数 寄存器 存储器,3.1 指令系统概述,:能让计算机执行各种操作的命令。,:计算机所能执行的全部指令的集合。,根据指令码中提供操作数地址的数量,指令分为: 无操作数指令 单操作数指令: 双操作数指令 举例: HLT PUSH AX MOV AX,BX,指令的一般格式,操作数的寻址方式 概念:寻找操作数或操
2、作数地址的方法 目的:以确定数据的来源和去处。 源操作数 目的操作数,3.2 8086CPU的寻址方式,指令格式:指令 源操作数,目的操作数 指令 源操作数 指令 目的操作数,立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 基址寻址 变址寻址 基址变址寻址 基址变址相对寻址,操作数的寻址方式,存储器寻址,立即数操作数,寄存器操作数,(存储器操作数),操作数在指令码中,由指令直接给出。 MOV AX,1234H ; AX 1234H 对应的指令码:B8 34 12H 不需要访存取操作数,执行速度快,1.立即寻址,B8 34 12H,12H,34H,指令所需的操作数在CPU寄存器中。可以是8位或1
3、6位的通用寄存器和段寄存器。 MOV AX,SI MOV AH,CL MOV AX,DS 不需要访存取操作数,执行速度快,2. 寄存器寻址,操作数存放在存储单元的某一位置,指令中直接给出该存储单位的8/16位偏移量Disp 操作数默认存放在DS段中 格式:指令 操作数1,Disp 举例1:DS=2000H,ES=1500H MOV AX,1000H MOV AX,ES1000H,3.直接寻址,9,EA=Disp 操作数物理地址(默认段)*10H+Disp,物理地址=2000H*10H+1000H,物理地址=1500H*10H+1000H,南京理工大学紫金学院 陈琳琳,操作数如果不在DS数据段,
4、而在DS以外的段中,则需要在操作数前面加上段超越修饰符 修饰符为段寄存器的名称 如MOV AX,ES1000H,段超越,11,段超越,操作数存放在存储单元的某一位置,但偏移量存放在寄存器中(BX/BP/SI/DI) BX、SI、DI默认段为DS,BP默认段为SS 格式:指令 操作数1,寄存器,4.寄存器间接寻址,12,EA=BX/BP/SI/DI 操作数物理地址(默认段)*10H+寄存器中的偏移量,例:已知(DS)=2100H, (SS)=1100H, (ES)=3000H, (BX)=0010H, (BP)=1000H,求下列指令的源操作数的物理地址。 MOV AX,BX MOV AX,BP
5、 MOV AX,ES:BP,13,物理地址=(DS)*16+(BX)=21010H,物理地址= =(SS)*16+(BP)= 12000H,物理地址= =(ES)*16+(BP)= 31000H,操作数存放在存储单元某一位置,其EA由基址寄存器BX或BP加指令给出的Disp得到 默认段同寄存器寻址 格式: 指令 操作数1,基址寄存器+Disp 指令 操作数1,Disp基址寄存器 举例:MOV AX,BX+100H或MOV AX,100HBX,5.基址寻址,14,EA=BX/BP+Disp 操作数物理地址(默认段)*10H+寄存器+Disp,操作数存放在存储单元某一位置,其EA由变址寄存器SI/
6、DI加指令给出的Disp得到 默认段为DS 格式: 指令 操作数1,变址寄存器+Disp 指令 操作数1,Disp变址寄存器 举例:MOV AX,SI+100H或MOV AX,100HDI,6.变址寻址,15,EA=SI/DI+Disp 操作数物理地址(默认段)*10H+寄存器+Disp,操作数存放在存储单元某一位置,其EA由变址寄存器SI/DI加基址寄存器BX/BP得到 默认段同寄存器寻址 格式: 指令 操作数1,基址寄存器+变址寄存器 举例:MOV AX,BX+SI或MOV AX,BP+DI,7.基址变址寻址,16,EA=BP/BX+SI/DI 操作数物理地址(默认段)*10H+BP/BX
7、+SI/DI,操作数存放在存储单元的某一位置,其EA由变址寄存器SI/DI加基址寄存器BX/BP加指令给出的偏移量Disp得到 默认段同寄存器寻址 格式: 指令 操作数1,基址寄存器+变址寄存器+Disp 举例:MOV AX,SI+100H或MOV AX,100HDI,8.基址变址相对寻址,17,EA=BP/BX+SI/DI+Disp 操作数物理地址(默认段)*10H+BP/BX+SI/DI+Disp,位移量Disp 指令中的一个8/16位数 基地址 基址寄存器BX或基址指针BP的内容 变址 源变址寄存器SI或目的变址寄存器DI的内容,9.总结:EA的组成,10.各种寻址方式对比,19,1.
8、通用数据传送指令 MOV DST,SRC 功能:将数据从SRC复制到DST,3.4.1 数据传送指令,源、目的操作数均不能为IP、F,目的操作数不能为立即数、CS。 段寄存器之间不能用MOV指令传递数据。 立即数不能用MOV指令送到段寄存器。 DST和SRC不能同时为存储器操作数。 传送的源操作数和目的操作数必须同时为字或者字节。 立即数送存储单元时应该指出该存储单元为字单元还是字节单元。,注意:,MOV BX+SI, 255 应为:MOV BYTE PTRBX+SI, 255 或 MOV WORD PTRBX+SI, 255 或 MOV BX+SI, BYTE PTR 255 或 MOV B
9、X+SI, WORD PTR 255,举例1:,非法指令:255可以是8位数(1字节),也可以是16位数(2字节),BX+SI指向的存储单元不明确是字节还是字单元,判断下列指令是否正确,若不正确,请说明理由。 (1) MOV DS,CS (2) MOV IP,BX; (3) MOV CS,AX (4) MOV F,0000H (5) MOV AX,BX (6) MOV DX,IP (7) MOV BX,SI+DI (8) MOV 1000,30 (9) MOV ES,1000H (10) MOV AX,BL,举例2:,将立即数1234H送段寄存器DS 分析:立即数 段寄存器 立即数通用寄存器段
10、寄存器 MOV AX,1234H MOV DS,AX 将偏移量为3000H的存储单元中的1个字节送至偏移量为4000H的单元 分析:存储单元 存储单元 存储单元通用寄存器存储单元 MOV AL,3000H MOV 4000H,AL,举例3:,X,将寄存器BL的内容送寄存器DL 分析:通用寄存器 通用寄存器 MOV DL, BL 将AX的内容与CX的内容互换 分析:内容互换必须借助第三方 MOV BX,AX MOV AX,CX MOV CX,BX,举例4:,XCHG DST,SRC 功能:将SRC和DST互换,2.交换指令,1将CX的内容与DI的内容相交换 XCHG CX,DI 2将CX的内容与
11、数据段中某字单元内容交换,该字单元的偏移地址由DI指示 XCHG CX,DI,举例:,3MOV AX,1199H XCHG AH,AL MOV WVAR,5566H XCHG AX,WVAR XCHG AL,BYTE PTR WVAR+1,举例:,进栈:PUSH SRC 执行的操作: 出栈:POP DST 执行的操作: 在8086中,进栈、出栈均是以字为单位的。,3. 堆栈操作指令,16位的通用寄存器、段寄存器、存储单元,16位的通用寄存器、段寄存器(CS除外)、存储单元,(SP)1 SP,SRC高字节SP,(SP) DST低字节, (SP)+1 SP,(SP)1 SP,SRC低字节SP,(S
12、P) DST高字节, (SP)+1 SP,举例:,PUSH AX,POP BX,SP,AH,AL,SP,高,低,03H,62H,SP,SP,SP,MOV、XCHG、PUSH、POP不改变标志寄存器的值 标志位传送指令可能改变标志寄存器的值,4.标志位传送指令,取标志寄存器指令/存标志寄存器指令 LAHF SAHF 标志进栈指令/标志出栈指令 PUSHF POPF,标志寄存器操作指令,例:将标志寄存器F清零。,MOV AX, 0 PUSH AX POPF,CLC ;复位进位标志:CF0 STC ;置位进位标志:CF1 CMC ;求反进位标志:CFCF CLD ;复位方向标志:DF0,串操作后地址
13、增大 STD ;置位方向标志:DF1,串操作后地址减小 CLI ;复位中断标志:IF0,禁止响应可屏蔽中断 STI ;置位中断标志:IF1,允许响应可屏蔽中断,标志位操作指令,1.装入有效地址指令(即获取SRC的EA) LEA DST,SRC SRC存储器操作数。可以是变量、标号或地址表达式。 DST16位的通用寄存器 伪操作符OFFSET,可以在汇编过程中得到变量(或标号)的偏移地址。,5.地址传送指令,MOV BX, 400H MOV SI, 3CH LEA BX, BX+SI+0F62H,举例1:,BX= ?,139EH,变量WVAR的偏移量是0004H,值为4142H MOV AX,
14、WVAR LEA SI, WVAR MOV CX, SI MOV DI, OFFSET WVAR MOV DX, DI,举例2:,AX= ?,4142H,SI= ?,0004H,CX= ?,4142H,DI= ?,0004H,DX= ?,4142H,3种指令作用相同,完成累加器(AX/AL)与I/O端口间的数据传送。 输入 : IN AX/AL ,端口号 功能:端口数据 AX/AL 输出 : OUT 端口号, AX/AL 功能:AX/AL 端口,6.输入/输出指令,直接寻址 当端口地址255(00FFH)时,端口地址可以以立即数的形式直接出现在输入、输出指令中 间接寻址 当端口地址255时,必
15、须先将端口地址存于DX中,输入、输出指令中用DX表示端口地址,端口地址的寻址方式,例1:从地址为100的端口读入一个字节数据 IN AL, 100 例2:向地址为100H的端口写入一个字数据 MOV DX, 100H OUT DX , AX,举例:,或:MOV DX, 100 IN AL, DX,运算指令大部分会对标志寄存器产生影响 1加法/减法指令 指令格式:ADD/SUB DST,SRC 功能:将(DST)(SRC)的结果送入DST,根据运算结果设置标志寄存器中的6个状态位。,3.4.2算术运算指令,加法/减法指令,例1:(DL)=2EH,(AL)=2CH ADD AL, DL 结果:(AL)=5AH AF= , CF= , OF= , PF= , ZF= , SF= 例2:SUB AX, AX 和 MOV AX, 0的区别 SUB指令会影响状态标志位,MOV指令不影 响标志位。,举例:,指令格式:ADC/SBB DST,SRC 功能:(DST)(SRC) (CF) DST,并根据运算结果设置标志寄存器中的6个状态标志位。 用途:处理多字节数据的加减运算,一般可与普通的加减法指令联用。,2. 带进位的加法/带借位的减法指令,INC/DEC DST