微机课件03第三章:指令系统.ppt_第1页
微机课件03第三章:指令系统.ppt_第2页
微机课件03第三章:指令系统.ppt_第3页
微机课件03第三章:指令系统.ppt_第4页
微机课件03第三章:指令系统.ppt_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

第三章 8086指令系统,南理工紫金学院 帅辉明,8086操作数寻址方式 8086指令格式、功能,以及指令执行完以后对标志寄存器的影响,本章重点,指令 指令系统 指令格式:操作码+操作数 操作码 :表明指令完成的什么操作,以助记符形式 MOV、ADD、SUB等 操作数:表示指令的操作对象 常数 寄存器 存储器,3.1 指令系统概述,:能让计算机执行各种操作的命令。,:计算机所能执行的全部指令的集合。,根据指令码中提供操作数地址的数量,指令分为: 无操作数指令 单操作数指令: 双操作数指令 举例: HLT PUSH AX MOV AX,BX,指令的一般格式,操作数的寻址方式 概念:寻找操作数或操作数地址的方法 目的:以确定数据的来源和去处。 源操作数 目的操作数,3.2 8086CPU的寻址方式,指令格式:指令 源操作数,目的操作数 指令 源操作数 指令 目的操作数,立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 基址寻址 变址寻址 基址变址寻址 基址变址相对寻址,操作数的寻址方式,存储器寻址,立即数操作数,寄存器操作数,(存储器操作数),操作数在指令码中,由指令直接给出。 MOV AX,1234H ; AX 1234H 对应的指令码:B8 34 12H 不需要访存取操作数,执行速度快,1.立即寻址,B8 34 12H,12H,34H,指令所需的操作数在CPU寄存器中。可以是8位或16位的通用寄存器和段寄存器。 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数据段,而在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 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/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+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. 通用数据传送指令 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 BX+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 分析:立即数 段寄存器 立即数通用寄存器段寄存器 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的内容与数据段中某字单元内容交换,该字单元的偏移地址由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,(SP) 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,串操作后地址增大 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, 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时,必须先将端口地址存于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 功能: (DST) 1DST ,该操作不影响CF,影响其它状态标志位。 通常用来对计数器和地址指针进行调整。 INC SI DEC BYTE PTRBX,3. 加1/减1指令,可以是8/16位的通用寄存器或存储单元,;必须指明存储单元的类型,NEG DST 功能:DST 0- (DST),根据运算结果设置标志寄存器中的6个状态位。 运算结果:若DST是正数(负数)将其变成绝对值相等的负数(正数)。 例:假设已知(BL)=10011010,则执行指令 NEG BL,4. 求补指令,;(BL)=01100110,10011010 为负数,求补为11100110;变成负数为: 01100110,CMP DST,SRC 功能:根据(DST)-(SRC)的结果置标志位,但不改变DST的值。 通常在CMP后接JG、JZ、JC等条件转移指令。,5. 比较指令,可以是8/16位的通用寄存器、存储单元、立即数,可以是8/16位的通用寄存器、存储单元,MUL SRC 无符号数乘法 IMUL SRC 有符号数乘法 除了影响CF和OF,其他状态标志位内容不确定。,6. 乘法指令,例1:计算两个无符号数的乘积: 64H 0A5H MOV AL,64H MOV BL,0A5H MUL BL 例2 :MUL BX,举例:,应指定存储单元的类型 MUL BYTE/WORD PTR BX,X,DIV SRC 无符号数除法 IDIV SRC 有符号数除法 执行除法指令后,各状态标志位内容不确定。,7. 除法指令,1逻辑运算指令,3.4.3 逻辑运算与移位指令,可以是8/16位的通用寄存器、存储单元、立即数,可以是8/16位的通用寄存器、存储单元,例1. 测试AL的最高位是否为1,为1则跳转到标号L1处执行指令 TEST AL,1000 0000B JNZ L1 例2. 屏蔽AL的第0、1两位 AND AL, 11111100B 例3. 置位AL的第5位 OR AL, 0010 0000B 例4. 将AL的第0、1两位取反 XOR AL, 0000 0011B,举例:,算术移位 SAL DST,COUNT SAR DST,COUNT 逻辑移位 SHL DST,COUNT SHR DST,COUNT,2移位指令,COUNT1时,不可以直接写入指令,必须将其用CL寄存器值表示,DST可以是8/16位通用寄存器或存储单元,;将(DST)算术左移COUNT位,;将(DST)算术右移COUNT位,;将(DST)逻辑左移COUNT位,;将(DST)逻辑右移COUNT位,53,根据移位的结果置状态标志位(AF除外)。 移多位则OF无效,移1位时,对OF的影响: 算术/逻辑左移:移位后,若CF与DST的最高位不相等,则OF=1 ;否则OF=0。 逻辑右移:移位后,若DST的最高位与次高位不相等,则OF=1;否则OF=0。,移位指令对标志位的影响,算术/逻辑左移,55,10100101,CF,X,1 0100101_,CF,0,数据左移 n位,数值*2n,SAL/SHL AL, 1,溢出!,AL,算术/逻辑右移,56,1010 0101,CF,X,_1010 010 1,0,CF,_1010 010 1,1,CF,SHR AL, 1,SAR AL, 1,数据右移 n位,数值 /2n,溢出!,AL,不带进位的循环移位 ROL DST,COUNT ROR DST,COUNT 带进位的循环移位 RCL DST,COUNT RCR DST,COUNT,3循环移位指令,COUNT1时,不可以直接写入指令,必须将其用CL寄存器值表示,58,循环左移,59,1010 0101,CF,x,1 010 0101_,CF,1,1 010 0101_,CF,x,ROL AL,1,RCL AL,1,AL,循环右移,60,1010 0101,CF,x,_1010 010 1,1,CF,_1010 010 1,x,CF,ROR AL,1,RCR AL,1,AL,在指令系统中有一些特殊的指令,可以按需要用转移地址修改IP与CS的值,从而达到改变程序执行顺序的目的。这组指令称为程序转移指令。,3.4.4 程序控制指令,功能:使程序无条件的跳转到某一标号执行 标号:即某一地址的代号,1.无条件转移指令JMP,举例: JMP SUB1 SUB1:MOV AX,BX,JMP的格式,63,JMP SHORT 标号 JMP NEAR PTR 标号 仅修改IP的内容,CS内容不变 转移的有效偏移地址(EA)=Disp 段内短程转移(Disp为8位) 段内近程转移(Disp为16位),段内直接转移/段内直接寻址,JMP AE 若标号AE的偏移地址为0120H,则 执行JMP指令后,(IP)=0120H,段内直接转移例,= JMP 0120H,JMP 字地址指针 仅修改IP的内容,CS内容不变 转移的有效偏移地址EA在一个16位寄存器或在内存的相邻两单元中。 内存的地址根据寻址方式进行计算,段内间接转移/段内间接寻址,JMP BX 转移的偏移地址为BX所指的内存单元提供 (BX)=1000H (1000H)=2345H (IP)=2400H,段内间接转移指令(2),指令执行后 (IP)=2345H,JMP FAR PTR 标号 CS和IP均被修改 转移的目标地址的段基址和段内偏移均由指令码直接提供,段间直接转移/段间直接寻址,JMP DST 若DST为数据段标号,偏移地址为0110H (DS)=2000H,段间直接转移例,指令执行后 (CS)=2000H (IP)=0110H,= JMP 2000H:0110H,JMP DWORD PTR 双字地址指针 CS和IP均被修改 转移的目标地址的段基址和段内偏移在内存中相邻4个单元中。,段间间接转移/段间间接寻址,指向2个字单元,JMP DWORD PTR BX+ADD 段间间接转移 (CS)=1000H (IP)=026AH (DS)=2000H (BX)=1400H (ADD)=020AH,段间间接转移例,获取实际转移地址 的物理地址 DS*10H+BX+ADD=2160AH,2160AH,举例2:,72,sub/function PR1 JMP short A1 JMP A2 A1: A2: end sub/function,两条指令的地址差在8位补码表示范围 -128 +127内, 段内直接短程转移,两条指令的地址差在16位补码表示范围 -32768 +32767内, 段内直接近程转移,举例3:,73,sub/function PR1 JMP far ptr A3 end sub/function sub/function PR2 A3: end sub/function,两条指令不在一个段内, 段间远程转移,单测试条件转移指令 指令格式:JXX 目标标号,2.条件转移指令,例:若AX中存放的无符号数为偶数,则除以2,如果是奇数则加1后除以2,75,TEST AX, 0001H JZ EVEN ADD AX, 1 EVEN: SHR AX, 1,If(i%2=0) i=i/2; Else i=(i+1)/2,复合条件转移指令,MOV AL,80H CMP AL,50H JA K1 JMP K2 . K1: K2:,举例:,77,80H-50H并影响CF和ZF CF=0 ZF=0,判断CF和ZF,然后跳转,3.循环控制指令,78,隐含使用CX记录循环次数。,例1计算1+2+100=,举例:,79,MOV AX, 0 MOV CX, 100 MOV DX, REPEAT: ADD AX, DX INC DX LOOP REPEAT,a=0 c=100; d=1 Do a=a+d; d+; while(c0),过程即子程序: SUB 子程序名 ret或ret n END SUB 过程调用指令:CALL 过程名 过程返回指令:ret/ret n n代表返回参数的字节数,4.调用与返回指令,80,与无条件转移指令类似,过程调用可分为 段内直接调用 段内间接调用 段间直接调用 段间间接调用,与JMP的相似操作: 根据实际情况修改IP和CS的值 与JMP的区别: 要将当前IP和CS的入栈以便返回 可以带参数,5.中断指令,82,中断类型码,MOVS MOVSB MOVSW 传送 CMPS CMPSB CMPSB 比较 SCAS SCASB SCASW 搜索 LODS LODSB LODSW 读取 STOS STOSB STOSW 保存 REP REPE REPZ重复前缀,3.4.5 字符串处理指令,83,格式:MOVS 目的串,源串 功能:将一个字节或字从SI指向的源串复制到目的串,并且CPU将SI和DI自增1或2 DI-SI SI-SI+1/2 DI-DI+1/2,1. MOVSB MOVSW,格式:CMPS 目的串,源串 功能:将源串的一个字节或字减目的串的一个字节或字,不改变两个串,但影响标志位,并且CPU将SI和DI自增1或2 DI-SI SI-SI+1/2 DI-DI+1/2,2. CMPSB CMPSW,格式 SACS 目的串 功能:在目的串中查找AX或AL的内容,不保留结果,影响标志位,同时SI、DI自增1 AX/AL-DI DI-DI+1/2,3.SCASB SCASW,LODS 从SI指向的字符串取一个字节或字,送到AX/AL中,并将SI自增1/2 AX/AL-SI SI-SI+1/2 STOS 将AX/AL的内容存到从DI指向的字符串,并将DI自增1/2 DI-AX/AL DI-DI+1/2,4.LODS STOS,REP MOVS/STOS 功能:CX1,并处理一次字符串元素直到CX0 REPE REPZ CMPS/SCAS 功能:CX-1,处理一次字符串元素直到CX0或字符串元素不匹配 REPNE REPNZ CMPS/SCAS 功能:CX-1,处理一次字符串元素直到CX0或字符串元素匹配,5. 重复前缀指令,将字符串变量string1中的100个字节数据复制到string2中 MOV CX,100 LEA SI,STRING1 LEA DI,STRING2 REP MOVSB,举例:,处理器控制类指令用来控制 CPU的状态 ESC ;外部操作码, 源操作数 WAIT ;等待指令:CPU进入等待状态 LOCK ; 封锁总线 HLT ;暂停指令: CPU进入暂停状态 NOP ;空操作指令 SEG: ;段超越前缀

温馨提示

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

最新文档

评论

0/150

提交评论