《微机原理及应用第二章讲述》由会员分享,可在线阅读,更多相关《微机原理及应用第二章讲述(22页珍藏版)》请在金锄头文库上搜索。
1、1 指令由操作码和操作数两部分构成。操作码表明指令要进行 什么样的操作;操作数是参加本指令操作的数据。操作数的表现形 式比较复杂,可以是参与操作的数值,也可以是参与操作的数值的 “地址”,需要通过寻址方式来体现。 操作码操作数 介绍操作数之前,首先要清楚计算机中的数据可以存放在哪里呢? 在计算机运行过程中大量的数据存储器中(MEM),这部分数据 处理时需要给出操作数所在存储单元的地址; 少量数据可以放在寄存器中,使用时也需要给出其地址; 接口中也有寄存器,对其访问需给出其端口地址(第5章介绍)。 2 1.存储器操作数 存放在代码段中的数据是指令格式编码的一部分,在取指 令是就随指令被取到CPU
2、,直接可以参加指令操作,通常称 为立即数。 存储器分为代码段、数据段、附加段和堆栈段,存放在数 据段、附加段和堆栈段中的数据即存储器操作数,其地址 表示比较复杂。 存放在外设端口中的数据称为端口操作数,CPU使用专用的 IN、OUT指令来对端口进行访问。 2.立即操作数 3.寄存器操作数 存放在寄存器中的数据称为寄存器操作数。 4.端口操作数 3 4 所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操 作数的存放位置,CPU在执行该指令时,按照指令格式中的表示找 到并对数据进行存取。 1.立即寻址(Immediate Addressing) 立即寻址中的操作数作为指令的一 部分存放在代码段
3、中,在取指阶段数据 随指令一起被取到CPU,这种数据在指 令格式中的直接表现为常数。 如:MOV AL,34H 代码段 1000H:0000H 1000H:0100H 操作码 34H AHAL 注:立即数可理解为常数,在指令中只能作为源操作数 2.寄存器寻址(Register Addressing) 寄存器寻址是指操作数存放在规定的寄存器中。 例如:MOV AX,BX AHAL 16位寄存器:AX、BX、CX、DX、 SP、BP、DI、SI; 8位寄存器:AH、BH、CH、DH、 AL、BL、CL、DL; 16位段寄存器:CS、DS、ES、SS。 SS、DS、ES既可以作为源操作数,也可 以作
4、为目的操作数,但不能互为目的操 作数。作为目的操作数时,源操作数不 能是立即数,CS只能作为源操作数。 BHBL 5 存储器操作数的寻址方式中,数据都存放于存储单元中,指令操 作过程中需要BIU通过一个总线周期的访问,才能获取操作数。存储 器操作数的寻址方式是怎么计算出操作数的有效地址EA(Effective Address)。有效地址EA是三个地址量因子一个以上组合,由CPU执行 单元EU计算出来。 存储器寻址(Memory Addressing) 位移量因子(Displacement):位移量是指令中直接给出的一个8/16位数; 基址量因子(Base):由基址寄存器BX或BP提供的内容;
5、变址量因子(Index):由变址寄存器SI或DI提供的内容。 注:3个地址量因子组合有7种方式。根据组合后地址量因子的特 点,最终合并成5种寻址方式。 6 7 3 存储器寻址之直接寻址(Direct Addressing) 在指令格式中直接给出操作数的有效地址,指令执行时CPU根据 给出的有效地址,在相应存储单元存取数据。 有效地址EA=位移量(只取位移量因子) MOV AX,2000H 操作如图所示: 数据段 3000H:0000H 3000H:2000H34H 12H AHAL 注: 存储器操作数都是给出其首地址 双操作数指令中,两个操作数不 能都是存储器操作数 不能MOV 3100H,3
6、200H 存储器操作数无超越前缀时,默 认段地址为DS;有BP参入寻址时默 认为SS 4存储器寻址之寄存器间接寻址(Register Indirect Addressing) 有效地址EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中 EA=(BX/BP)或(SI/DI)取一个基地址或变地址因子 MOV AX,BX 操作如图所示 数据段3000H:0000H 3000H:2000H34H 12H AHAL + 注: BX、SI和DI访问默认为数据段 BP访问默认为堆栈段 8 5存储器寻址之基址寻址(Register Relative Addressing) 操作数有效地址EA 是8
7、/16位的位移量(DISP8/16)与基址寄存器BX 、BP之和生成。 EA=(BX或BP)+DISP8/16 MOV AX,BX+10H 操作如图所示 数据段3000H:0000H 3000H:2010H34H 12H AHAL 20H00HBX + +0100H 注: BX访问默认为数据段 BP访问默认为堆栈段 有效地址由两个因子构成 9 6存储器寻址之变址寻址(Register Relative Addressing) 操作数有效地址EA 是8/16位的位移量(DISP8/16)与变址寄存器SI 、DI之和生成。 EA=(SI或DI)+DISP8/16 MOV AX,SI+10H 操作如
8、图所示 数据段3000H:0000H 3000H:2010H34H 12H AHAL 20H00HSI + +0100H 注: SI和DI访问默认为数据段 有效地址由两个因子构成 10 7存储器寻址之基址加变址寻址(Base-plus-Index Addressing) 有效地址EA是一个基址量与一个变址量之和构成。 EA=(BX/BP)+(SI/DI) MOV AX,BX+SI 操作如图所示 数据段3000H:0000H 3000H:3000H34H 12H AHAL 20H00HBX + 10H00HSI + 注: 基址因子BP访问默认为堆栈段 不能同时取两个基址因子;也不 能同时去两个变
9、址因子 11 12 有效地址是一个8/16位移量和一个基址与变址之和构成 EA=(BX/BP)+(SI/DI)+ DISP8/16 MOV AX,BX+SI+10H 操作如图所示 数据段3000H:0000H 3000H:3000H 34H 12H AHAL 20H00HBX + 10H00HSI + 3000H:3000H + 0010H 注: 基址因子BP访问默认为堆栈段 不能同时取两个基址因子;也不 能同时去两个变址因子 7存储器寻址之基址加变址寻址(Base-plus-Index Addressing) 8086/8088的指令系统,按照其功能可以分为以下六个功能组: 数据传送(Dat
10、a Transfer) 算术运算(Arithmetic) 逻辑运算(Logic) 串操作(String Manipulation) 程序控制(Program Control) 处理器控制(Processor Control) 不同指令其操作数的数量不同,主要有3种格式:(1)无操作数 指令;(2)单操作数指令;(3)双操作数指令。 13 14 传送指令是将数据送寄存器或者存储单元中;在寄存器之间、寄存器 与存储器之间进行数据传送。其传递遵循如图所示规则: 立即数 DS、ES、SS CS 通用寄存器存储器 立即数送寄存器立即数送存储器 立即数只能 做源操作数 寄存器间可以互 为目的操作数 寄存器
11、与存储其可以互 为目的操作数 DS、ES、SS不能互为 目的操作数 CS只能做源操作数 图中没有直接连接箭头指向的,可以用过转跳点过度,如MOV DS,1234H 可以改为: MOV AX,1234H和MOV DS,AX来实现。 1. 通用数据传送指令 (1)传送指令MOV:MOV DEST,SRC 功能:将源操作数送入指定目的操作数 该类指令不影响状态标志位 MOV AX,BX+SI+10H 操作如图所示 数据段3000H:0000H 3000H:3000H 34H 12H AHAL 20H00HBX + 10H00HSI + 3000H:3000H + 0010H 注 15 16 1. 通
12、用数据传送指令 (2)交换指令XCHG:XCHG DEST,SRC 功能:将源操作数、目的操作数内容互换 两个操作数不能同为存 储器操作数。 MOV AX,BX操作如图所示 BHBLBX 注 AHALAX (3)查表指令XLAT:XLAT 功能:ALDS:BX+AL。把 BX的内容作为数据段中数据 表的首地址,AL内容为查表 的项数,将其对应的字节单 元的值再送给AL 3000H:0000H 3000H:2000H 3000H:2005H 数据段 + 2000BX 表首址 查表项 +AL05H AL05H 34H 34H 1. 通用数据传送指令 (4)压栈指令PUSH:PUSH SRC 功能:
13、SPSP-2,SPSRC,将栈 顶指针上移两个字节后将源操作数压 入堆栈 PUSH AX执行如图所示 SS:0000H 12H34HAX SS:0102H SS:0100H 01H02HSP01H00HSP SP SP 堆栈 12H 34H (5)弹栈指令POP:POP DEST 功能: DESTSP、SPSP+2,将 栈顶内容弹到目的操作数中,然后堆 栈的栈顶指针下移两个字节 POP AX执行如图所示 SS:0000H XXHXXHAX SS:0102H SS:0100H 01H00HSP01H02HSP SP SP 堆栈 12H 34H 12H34HAX 17 18 2. 地址传送指令 (
14、1)取EA指令LEA:LEA REG,MEM 功能:将源操作数的有效地址送 指定寄存器 LEA BX,DI指令执行如图所示 : 数据段 4000H:0000 H 0100H DI XXXXH BX 0100H BX 4000H:0100 H EA=0100H 55H 66H (2)取地址指令LDS:LDS REG,MEM 功能:将MEM所对应的双字存 储单元数据的高字送入DS,低 字送入指令指定的寄存器 。 MEM为双字数据。 LDS BX,DI指令执行如图所示 : 数据段 4000H:0000 H 0100H DI XXXXH BX XXXXH DS 4000H:0100 H 55H 66H
15、 33H 44H 双字 6655H BX 4433H DS (3)LES的原理与LDS相似 一数据传送指令一数据传送指令 19 3. 标志传送指令 (1)LAHF指令:标志寄存器低8位送AH ,其操作如下: OF DF IF TF SF ZFAFPFCFFR AH OF DF IF TF SF ZFAFPFCFFR AH (2)SAHF指令: AH送标志寄存器低8位 ,其操作如下: (3)标志寄存器内容压栈指令PUSHF:将标志寄存器内容压入栈顶 (4)栈顶内容送标志寄存器指令POPF:将栈顶内容送标志寄存器 一数据传送指令一数据传送指令 20 算术运算参加运算的数据既可以是二进制数据也可以是
16、十进制 (BCD码)。二进制数据可以进行加、减、乘、除运算。十进制数 据分为压缩BCD码和非压缩BCD码,非压缩BCD码可以进行加、减、 乘、除运算,压缩BCD码只能进行加、减运算。要求运算数据与结 果相同码制表示;BCD码没有专门指令,先用二进制指令进行运算 ,将结果进行调整。 1. 二进制数据加(减)法指令 (1)ADD DEST,SRC 实现目的操作数加源操作数, 结果存放于目的操作数中 注:结果影响所有标志位 ADD AX,BX执行如图所示: 12H34HAX 56H78HBX + 68HACHAX CF=0 PF=0 AF=0 ZF=0 SF=0 OF=0 (A)SUB指令与ADD相似,只是进行减法操作 二算术运算指令二算术运算指令 21 1. 二进制数据加(减)法指令 (2)ADC DEST,SRC 实现目的操作数加源操作数, 再加上CF的内容,结果存放于 目的操作数中 注:该指令主要实现多字节数 据加法;结果影响所有标志位 ADD AX,BX执行如图所示:假设