微型计算机原理与接口技术(冯博琴第2版)第3章1_第1页
微型计算机原理与接口技术(冯博琴第2版)第3章1_第2页
微型计算机原理与接口技术(冯博琴第2版)第3章1_第3页
微型计算机原理与接口技术(冯博琴第2版)第3章1_第4页
微型计算机原理与接口技术(冯博琴第2版)第3章1_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

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

文档简介

第3章

指令系统1主要内容:指令系统的一般概念对作数的寻址方式六大类指令的操作原理:23.1概述指令:控制计算机完成某种操作,并被识别的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。38088/8086的指令系统(表3-1,92条指令):传数据传送指令算术运算指令逻辑运算和移位指令串操作指令控制转移指令处理器控制指令3.1概述43.1.1

指令的基本构成指令中应包含的信息:运算数据的来源运算结果的去向执行的操作51.指令格式执行何种操作目标操作数源操作数参加操作的数据或数据存放的地址操作码[操作数],[操作数]61.指令格式:

零操作数指令:操作码单操作数指令:操作码操作数双操作数指令:操作码操作数,操作数72、指令中的操作数1)立即数2)寄存器3)存储器参加操作的数据本身数据存放的地址81)立即数操作数立即数只能作为源操作数。其本身是参加操作的数据,可以是8位或16位。例:

MOVAX,1234HMOVBL,22H【注意】:立即数无法作为目标操作数(P93)立即数相当于高级语言的常数,可以是无符号或带符号数,其数值应在可取值范围内。92)寄存器操作数:参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH注意

:范围8位:0~255/-128~+12716位:0~35535/-32768~+32767103)存储器操作数参加运算的数存放在存储器的某一个或某两个单元中表现形式:[]立即数或寄存器11例:

MOVAX,[1200H]MOVAL,[1200H]1200H偏移地址AHAL22H11H┇

12段地址默认段DS,BP(SS)

,指定段有效地址:操作数的偏移地址也称有效地址EA多种寻找方式3)存储器操作数133.1.2指令的执行时间指令的字长影响指令的执行速度(常用指令的执行时间见附录C)对不同的操作数,指令执行的时间不同:

快!立即数寄存器存储器143.1.2指令的执行时间例:若CPU的时钟频率5MHz,即一个时钟周期0.2us,MOV指令寄存器到寄存器T=2×0.2=0.4us立即数到寄存器T=4×0.2=0.8us存储器到寄存器,采用基址、变址寻址T=(8+EA)×0.2=(8+8)×0.2

=3.2us153.1.3、CISC和RISC指令系统(了解)CISC指令系统(P95)优点指令的功能强,种类多,高级语言和机器语言间的距离缩小;缺点80-20定律指令系统复杂,控制逻辑不规整,给VLSI工艺造成困难。指令功能变强,但硬件复杂度增加,程序总的执行时间变长8088指令属于CISC163.1.3、CISC和RISC指令系统(了解)RISC指令系统尽量采用寄存器与寄存器之间的操作,以提高速度指令功能较弱,种类少,格式简单例如指令长度相等便于采用流水线,多数指令在1个计算机周期内完成CISC与RISC对比

用CISC编写的程序代码量小,总执行时间慢用RISC编写的程序代码量大,总执行时间快173.2寻址方式

寻找操作数所在地址的方法寻找指令转移地址的方法

本节寻址包括:18AHAL3.2.1立即寻址指令中的源操作数是立即数,即源操作数是参加操作的数据本身例:MOVAX,1200H代码段12H00HMOV┇

注意:低字节在低地址193.2.2直接寻址指令中直接给出操作数的偏移地址例:MOVAX,[1200H]设DS=20000H物理地址22H11H┇

数据段AHALDS:20000H1200H21200H203.2.2直接寻址与立即寻址区别:立即寻址的数在代码段,直接寻址的数在数据段直接寻址的16位操作数是地址,用[],P97直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。例:MOVAX,ES:[1200H]注意:不能漏方括号[]213.2.3寄存器寻址参加操作的操作数在CPU的通用寄存器中。例:MOVAX,BX

AX

BX223.2.4寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:P99

BX,SI,DIBP默认在数据段DS默认在堆栈段SS233.2.4寄存器间接寻址例例3-5:MOVAX,[SI]设DS=6000H,SI=1200H61200H物理地址AHAL1122数据段代码段22H11H┇

MOV参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。243.2.5寄存器相对寻址操作数的偏移地址为:寄存器的内容加上一个位移量例3-7:MOVAX,DATA[BX]设:DS=6000H,BX=1000H,DATA=0008H则:物理地址=60000H+1000H+8H=61008HAX=AHAL=[61009H][61008H]P100图3-6253.2.5寄存器相对寻址例3-8,将TABLE表中第10项放入AL

MOVSI,9;第10项,位移量9MOVAL,[TABLE+SI]以下写法等价MOVAL,DATA[SI]MOVAL,[SI]DATAMOVAL,[SI]+DATAMOVAL,DATA+[SI]MOVAL,[DATA+SI]联想:C语言中的数组下标为什么从0开始?263.2.6基址-变址寻址

寄存器间接寻址基址寻址(间址寄存器为基址寄存器BX,BP)变址寻址(间址寄存器为变址寄存器SI,DI)273.2.6基址-变址寻址操作数的偏移地址为:一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定例3-9:MOVAX,[BX][SI]DS=8000H,BX=2000H,SI=1000H物理地址=80000H+2000H+1000H=83000HP100图3-7283.2.6基址-变址寻址MOVAX,[BX][BP];同时出现两个基址寄存器MOVAX,[SI][DI];同时出现两个变址寄存器特别注意:(P101)不允许两个基址寄存器(BX/BP)或两个变址寄存器(SI/DI)组合在一起寻址293.2.7基址-变址-相对寻址操作数的偏移地址为:一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。操作数的段地址由选择的基址寄存器决定303.2.7基址-变址-相对寻址例3-10:MOVAX,DATA[BX][SI]物理地址:(DS)×16+(BP)+(SI)+DATAP101图3-8等价

MOVAX,DATA[SI][BX]MOVAX,[BX+DATA][SI]MOVAX,[BX+SI+DATA]MOVAX,[BX]DATA[SI]MOVAX,[BX+SI]DATA313.2.7基址-变址-相对寻址同样,基址-变址-相对寻址也不允许指令同时出现两个基址或两个变址寄存器下面两条指令是非法的

MOVAX,DATA[SI][DI]MOVAX,[BX][BP]DATA323.2.8隐含寻址指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中例:MULBL

指令的执行:(AL)×(BL)AX33实例例:设BX=0158H,DI=10A5H,位移量DIS=1B57H,DS=2100H,各种寻址方式下,有效地址和物理地址如下:34实例-直接、寄存器间接①直接寻址:MOVAL,DIS有效地址=1B57H物理地址=21000H+1B57H=22B57H

②寄存器间接寻址(寄存器为BX):

MOVAL,[BX]有效地址=0158H物理地址=21000H+0158H=21158HBX=0158H,DI=10A5H,

DIS=1B57H,DS=2100H35实例-寄存器相对变址寻址③BX寄存器相对间接寻址:MOVAL,[BX]+DIS有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH④变址寻址(寄存器为DI):MOVAL,[DI]有效地址=10A5H物理地址=21000H+10A5H=220A5HBX=0158H,DI=10A5H,

DIS=1B57H,DS=2100H36实例-寄存器相对变址、基址加编址⑤DI寄存器相对变址寻址:MOVAL,[DI]+DIS有效地址=10A5H+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCH⑥基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):MOVAL,[BX]+[DI]有效地址=0158H+10A5H=11FDH物理地址=21000H+11FDH=221FDHBX=0158H,DI=10A5H,

DIS=1B57H,DS=2100H37实例-相对基址加变址⑦相对的基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):MOVAL,[BX][DI]+DIS有效地址=

0158H+10A5H+1B57H=2D54H物理地址=21000H+2D54H=23D54HBX=0158H,DI=10A5H,

DIS=1B57H,DS=2100H383.38086指令系统主要内容:指令码的含义指令对操作数的要求指令的对标志位的影响指令的功能注意:P105的常用符号含义393.3.1数据传送指令从功能上包括六大类:数据传送算术运算逻辑运算和移位串操作程序控制处理器控制403.3.1数据传送指令数据传送指令按功能分为4类:通用数据传送输入输出地址传送标志位操作返回411、通用数据传送一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令特点:该类指令的执行对标志位不产生影响返回421)

一般数据传送指令一般数据传送指令MOV格式:MOVdest,src操作:(dest)

<---(src)例:MOVAL,BL431)

一般数据传送指令(1)指令特点

最普通、最常用操作数可以是8/16位,具体取决于寄存器的位数(2)功能①寄存器之间数据传送

MOVBX,SIMOVAL,BL②寄存器与存储器传送

MOV[BX],AXMOVAX,[6000H]441)

一般数据传送指令(2)功能③立即数到寄存器的传送MOVAL,5MOVBX,3078H④立即数到存储器传送MOVBYTEPTR[BP+SI],5MOVWORDPTR[BX],1005H⑤存储器到段寄存器

MOVDS,[1000H]MOV[6000H],ES451)

一般数据传送指令(3)指令对操作数的要求两操作数字长必须相同;两操作数不允许同时为存储器操作数;两操作数不允许同时为段寄存器;不能用立即数给段寄存器赋值;IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。46判断下列指令的正确性:MOVAL,BXMOVAX,[BX]05HMOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200],[SI]1)

一般数据传送指令47一般数据传送指令应用例例3-12:将MEM1开始200个字节送到MEM2开始的区域中MOVSI,OFFSETMEME1MOVDI,OFFSETMEME2MOVCX,200MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCXJNZNETHLTNEXT:返回482)堆栈操作指令内存特定区域,其地址存放在SS中,栈顶SP每次存取一个字(16)先进后出压栈时,SP=SP-2,出栈SP=SP+2。主要用于子程序调用中断响应参数传递11H┇

栈底SSSP22H栈顶高地址低地址492)堆栈操作指令压栈指令PUSH

格式:PUSHOPRD出栈指令POP

格式:POPOPRD注意操作数可用是通用寄存器和段寄存器(CS除外)

PUSHCS合法

POPCS非法50PUSH指令指令执行过程:SP←SP-2

[SP-1]←操作数高字节

[SP-2]←操作数低字节SP┇

堆栈段SP高8位低8位2)堆栈操作指令51设AX=1234H,SP=1200H执行PUSHAX指令后堆栈区的状态:SP1200H┇

堆栈段入栈前12H34HSP-2=11FEHAX12H34H1200H┇

堆栈段入栈后(1)压栈指令的操作2)堆栈操作指令52POP指令执行过程:

[SP]->操作数低字节

[SP+1]->操作数高字节SP+2->SPSP┇

堆栈段SP高8位低8位2)堆栈操作指令(2)出栈指令的操作532)堆栈操作指令执行POPAXAXSP=SP+21200H12H34H11FEH┇

堆栈段代码段PUSH(2)出栈指令的操作1234SP542)堆栈操作指令指令的操作数必须是16位的;操作数可以是寄存器或存储器两单元,但不能是立即数;不能从栈顶弹出一个字给CS;PUSH和POP指令在程序中一般成对出现;PUSH和POP执行顺序相反,以维持原来状态。(3)堆栈操作指令说明:55堆栈操作指令例例3-13MOVAX,9000HMOVDX,38FFHPUSHAXPUSHBXPOPAXPOPBX┇

PUSH和POP执行次序相同返回否则,会使AX和BX的内容互换,可用于逆序排列563)交换指令格式:XCHGREG,MEM/REG注:两操作数必须有一个是寄存器操作数不允许使用段寄存器。例:XCHG AX,BXXCHG [2000],CL返回574)查表指令格式:

XLAT说明:用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址操作:将BX+AL所指单元的内容送AL584)查表指令换码指令为XLAT,使累加器中的一个值变换为内存表格中的某一个值BX表基址,AL为索引值等价C语言解释:unsignedchar*BX,Buffer;BX=Buffer;AL=BX[AL];59数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出表中第11个代码的ASCII码303132...394142...45462000H+02000H+11‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’查表指令例可用如下指令实现:MOVBX,2000H;BX←表首地址MOVAL,0BH;AL←序号XALT

;查表转换执行后得到:AL=42H60查表指令例(a)典型的七段式LED器件(b)共阳极LED(c)共阴极LED

共阳极结构:数码显示端低电平有效共阴极结构:数码显示端高电平有效

例如共阴极接法中,数字7需要a、b、c三段为高电平对应段码00000111即07Hefg*abcdD4D5D6D7D0D1D2D3返回615)字位扩展指令(P113)将有符号数的符号位扩展到高位;无符号数的扩展规则为在高位补0指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及DX,AX除法时,要预先执行CBW(CWD)指令,以产生一个双倍长度的被除数,否则不能进行除法运算。62字节到字的扩展指令格式:

CBW操作:将AL内容扩展到AX规则:若最高位=1,则执行后AH=FFH若最高位=0,则执行后AH=00H结论:

如果AL<80H,执行CBW后AH=00H如果AL>=80H,执行CBW后AH=FFH63字到双字的扩展指令格式:

CWD操作:将AX内容扩展到DXAX规则:若最高位=1,则执行后DX=FFFFH若最高位=0,则执行后DX=0000H64字位扩展指令例判断以下指令执行结果:MOVAL,44HCBWMOVAX,0AFDEHCWDMOVAL,86HCBW返回65专门面向I/O端口操作的指令也称累加器传送指令指令格式:输入指令:INacc,PORT输出指令:OUTPORT,acc端口地址2、输入输出指令66指令寻址方式2、输入输出指令直接寻址直接给出8位端口地址,范围(0~FFH)间接寻址16位端口地址由DX指定,范围(0~FFFFH)间接寻址只能用DX寄存器做间址寄存器P11267例:从3FH端口读取一个字

INAX,3FH例:将23H写到端口03B0

MOVDX,03B0HMOVAL,23HOUTDX,AL2、输入输出指令68判断下列指令的正误:2、输入输出指令INAX,80HINAL,1200HOUT35H,ALOUTAL,35H返回693、地址传送指令取偏移地址指令LEALDS指令*LES指令*70操作:将变量的16位偏移地址取出送目标寄存器格式:

LEAREG,MEM

指令要求:源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器。取偏移地址指令LEA3、地址传送指令71LEA指令例3-18:

LEABX,BUFFERMOVAL,[BX]MOVAH,[BX+1]解释:内存单元BUFFER的偏移地址送BXBUFFER+1单元的数据送ALBUFFER+2单元的数据送AH

72LEA指令例3-19:

若BX=1000H,DS=6000H,[6150H]=33H,[6150H]=44H,执行下列指令的结果MOVBX,[BX+50]

61050H44H33H61051HMOV指令后44H33HBXLEA指令后1050BXLEABX,[BX+50H]73LEA指令比较下列指令:MOVAX,DATA1LEASI,DATA1

符号地址例如:DATA1偏移地址1200则,SI=1200┇

DATA112H34H数据段74LEA指令在程序中的应用例题:将数据段中首地址为MEM1的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放。编写相应的程序段

75

开始计数值=0?LEA指令在程序中的应用取源地址取目标地址送数据块长度到CL传送一个字节修改地址指针修改计数值NY结束76LEA指令在程序中的应用

LEASI,MEM1LEADI,MEM2MOVCL,50NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCLJNZNEXTHLTP107例题3-12返回774、标志位操作指令LAHFSAHFPUSHFPOPF隐含操作数AH隐含操作数FLAGS781)LAHF,SAHF指令格式:LAHF操作:将FLAGS(P48)的低8位装入AHSFPFAFZFCF….AHFLAGSD15D0D7D0SAHF执行与LAHF相反的操作792)PUSHF,POPF将FLAGS压入堆栈将当前堆栈顶的2B内容弹出到FLAGS返回803.3.2算术运算类指令算术运算指令涉及两种类型的数据1.无符号数2.有符号数

8位无符号数的范围为0~25516位无符号数的范围为0~655358位有符号数的范围为-128~+12716位有符号数的范围为-32768~+32767813.3.2算术运算类指令加法运算指令减法运算指令乘法指令除法指令823.3.2算术运算类指令规则:如运算结果为0,则ZF=1;运算中出现进位/借位时,CF=1;当无符号数运算产生溢出时,CF=1;当有符号数运算产生溢出时,OF=1;如运算结果为负数,则SF=1;如运算结果中有偶数个1,则PF=1。所有算术运算指令均影响状态标志。833.3.2算术运算类指令841、加法指令普通加法指令ADD

带进位位的加法指令ADC加1指令INC加法指令对操作数的要求与MOV指令相同851)ADD指令格式:

ADDOPRD1,OPRD2操作:

OPRD1+OPRD2ADD指令的执行对全部6个状态标志位都产生影响OPRD186ADD指令例MOVAL,78HADDAL,99H指令执行后6个状态标志位的状态87ADD指令例01111000+10011001000100011标志位状态:CF=SF=AF=ZF=PF=OF=101010882)

ADC指令指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样指令的操作:

OPRD1+OPRD2+CFOPRD1ADC指令多用于多字节数相加,使用前要先将CF清零892)

ADC指令例3-22:求两个4字节无符号数01017A379H+10067E4FH的和MOVAX,A379HADDAX,7E4FHMOVBX,0107HADCBX,1006H903)

INC指令格式:

INCOPRD操作:

OPRD+1OPRD不影响CF标志,常用于在程序中循环计数不能是段寄存器或立即数912、减法指令普通减法指令SUB考虑借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG减法指令对操作数的要求与对应的加法指令相同921)SUB指令格式:

SUBOPRD1,OPRD2操作:

OPRD1-OPRD2OPRD1对标志位的影响与ADD指令同93指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样指令的操作:

OPRD1-OPRD2-CFOPRD12)SBB指令943)DEC指令格式:

DECOPRD操作:

OPRD-1OPRD指令对操作数的要求与INC相同指令常用于在程序中修改计数值953)DEC指令例3-23延时子程序:Delay:MOVCX,0FFFFHNEXT:DECCXJNZNEXT;ZF≠0,转NEXT

RET;子程序返回

C语言for(CX=FFFFH,CX>0,CX--){空循环;}964)

NEG指令格式:

NEGOPRD操作:0-OPRDOPRD8/16位寄存器或存储器操作数对于负数:用0减去操作数(补码形式),相当于对该操作数求“补码”,得到该操作数的绝对值(P31)974)

NEG指令98格式:

CMPOPRD1,OPRD2操作:

OPRD1-OPRD25)

CMP指令指令执行的结果不影响目标操作数,仅影响标志位!99CMP指令用途:用于比较两个数的大小,可作为条件转移指令转移的条件操作数的要求和对标志位的影响与SUB指令相同100CMP指令1.两个无符号数:

2.两个有符号数:OF⊕SF=0:被减数>减数1:被减数<减数ZF=1:被减数=减数CF=0:被减数>减数1:被减数<减数ZF=1:被减数=减数101CMP指令例例3-24

在内存数据段从DATA开始单元存放两个8位无符号数,比较它们大大小,并将大的送MAX单元LEABX,DATAMOVAL,[BX];取第1个数INCBX;BX指向第2个数CMPAL,[BX];第1个数和第2个数比较JNCDONE;CF=0表示第1个数大于第2个数MOVAL,[BX];DONE:MOVMAX,AL HLT1023、乘法指令无符号的乘法指令MUL带符号的乘法指令IMUL注意:乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX;1033、乘法指令AL操作数×ALAH乘积:A.字节操作AX操作数×AXDX乘积:B.字操作MUL

操作数IMUL

操作数

×乘=积8×8=AH:AL16×16=DX:AX32×32=EDX:EAX1041)无符号数乘法指令格式:

MULOPRD(不能是立即数)

操作:

OPRD为字节数

OPRD为16位数

AL×OPRDAX×OPRDDXAXAX105无符号数乘法指令例MULBYTEPTR[BX]BXAL乘

XXHAX┇

XXH1062)带符号数乘法指令格式:

IMULOPRD说明:IMUL指令将OPRD视为带符号数,OPRD为补码形式107两条乘法指令的比较例:设:AL=FEH,CL=11H,求AL与CL的乘积。执行:MULCL结果:AX=10DEH执行:IMULCL结果:AX=FFDEH=-34。若设为无符号数若将两操作数看作有符号数108两条乘法指令的区别无符号数CF=OF=0,说明运算结果没有超出低位(AL/AX),高位(AH/DX)为无效数据CF=OF=1,说明运算结构超出低位(AL/AX),高位(AH/DX)为有效数据

有符号数CF=OF=0,说明运算结果没有超出低位(AL/AX),高位为地位的符号扩展(CF=OF=1,说明运算结构超出低位(AL/AX),高位(AH/DX)为有效数据1094、除法指令规则:

当被除数为16位,除数为8位时,8位的商放在AL,8位的余数放在AH当被除数为32位,除数为16位,16位的商放在AX中,16位的余数放在DX

AL操作数16位A

温馨提示

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

评论

0/150

提交评论