微机原理课件.ppt
微机原理,制作者:张幸,在此幻灯片插入公司的徽标从“插入”菜单选择图片找到徽标文件单击“确定”重新设置徽标大小单击徽标内任意位置。徽标外部出现的方框是“调整控点”使用这些重新设置对象大小如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。,书名:微型计算机原理及接口技术 出版社:中国科学技术大学出版社 作者:周荷琴,吴秀清 版本:第四版,第一章 绪论,第一节 微型计算机系统微处理器、微型机计算机、微型计算机系统总线单片机、单板机、嵌入式系统(SOC),微处理器、微型机计算机、微型计算机系统,微处理器ALU:完成算术运算、逻辑运算累加器、寄存器:存放参加运算的数据、结果、地址程序计数器:指向下一条要执行的指令的偏移地址逻辑控制部分:负责对整机的控制,协调各部件工作内部总线,微型计算机CPU存储器:存放程序和数据输入输出接口:用于将外部设备与CPU和存储器相连接系统总线:CPU向存储器及接口电路提供地址、数据及控制信息的通路,ROM 只读存储器RAM 随机读写存储器,微型计算机系统微型计算机输入输出设备系统软件,总线,总线:计算机系统中,各个部件之间传送信息的 通路内部总线元件级总线局部总线,内部总线:微处理器内部各部件之间传送信息的通路单总线双总线三总线,元件级总线:连接计算机系统中两个主要部件的总线元件级总线采用三总线:地址总线、数据总线、控制总线地址总线:用于CPU向存储器或I/O端口传送地址数据总线:CPU与存储器及外设交换数据的通路控制总线:用来传送控制信息,局部总线:CPU总线、元件级总线局部总线用于多处理器系统,总线标准:国际上正式公布或推荐的系统各个模块互连的标准总线标准规定:插座的尺寸、引线的数目、信号的含义和时序,单片机单板机、嵌入式系统(SOC),第二章 8086系统结构,第一节 8086CPU的结构第二节 8086CPU引脚功能第三节 8086/8088存储器组织第四节 8086系统配置,第一节 8086CPU的结构,执行部件(EU)和总线接口部件(BIU)寄存器结构,执行部件(EU)和总线接口部件(BIU),8086CPU的内部结构由两部分组成:总线接口部件BIU、执行部件(EU),采用流水线工作方式总线接口部件BIU:负责取指令;存、取操作数执行部件(EU):负责分析指令、执行指令,通用寄存器,操作数,ALU,标志,段寄存器指令指针,地址生成和总线控制,指令队列,EU,BIU,BIU 总线接口部件组成:段寄存器 16位 CS SS DS ES 指令指针(IP)存放指令的偏移地址 地址形成逻辑 完成逻辑地址到物理地址转换 指令队列 采用FIFO结构,预取指令 总线控制逻辑 发出总线控制信号,任务:把段寄存器和IP相加形成20BIT有效地址 16*CS+IP 取指令 8086 如果队列中有2字节以上空格,EU不要求总线,则BIU预取指令 8088 如果队列中有1字节以上空格,EU不要求总线,则BIU预取指令 EU要求总线周期,有EU提供信号和地址来源,BIU进入总线,存取数据,EU执行部件组成:ALU算术逻辑运算单元 PSW标志寄存器 存放运算结果特征 寄存器组 存放中间结果 EU控制器 取指令控制、时序控制任务:从队列中取指令控制,访问M和I/O 由EU通知BIU提供信号和地址来源内部:根据指令要求对寄存器和标志管理,寄存器结构,通用寄存器指针和变址寄存器段寄存器指令指针标志寄存器,通用寄存器组,EAX AX AH ALEBX BX BH BLECX CX CH CLEDX DX DH DL,可8位、16位使用 用于存放数据或地址专用功能 BX基址寄存器 AX累加器 CX计数器 AX,DX用于乘、除,指针和变址寄存器,SP 堆栈指针 BP 基址寄存器 SI 源变址寄存器 DI 目的变址寄存器,用于堆栈操作,用于变址操作,这四个寄存器只能按16位操作用于堆栈和变址操作计算操作数的有效地址,ESPEBPESIEDI,段寄存器 存放每一段的起始地址,CS 代码段寄存器SS 堆栈段寄存器DS 数据段寄存器ES 附加段寄存器,用于存放程序 CS*16+IP取指用于存放堆栈 SS*16+SP堆栈用于存放数据 DS*16+SP,BP,SI用于存放数据 ES*16+BP,DI,指令指针IP每执行一条指令,IP自动加1IP指向偏移地址,有效地址16*CS+IP程序员不能直接修改IP,(通过转移、调用、中断、中断返回),标志寄存器PSW标志寄存器用来存放运算结果的特征6位状态位3位控制位,状态位:CF进位标志:,若最高位产生进位或借位,则CF置1若最高位无进位或借位,则CF清0,PF奇偶标志:,若运算结果中“1”的个数为偶数个,PF置1若运算结果中“1”的个数为奇数个,PF清0,AF辅助进位标志:,第3位向第4位有进位或借位 AF置1第3位向第4位无进位或借位 AF清0,ZF 零标志:若运算结果为0,则ZF为1,否则ZF为0,SF符号标志:,若运算结果为正,SF为0若运算结果为负,SF为1,OF溢出标志:若运算结果产生溢出OF为1,否则OF为0,控制位:DF方向标志TF 陷阱标志 若TF=1,CPU出单步工作方式,每执行一条指令,产生一次单步中断IF中断标志 当IF=1时,允许中断,当IF=0时,禁止中断,DF=0,地址指针自动增加(由低到高)DF=1,地址指针自动减少(由高到低),第二节 8086CPU引脚功能,8086芯片共计40个引脚,主要分成三类:地址线数据线和控制线。外加电源。CPU芯片的引脚完全反映了该芯片的内部功能以及和外界部件的交互方式。学习这部分内容着重考察CPU内部的功能模块以及输入输出需求,掌握引脚的功能定义。学习要求:信号名称 信号含义 有效电平 输入/输出 状态(两态/三态)信号来源,一、8086 CPU引脚及功能,地址总线和数据总线*AD15AD0:地址/数据总线 双向 三态 注:8086/8088地址线,数据线分时使用 总线的第一周期作地址线(16bit宽A15A0)其余周期 作数据线(8086 16bit/8088 8bit)*A19A16/S6S3:地址/状态 三态 输出 注:这四条线分时使用复用 总线的第一周期作地址线A19A16(与A15A0构成20bit)其余周期 作状态线 S6S3 注:8086访问存储器,使用20条地址线 8086访问I/O,使用16条地址线,S6S3:状态线S6:为低电平 S5指示中断允许IF状态S4 S3指示哪一个段寄存器 S4 S3 段寄存器 0 0 ES 0 1 SS 1 0 CS或非存储器操作 1 1 DS,控制总线 控制总线是传送控制信号的一组信号线,有 输入,输出。,*MN/MX线:最小/最大方式控制线 若MN/MX=1,8086处于最小方式 若MN/MX=0,8086处于最大方式8086具有两种系统配置方式:最小模式和最大模式,分别对应单机系统和多机系统。最小模式:由8086提供全部控制信号最大模式:由专用总线控制器8288提供总线控制信号在不同模式 8086的有些引脚不完全相同,脚 最大 最小 脚 最大 最小28 S2 IO/M 27 S1 DT/R26 S0 DEN 30 RQ/GT0 HOLD24 QS1 INTA 31 RQ/GT1 HLDA25 QS0 ALE 29 LOCK WR,受MN/MX影响的控制信号,*S2S0:总线周期状态信号 S2 S1 S0 操作类型 0 0 0 中断响应 0 0 1 读I/O端口 0 1 0 写I/O端口 0 1 1 暂停 1 0 0 取指 1 0 1 读存储器 1 1 0 写存储器 1 1 1 无效,最小方式:*IO/M 存储器/输入输出请求信号*DT/R 数据发送/接受端*DEN 数据允许端,*RQ/GT0*RQ/GT1在最大方式下:这两条信号为总线的请求和回答信号、两信号功能相同、RQ/GT0 优先、双向/RQ/GT 释放 在T4或下一个T1输出/GT,在最小方式*HOLD 总线请求信号、输入、高电平有效*HLDA 总线响应信号、输出、高电平有效,最大方式:QS1 QS0 为指令队列状态信号、输出、高电平有效 QS1 QS0 队列状态 0 0 无操作 0 1 取指令队列第一字节 1 0 队列空 1 1 取指令队列后续字节,最小方式:INTA 中断响应信号、输出、低电平有效ALE 地址锁存允许信号、输出、高电平有效,LOCK 最大方式有效、总线优先封锁信号 三态、输出、低电平有效WR 最小方式有效、写信号、三态、输出、低电平有效,不受MN/MX影响的控制信号,*RD读信号 三态 输出、低电平有效*READY 准备就绪信号、输出、高电平有效*INTR 中断请求信号、输入、高电平有效*NMI 非屏蔽中断请求信号、输入、正沿触发*TEST 测试信号、输入、低电平有效*RESET 复位信号、输入、高电平有效,复位后,8086CPU的状态:寄存器 状态 PSW 0000H CS FFFFH DS 0000H SS 0000H ES 0000H IP 0000H 指令队列 清空,其它CLK:时钟信号,由8284时钟产生VCC:电源 5V(5%)VSS:地,二、8086与8088引脚不同,数据线(8086:AD15AD0,8088:AD7AD0)存储器/输入输出控制线不同(8086:M/IO,8088 M/IO)BHE/S7不同(BHE是总线高允许),第三节 8086/8088存储器组织,一、存储器分段管理二、物理地址的计算方法三、逻辑地址来源四、8086/8088存储器分体结构五、堆栈的概念,一、存储器分段管理,20根地址线可寻址1MB地址空间,而实际寄存器是16位,只能寻址64KB空间。于是采用分段管理方式,每个段不超过64KB。段之间可连续,可分离,可重叠。段的首地址有限制,必须能被16整除。即低四位全为0。1 Paragraph=16 Bytes 每个存储单元由段地址和偏移地址组成,二、物理地址的计算方法,CPU内部寄存器是16位,给出的地址也是16位,不能直接用于20位地址空间的寻址,因此必须寻求一种将16位逻辑地址转换成20位物理地址的方法。逻辑地址:段基址和偏移地址组成,无符号16位二进制数,是程序设计是采用的地址。物理地址:存储器绝对地址。物理地址=16*段地址+偏移地址,三、逻辑地址来源,常用搭配关系:(CS,IP),(DS,SI/DI/BX),(SS,SP/BP)等等。,四、8086/8088存储器分体结构,8086,奇地址512K*8,D7D0,偶地址512K*8,D7D0,D15D8,D7D0,SEL A0A18,SEL A0A18,A1A19,A0,BHE,8088,A19A01M*8 D7D0,D7D0,A0A19,五、堆栈的概念,专用存储区域,暂时保存数据。“后进先出”(LIFO)SS段基址,SP栈顶单元地址堆栈生长方向:由高地址区向低地址区增长。用途:中断,子程序调用,暂存或交换数据。,例如:SS=C000H,SP=1000H,则,C0000H,C1000H,SP,栈底,64k,第四节 8086系统配置,8086具有两种系统配置方式:最小模式和最大模式,分别对应单机系统和多机系统。注意学习一般的计算机系统的基本配置方式,配置的策略,建立微型机系统的基本配置模型。,一、基本总线接口部件,地址锁存器8282/8283数据总线缓冲器8286/8287时钟发生器8284总线控制器8288总线裁决器8289,1.地址锁存器8282/8283,8282(不反相)和8283(反相)具有三态输出的锁存缓冲器,用于锁存、缓冲、多路输出8282的逻辑图8086系统中,8282(8283)用于地址锁存器连接:ALESTB OE接地 DIAD DOA(地址),D Q,CLK,DI0,STB,OE,DO0,DI1,DI2,DI7,DO1,DO2,DO7,2、数据总线缓冲器8286/8287,8286(不反相)8287(反相)具有8路双向缓冲电路,可实现8位数据的双向传送,8286/8287具有很强总线驱动能力,可作为总线驱动器8286逻辑图8086系统中,8286(8287)为总线驱动器连接:TDT/R OEDEN AAD BD(数据),A1,A2,A7,A0,或,或,B0,B1,B2,B7,OE,T,3、时钟发生器8284,提供整个CPU芯片的时钟控制信号,是实现精确控制的必要条件。三大功能模块:时钟信号发生器 OSC:14.318MHz CLK:4.77MHz,占空比1/3,供CPU PCLK:2.385MHz,占空比1/2,供外设复位生成电路就绪控制电路,4、总线控制器8288,由于8086系统配置为多处理器系统,有多个具有自主性的总线控制设备,原先的一些引脚用来传送其他控制信号,因此需要增加独立的总线控制器来输出总线控制命令。引脚功能:总线状态信号控制输入信号总线命令信号总线控制信号,两种工作方式:I/O总线方式:局部总线方式系统总线方式,5、总线裁决器8289,当系统中存在多个对总线具有主控权的设备时,每个主控设备需要增设8289来对总线进行合理分配,将总线使用权赋给优先权最高的设备。引脚功能:状态信号:8086CPU输出控制信号多总线命令信号系统信号,二、最大方式和最小方式基本配置,最小配置:1片8284、3片8282、2片8286最大配置:除最小配置,外加8288、8289,第三章 8086寻址和指令系统,8086指令系统具有灵活的指令格式、很强的寻址能力、能处理多种数据类型本章讨论8086寻址能力,指令格式,指令系统,第一节 8086寻址能力,寻址:指令寻找操作数的方法8086 的寻址方法有:立即寻址、存储器寻址、串操作寻址I/O端口寻址、程序转移寻址,立即寻址:指令中直接给出操作数的数值。如:MOV AL,26H MOV CX,2A50H立即寻址速度快,一般用于给寄存器或存储器赋初值,寄存器寻址:操作数存放在指令规定的寄存器中。如:MOV DX,AX寄存器寻址机器码字节最短,执行速度最快,直接寻址:指令直接给出操作数的偏移地址。(存储器寻址方式)直接寻址方式:MOV AX,2000H段超越前缀:MOV AX,ES:500符号地址:AREA1 DW 100 MOV AX,AREA1,寄存器间接寻址:操作数的有效地址EA存放在基址或变址寄存器。EA=,(BX)(SI)(DI)(BP),注:以BX,SI,DI为偏移地址,默认段DS 以BP为偏移地址,默认段SS,如:MOV AL,BX,寄存器相对寻址:操作数的有效地址EA是8位或16位的偏移量加基址或变址寄存器EA=,(BX)(SI)8位偏移量(DI)16位偏移量(BP),+,BP 默认段SSBX、SI、DI默认段DS,如:MOV BX,COUNTSI,基址变址寻址:操作数的有效地址EA是基址存器(BX或BP)加变址寄存器(SI或DI)。EA=,(BX)(SI)(BP)(DI),+,BP 默认段SSBX 默认段DS,如:MOV AX,BXSI MOV AX,BX+SI,相对基址变址寻址:操作数的有效地址EA是8位或16位的偏移量加基址寄存器(BX或BP)和变址寄存器(SI或DI)。EA=,(BX)(SI)8位偏移量(BP)(DI)16为偏移量,+,BP 默认段SSBX 默认段DS,如:MOV AX,MASKBXSI MOV AX,MASK+BX+SI,+,其它:隐含寻址I/O端口寻址一条指令几种寻址方式转移类寻址,I/O端口寻址直接端口寻址:指令中直接给出外设端口地址 如:IN AL,63H OUT 64H,AL间接端口寻址:指令DX寄存器为外设端口地址 如:MOV DX,213H IN AL,DX注:直接端口寻址范围(0FFH)间接端口寻址范围(0FFFFH),转移指令寻址方式段内直接寻址 立即短转移 JMP SHORT PROG_S(8位立即数)立即近转移 JMP NEAR PTR PRON_N(16位立即数)段内间接寻址 以存储器或寄存器作为转移目标地址 寄存器:JMP BX 存储器:JMP WORD PTR BX段间直接寻址 JMP FAR PTR PROG _F段间间接寻址 JMP DWORD PTRBX,Ffff0-0a00=ff5f0h,ds=ff5fh2010:0102=20100+0102=20202h5000:001e=50000+001e=5001eh3217:0e0f=32170+0e0f=3307fh10e0:002a=10e00+002a=10e2ah,第二节 指令机器码表示,8086采用变长指令格式,指令长度有16字节不等 第一字节:操作码 第二字节:操作数寻址方式 后面:无字节 2字节有效地址EA 12字节偏移量、12字节立即数 12字节偏移量、2字节的段地址,Op code,单字节 操作数隐含,Op code Reg,单字节 寄存器方式,Op code 11 Reg R/M,Op code mod Reg R/M,Op code mod Reg R/M 位低 位高,Op code 11 Reg R/M 数低 数高,Op code mod Reg R/M 位低 位高,数低 数高,寄存器至寄存器,寄存器至存储器,寄存器至存储器,立即数至寄存器,立即数至存储器,第三节 8086指令系统,指令系统是汇编语言程序设计基础汇编语言不如高级语言容易掌握学习要点:功能、寻址方式、对PSW影响8086指令系统分6类:数据传送、算术运算、逻辑和移位、字符串处理、转移类指令、处理机控制类。,一、数据传送指令,1、通用传送指令,指令名称 操作码 操作数 例,传送字或字节 MOV 目标,源 MOV ARRAYSI,AL,把字压入堆栈 PUSH 源 PUSH AX,把字弹出堆栈 POP 目标 POP AX,交换字节或字 XCHG 目标,源 XCHG AX,BX,字节翻译 XLAT 译码表 XLAT ASCII-TAB,MOV指令完成把1字节或1字内容从源操作数传送到目的操作数 格式:MOV 目标,源,立即数,存储器,段寄存器,通用寄存器,立即数不能做目的操作数无存储器间直接传送不能给CS、IP直接赋值不能用立即数对段寄存器赋值例:MOV AL,B MOV DX,OFFSET ARRAY MOV AL,AREA1 MOV AREA2,AL,PUSH 进栈指令 格式:PUSH 源,若BX=2500H DS=2130H SP=0040H SS=2000H执行 PUSH BX PUSH DS 执行后 SP=003CH,2000:0000,30,21,00,25,2000:0040,栈底,减1,SP,源操作数可以是通用寄存器、段寄存器、存储器。压栈时必须是字先压高字节、再压低字节,且SP减1,POP 出栈指令 格式:POP 目的,若:SP=003CH SS=2000H执行 POP DS POP BX 执行后 SP=0040HDS=2130HBX=2500H,2000:0000,30,21,00,25,2000:0040,栈底,加1,SP,目的操作数可以是通用寄存器、段寄存器、存储器。弹栈时必须是字先弹低字节、再弹高字节,且SP加1,2000:003C,XCHG 交换指令 格式:XCHG 目的,源 例:XCHG AX,BX+200H 注:源、目的可以是寄存 若:AX=2000H,DS=3000H 器,可以是存储器,BX=1800H,(31A00H)=1995H 但不能都是存储器。执行后:AX=1995H(31A00H)=2000H,XLAT 指令 格式:XLAT 或XLAT 表该指令采用隐含寻址表有效地址EA=BX+AL,查表后内容送AL例:把09的十进制数转换成七段码TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H MOV AL,5 MOV BX,OFFSET TABLE XLAT TABLE,2、输入/输出指令 IN 累加器,端口 OUT 端口,累加器如果端口地址在0000H00FFH,可用直接或间接寻址如果端口地址不在0000H00FFH,只能用间接寻址例:IN AX,21H(直接)MOV DX,210H(间接)IN AL,DX IN AL,210H(),名称 操作码 操作数 举例,装入有效地址 LEA 目,源 LEA BX,DI,指针装入DS LDS 目,源 LDS BX,TABLESI,指针装入ES LES 目,源 LES DI,ARRAYBX,这三条指令用于传送地址码,源操作数必须是存储器,目的操作数除段寄存器的16位寄存器。例:LEA BX,6DI 若:DI=0100H,DS=2000H,(20106H)=1234H,(20108H)=5678H则:LEA BX,6DI BX=0106H LDS BX,6DI BX=1234H DS=5678H,3、地址目标传送指令,4、标志传送指令LAHF 标志装入AH 将标志SF,ZF,AF,PF,CF送AH的7,6,4,2,0SAHF AH内容装入标志 将AH的7,6,4,2,0送标志SF,ZF,AF,PF,CFPUSHF 压标志POPF 弹标志,传送指令对标志影响:除 POPF SAHF 两条指令,其余指令均不影 响标志,二、算术运算指令,8086算术运算指令共有20条,分4组8086的4组指令为加法、减法、乘法、除法8086可处理四种类型的数:无符号、带符号、压缩BCD码、非压缩BCD码8086四种类型数的解释 二进制 十六进制 无符号数 带符号数 非压缩BCD 压缩BCD 00000111 07 7 7 7 7 10001001 89 137-119 无效 89 11000101 C5 197-59 无效 无效,1、加法指令 ADD 目的,源 目的源+目的 ADC 目的,源 目的源+目的+CF INC 目的 目的目的+1 AAA DAA说明:源操作数为立即数、通用寄存器、存储器 目的 通用寄存器、存储器 源、目不能都是存储器 算术运算指令影响标志,例:ADD AL,18H ADC BL,AL ADC AX,DX ADD AL,COSTBX INC BL INC CX INC BYTE PTRBX INC WORD PTRBX,AAA 为加法的ASCII 调整指令,适用非压缩BCD 码调整原则:若AL低4位9或AF=1 则ALAL+6,AL高4位清0,AF 1 CF 1,AH AH+1 否则:将AL高4位清0例:AX=9 BL=5,求两数之和(AL=39H,BL=35H)ADD AL,BL;AL=0EH AAA;AX=0104H,非压缩BCD码14,DAA加法的十进制调整指令,适用压缩BCD码调整原则:若AL低4位9或AF=1 则ALAL+6,进行低字节调整 若AL高4位9或CF=1 则ALAL+60,进行高字节调整,使CF=1例1、AL=38(BCD)BL=15(BCD),求两数之和 ADD AL,BL;AL=4BH DAA;AL=53H(BCD)CF 0例2、AL=88(BCD)BL=49(BCD),求两数之和 ADD AL,BL;AL=0D1H DAA;AL=37H,CF=1,使用AAA、DAA指令注意:仅对AL调整,运算必须是字节,且结果存在AL中参加运算的数必须合法,即压缩或非压缩BCD码紧跟在ADD、ADC、INC指令后面,2、减法指令 SUB 目的,源 目的目的-源 SBB 目的,源 目的目的-源-CF DEC 目的 目的目的-1 NEG 目的 目的0-目的 CMP 目的,源 源-目的 AAS DAS,说明:源操作数为立即数、通用寄存器、存储器 目的 通用寄存器、存储器 源、目不能都是存储器 算术运算指令影响标志,3、乘法指令 MUL 源 IMUL 源 AAM说明:*乘法指令只给出一个源操作数,另一源操作数,目的操作数采用隐含寻址*乘法指令可字节与字节乘,可字与字乘 字节乘:AX AL*源 字乘:DX AX AX*源*源操作数可选寄存器、存储器(说明字还是字节)*乘法影响标志CF,OF,例1:MUL DL MUL CX MUL BYTE PTRSI MUL WORD PTRBX例2:AL=55H,BL=14H MUL BL 执行后AX=06A4H CF=1,OF=1例3:AL=-28H,BL=59H IMUL BL 执行后AX=F98CH,CF=1,OF=1,乘法的ASCII调整:AAM 把AL/10商在AH,余数在AL例:MOV AL,09H MOV BL,06H MUL BL;AL=36H AAM;AH=05H,AL=04H,4、除法指令 DIV 源 IDIV 源 AAD说明:*除法指令只给出一个源操作数,另一源操作数,目的操作数采用隐含寻址*除法可完成字节或字除,取决于源操作数*字节除 商AL,余数AH AX/源(字节)字除 商AX,余数DX DXAX/源(字)*源操作数可选寄存器、存储器(说明字还是字节)*除法指令对标志无影响,但超过范围,产生中断,CBWCWD,例1:完成两个无符号数7A86H,04H相除 MOV AX,7A86H MOV DX,0 MOV BL,04H MOV AX,7A86H DIV BL MOV BX,04H 超过范围,产生除法中断 DIV BX 例2:-38/3的商和余数 MOV AX,-38 MOV AL,-38 MOV CH,03H MOV CH,03H IDIV CH CBW IDIV CH,符号扩展:CBW AL 符号扩展 AXCWD AX 符号扩展 DX,AX,除法的ASCII调整:AAD ALAH*10+AL,AH 0在做除法前先除例:完成非压缩BCD码37除5 MOV AX,0307H MOV BL,05H AAD;AL=25H DIV BL;AL=7(商)AH=2(余数),三、逻辑运算与移位指令,逻辑运算指令 名称 操作码 操作数 功能 非 NOT 目的 目的 目的 与 AND 目的,源 目的 目的源 或 OR 目的,源 目的 目的源异或 XOR 目的,源 目的 目的源测试 TEST 目的,源 目的源,与指令用来清除或保留操作数中某些位或指令用来保留或使操作数某些位置1异或指令可使某些位取反,某些位不变测试指令完成的功能是与,但不回送结果逻辑运算指令对标志影响:NOT 指令不影响标志,其余指令根据结果置 SF,ZF,PF、CF与OF 清0、AF 不确定。,移位与循环指令 逻辑左移 SHL 目的,计数值 算术左移 SAL 目的,计数值 逻辑右移 SHR 目的,计数值 算术右移 SAR 目的,计数值 循环左移 ROL 目的,计数值 循环右移 ROR 目的,计数值 带进位循环左移 RCL 目的,计数值 带进位循环右移 RCR 目的,计数值,SHL/SAL SHRSARROLRORRCLRCR,0,0,M,M,M,CF,CF,CF,CF,CF,CF,CF,移位:逻辑左移 无符号乘2 逻辑右移 无符号除2 算术左移 带符号乘2 算术右移 带符号除2循环指令用于按位检测,又能恢复原值场所8086循环和移位指令一次可移1位,也可移多位(CL)操作数形式:目的操作数 可选用存储器、寄存器 计数值 选1或CL对标志影响:AF无定义、PF,SF,ZF根据结果定、OF 移一位,根据结果定;移多位,不 确定,例1:MOV AL,10000101B MOV CL,03H;右移三位=除8 SHR AL,CL;AL=10H=16例2:MOV AL,10000000B MOV CL,03H SAR AL,CL;AL=F0H=-16,用移位指令和循环指令可完成多精度数移位例1:完成 AX,BX左移一位 SHL BX,1 RCL AX,1例2:完成AX,BX 右移一位(无符号数)SHR AX,1 RCR BX,1,四、字符串处理指令,传送字节串或字串字节串或字串比较字节串或字串扫描取字节串或字串存字节串或字串,MOVS 目的,源MOVSB/MOVSW,CMPS 目的,源CMPSB/CMPSW,SCAS 目的 SCASB/SCASW,LODS 源 LODSB/LODSW,STOS 目的 STOSB/STOSW,字符串指令有五种:传送、比较、扫描、取和存字符串指令采用隐含寻址,指令中用到寄存器和标志 寄存器/标志 用途 SI 源字符串的偏移量 DI 目的字符串的偏移量 CX 重复计数器 AL/AX DF ZF,SCAS 作为扫描值 LODS 作为目的操作数 STOS 作为源操作数,=0 SI,DI自动增量 CLD=1 SI,DI自动减量 STD,扫描/比较结束符,传送指令:从源区目的区 DS:(SI)ES:(DI)字节 SI1 SI DI1 DI 字 SI2 SI DI2 DI串比较:源串和目的串比较 DS:(SI)-ES:(DI)相等 1 ZF,不相等 0ZF字节 SI1 SI DI1 DI 字 SI2 SI DI2 DI串扫描:用于扫描某个关键字 字节 AL-ES:(DI)DI1DI 相等 1 ZF,不相等 0ZF 字 AX-ES:(DI)DI2DI 相等 1 ZF,不相等 0ZF,存入串指令:把累加器内容存入指定附加段 字节 ALES:(DI)DI1DI 字 AXES:(DI)DI2DI 取串指令:把数据段内容送累加器 字节 DS:(SI)AL SI1SI 字 DS:(SI)AX SI2SI,重复 REP 重复,直至CX=0 等于/为零重复 REPE/REPZ ZF=1重复串操作,直至CX=0不等/不为零重复 REPNE/REPNZ ZF=0重复串操作,直至CX=0,例1:要求把程序段以SRC-MESS为偏移地址的字符串HELLO传送到附加段以NEW-LOC的单元中。,例2:比较两个字符串,首址分别为PASSWORD,IN-WORD 若输入字符串相同,程序开始运行,否则,程序驱动扬声器发声,DATA SEGMENTPASSWORD DB 750430LIIN-WORD DB 750424LECOUNT EQU 8DATA ENDS,CODE SEGMENT ASSUME DS:DATA,ES:DATA LEA SI,PASSWORD LEA DI,IN-WORD MOV CX,COUNT CLD REPZ CMPS JNE SOUND OK:SOUND:CODE ENDS,在某一字符串中搜寻是否有字符A,若有,则把搜索次数记下来,送BX寄存器。若没有查到,则将BX 的内容清0,设字符串起始地址为0 MOV DI,OFFSET STRING MOV CX,COUNT MOV AL,A CLD REPNE SCASB JZ FIND MOV DI,0FIND:MOV BX,DI,五、控制转移类指令,控制转移类指令用于控制程序的走向8086的控制转移指令有无条件转移、条件转移、长转移、短转移。8086的转移指令有28条,分4组,1、条件转移指令,1)直接标志转移(10条)JC CF=1 JNC CF=0 JZ/JE ZF=1 JNZ/JNE ZF=0 JS SF=1 JNS SF=0 JO OF=1 JNO OF=0 JP/JPE PF=1 奇 JNP/JPO PF=0 偶,求AL,BL 两数之和、若有进位,则AH 置1,否则AH 清0 ADD AL,BL JC NEXT MOV AH,0 JMP EXITNEXT:MOV AH,1EXIT:,2)间接标志转移(8条)无符号数,JA/JNBE CF ZF=0 高于/不低于等于 JAE/JNB CF=0 高于等于/不低于 JB/JNAE CF=1 低于/不高于等于 JBE/JNA CF ZF=1 低于等于/不高于,带符号数,JG/JNLE(SF OF)ZF=0 大于/不小于等于 JGE/JNL SF OF=0 大于等于/不小于 JL/JNGE SF OF=1 小于/不大于等于 JLE/JNG(SF OF)ZF=1 小于等于/不大于,设某个学生的英语成绩已在AL寄存器,若低于60分,则打印F(FAIL),若高于或等于85,则打印G(GOOD),当60分和84分之间,打印P(PASS),CMP AL,60 JB FAIL CMP AL,85 JAE GOOD MOV AL,P JMP PRINT MOV AL,F JMP PRINT MOV AL,G,FAIL:,GOOD:PRINT:,在以首址为TABLE 的10个内存字节单元中存放10个带符号数,要求统计正数、负数和零的个数,并把结果存放在PLUS、NEGT、ZERO单元,DB 01H,80H,0F5H,32H,86H DB 74H,49H,0AFH,25H,40H DB 0 DB 0 DB 0 MOV CX,10 MOV BX,0 CMP TABLEBX,0 JGE GRET_EQ INC NEGT JMP NEXT JG P_INC INC ZERO JMP NEXT,PLUS:NEGT:ZERO:,AGAIN:,GRET_EQ:,INC PLUS INC BX DEC CX JNZ AGAIN,P_INC:NEXT:,TABLE:,2、无条件转移和过程调用,1)JMP 无条件转移段内直接寻址 立即短转移 JMP SHORT PROG_S(8位立即数)立即近转移 JMP NEAR PTR PRON_N(16位立即数)段内间接寻址 以存储器或寄存器作为转移目标地址 寄存器:JMP BX 存储器:JMP WORD PTR BX段间直接寻址 JMP FAR PTR PROG _F段间间接寻址 JMP DWORD PTRBX,2)过程调用和返回指令 调用:CALL 过程名 返回:RET RET N,3)循环控制指令 LOOP CX CX-1;(CX)0 循环 LOOPZ/LOOPE CX CX-1;(CX)0ZF=1 循环 LOOPNZ/LOOPNE CX CX-1;(CX)0ZF=0 循环 JCXZ(CX)=0循环,例1:设商店有8种商品,它们的价格分别为83元,76元,65元,84元,71元,49元,62元,58元,现将每种价格提价7元。,DB 83H,76H,65H,84H DB 71H,49H,62H,58H DB 8 DUP(?)MOV CX,08H MOV BX,00 MOV AL,OLDBX ADD AL,7 DAA MOV NEWBX,AL INC BX LOOP NEXT,OLD,NEW,NEXT:,例2:设有一个50字节组成的数组存放在ARRAY开始的内存单元,现要对该数组元素进行测试,查找第一个非零元素。,DB XX,XX,MOV BX,OFFSET ARRAY DEC BX MOV CX,50 INC BX CMP BX,00 LOOPE NEXT,ARRAY,NEXT:,例3:设一个由17个字符组成的字符串存放在STRING开始的内存,现要查找该字符串中是否包含空格符。若没有查到或尚未查完,则继续查找,直到找到第一个空格符或查完为止。,DB Personal Computer MOV BX,OFFSET STRING DEC BX MOV CX,17 INC BX CMP BX,20H LOOPNZ NEXT,NEXT:,STRING,4)中断指令 INT N INTO IRET,修改标志 CLC CF0 CMC CFCF STC CF1 CLD DF0 STD DF1 CLI IF 0 STI IF 1,六、处理器控制指令,8086与外部事件同步 HLT 停机 WAIT 等待 ESC 交权 LOCK 封锁,空操作 NOP 空操作,