版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章
8086/8088指令系统movax,12hcalldisplayJmp1234h主要内容:指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:
操作码的含义指令对操作数的要求指令执行的结果3.1概述指令——控制计算机完成指定操作的命令机器指令——指令的二进制代码形式。例如:CD21H汇编指令——助记符形式的指令。例如:INCA指令系统——CPU所有指令及其使用规则的集合8088/8086指令系统:(1)指令向后兼容(x86系列)(2)应用广泛,资料易于寻找指令按功能分为六大类(92种)(1)数据传送类;(2)算术运算类;(3)逻辑运算和移位;(4)串操作;(5)控制转移类;(6)处理器控制。3.1.1指令的基本构成操作码[操作数],[操作数]说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源指令举例:ADDAX,[SI+6]MOVAX,BX操作码操作数INC[BX]HLT部分8088常用指令指令类型助记符数据传送数据传送MOV,PUSH/POP,XCHG等地址传送LEA,LDS,LES输入输出IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET8088/8086的操作数分为3类1、立即数(常数)取值范围如下表:立即数只能用作源操作数,如8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128~127)8000H-7FFFH(-32768~32767)MOV AX,0FA00H ;正确MOV 8000H,DX ;错误2、寄存器操作数放在8个通用寄存器或4个段寄存器中的操作数只能存放字操作数段寄存器存放当前操作数的段基地址不允许将立即数传送到段寄存器SIDIBPSPCSDSESSS3、存储器操作数存储器操作数字节字双字124类型存储单元个数一般不允许两个操作数同时为存储器操作数存储单元的物理地址=段基地址+偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。例如,若(BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的: MOVAL,[2A00H] MOVAL,[BX+0A00H] MOVAL,[BX][SI] MOVAL,[DI]一条指令的执行时间=∑3.1.2指令的执行时间取指令取操作数执行指令传送结果单位用时钟周期数表示在这里不详细讨论,但要注意:1)尽量使用寄存器作为操作数2)若有可能,用移位代替乘除法3)尽量使用简单的寻址方式寻址方式——寻找操作数的方法
寻找操作数的地址(一般指源操作数)寻找要执行的下一条指令的地址在8086指令系统中,说明操作数所在地址的寻址方式可分为8种:
①立即寻址⑤寄存器相对寻址
②直接寻址⑥基址-变址寻址
③寄存器寻址⑦相对的基址-变址寻址
④寄存器间接寻址⑧隐含寻址3.2
8086的寻址方式当数据为8位或16位时,可直接放在指令本身的最后一个字节(8位)或两个字节(16位)中。这样的数据常称为立即操作数。立即寻址只能用于源操作数例:
MOVAX,1C8FH
错误例:
×
MOV2A00H,AX;错误!
3.1.2立即寻址立即数操作码低8位高8位存储器MOV操作码02H31HAHAL代码段代码段立即寻址指令在存储器中的存放形式AX指令操作例:MOVAX,3102H;AX3102H执行后,(AH)=31H,(AL)=02H3.2.2直接寻址操作数在存储单元中,其16位有效地址,即段内偏移地址在指令码之中,占两个字节。也就是说指令中直接给出操作数的16位偏移地址,偏移地址也称为有效地址(EA,EffectiveAddress)
默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀偏移地址也可用符号地址来表示,如ADDR、VAR
例:
MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVSI,TABLE_PTR指令操作例:MOVAX,[3102H]AL(3102H),AH(3103H)如果(DS)=2000H,(23012H)=CDH,(23013H)=ABH则操作数的物理地址为:20000H+3102H=23102H指令执行后:(AX)=ABCDHMOV操作码02H31HAHAL23102HCDHABH存储器代码段数据段..3.2.3寄存器寻址数据存放在指令规定的寄存器中。对于16位数据,寄存器可以是AX,BX,CX,DX,SI,DI,SP或者BP。而对于8位数据,寄存器可以是AL,AH,BL,BH,CL,CH,DL或DH。注意:源操作数与目的操作数字长要相同
寄存器寻址与段地址无关例:MOVAX,BXMOV[3F00H],AXMOVCL,AL
错误例:
×
MOVAX,BL;字长不同
×MOVES:AX,DX;寄存器与段无关AXSI2233H2233H指令操作例:MOVSI,AX;SI(AX)
指令执行前:(AX)=2233H指令执行后:(AX)=2233H,(SI)=2233H3.2.4寄存器间接寻址操作数在存储单元中,其有效地址在指令码指明的基址寄存器BX、BP或变址寄存器SI或DI之中。有效地址可表示为
例:MOVAX,[BX]错误例:
×MOVAX,[DX]×
MOVCL,[AX]EA=(BX)(BP)(SI)(DI)指令操作例:MOVAX,[SI]若(DS)=6000H,
(SI)=1200H,(61200H)=44H,(61201H)=33H则指令执行后,(AX)=3344H。44H33H60001200DSSI6000061200
61200HAX存储器数据段
+)120044H33H3.2.5寄存器相对寻址
EA=间址寄存器的内容加上一个8/16位的位移量
操作数在存储单元中,其有效地址是一个8位或16位的位移量(以后都用disp表示)与一个基址寄存器或变址寄存器的内容之和。位移量disp和这个寄存器在指令码中给出。EA=(BX)(BP)(SI)(DI)+8位16位位移量
例:MOVAX,[BX+8]MOVAX,[BP+1000H];
默认段寄存器为SS
指令操作例:MOVAX,DATA[BX]
若(DS)=6000H,(BX)=1000H,DATA=2A00H,(63A00H)=66H,(63A01H)=55H
则物理地址=60000H+1000H+2A00H=63A00H
指令执行后:(AX)=5566H(见下页图示)操作码00偏移量低2A偏移量高DS6000BX1000+DATA2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,DATA[BX]3.2.6基址-变址寻址若操作数的偏移地址:由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式
由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。EA=(BX)(BP)+(SI)(DI)
同一组内的寄存器不能同时出现。例:MOVAX,[BX][SI]MOVAX,[BX+SI]错误例:
×MOVAX,[BX][BP]
×
MOVAX,[DI][SI]83000操作码DS
8000BX
2000+SI
100083000HAHALAX代码段数据段.........YYXX指令操作例:MOVAX,[BX][SI]假定:(DS)=8000H,(BX)=2000H,SI=1000H则物理地址=80000H+2000H+1000H=83000H指令执行后:(AL)=[83000H](AH)=[83001H]3.2.7相对的基址-变址寻址在基址-变址寻址的基础上再加上一个相对位移量
注意事项同基址-变址寻址EA=(BX)(BP)+(SI)(DI)+8位16位位移量
例:MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASE指令操作例:MOVAX,DATA[DI][BX]若(DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H则指令执行后(AH)=[83021H],(AL)=[83020H]8320083200HAHALAX+DATA0200操作码代码段数据段.........YYXXDS
8000BX
2000
DI
10003.2.8隐含寻址
指令操作数是隐含的,在指令中未显式地指明。例:MULBL
指令隐含了被乘数AL及乘积AX
类似的指令还有:DIV、CBW、MOVS等(AL)×(BL)→AX小结指令由(
)和(
)构成如何取得操作数——称为(
)操作码操作数寻址方式寻址方式可分为立即寻址直接寻址寄存器相对寻址寄存器寻址基址-变址寻址基址-变址相对寻址寄存器间接寻址寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
寻址方式指令操作数形式
寄存器间接只有一个寄存器(BX/BP/SI/DI之一)寄存器相对一个寄存器加上位移量基址—变址两个不同类别的寄存器相对基址-变址两个不同类别的寄存器加上位移量3.28086/8088指令系统
本节将介绍8086微处理器的指令系统。指令系统是指处理器所能完成的所有指令的集合。它是在微处理器设计时就确定了的,所以,对于不同的微处理器,其指令系统中所包含的具体指令将是各不相同的。由于微处理器8088与8086的指令系统是完全一样的,所以,本节介绍的指令系统同样适用于8088CPU。8086/8088CPU指令系统可分成下面几类:(1)数据传送指令;(2)算术运算指令;(3)逻辑运算指令;(4)移位指令;(5)标志处理指令和CPU控制指令;(6)转移和循环控制指令;(7)调用和返回指令;(8)字符串操作指令;(9)输入、输出指令。我们重点将放在各条指令的功能和它们的使用上,关于这些指令的功能是如何实现的以及执行指令的具体操作细节将不作详细讨论。学习指令系统着重要掌握指令的基本操作功能,合法的寻址方式以及对标志位的影响。在详细介绍指令系统之前,我们将书中描述指令操作时用到的各种缩写和符号列于下表中。
3.2.1数据传送类指令这里讨论的数据传送指令仅指CPU中的寄存器与寄存器或者寄存器与存储单元之间的数据传送。这类指令的基本格式及功能说明见表3.5。表中除了SAHF和POPF指令外,标志寄存器F的各位均不受影响。指令中出现两个操作数时,目的操作数在前,源操作数在后,并且目的操作数的寻址方式一定不能为立即数和段寄存器CS。表3.5数据传送类指令的格式与功能
1.通用传送指令(MOV)
指令的功能是将源操作数SRC的一个字节或一个字传送到目的操作数DST所指单元。源操作数可以是通用寄存器、段寄存器、立即数和内存单元,目的操作数可以是通用寄存器、段寄存器和内存单元,但不能为立即数和CS。当目的操作数为段寄存器时,源操作数不能为立即数,当源操作数不是立即数时,两个操作数中必须有一个是寄存器。其具体的数据传送示意图如下所示:立即数存储器通用寄存器AX、BX、CX、DX、BP、SP、SI、DI段寄存器CS、DS、SS、ES注意:立即数不能作为目的操作数,且源操作数和目的操作数两者不能同时为存储器例如:将立即数1234H送到DS寄存器 MOV AX,1234 MOV DS,AX 将存储单元3000H的内容送到4000H单元 MOV AX,[3000H] MOV [4000H],AX 将BX中的一个字传送到AX中 MOVAX,BXMOVAL,DL;将DL中的一个字节传送到AL中MOVAX,02;将立即数02传送到AX中
2.取有效地址指令(LEA)指令的功能是将源操作数SRC(必须是存储器操作数)的有效地址(16位偏移地址)送入目的地址DST所指定的16位通用寄存器中。这里寄存器不允许是段寄存器。格式:LEA DST,SRC这是一条特殊指令,它传送的不是操作数本身,而是操作数的有效地址。比如:LEABX,[SI+1000H]该指令的执行过程如图3-17所示器结果是将源操作数1234H的有效地址3000H送到BX寄存器中。
3.取地址指针指令(LDS,LES)这是取某变量的32位地址指针的指令。其功能是将源操作数SRC的有效地址所对应的内存单元中的32位内容分别送入DS(或ES)和指令中所指出的寄存器中。也就是说,从由指令的源操作数所指定的存储单元开始,由4个连续存储单元中取出某变量的地址指针(共4个字节),将前两个字节(变量的偏移地址)送到指令的目的操作数所指定的某16位通用寄存器中,后两个字节(变量的段基址)送到DS段寄存器中。格式:LDSDST,SRC例题:LDSSI,[DI+1000H](过程如图3-18所示)注意:课本中的5000H应该为1200H
LES指令的功能与执行情况和LDS类似,只是32位地址的高16位不是送给DS,而是送给ES。上面两条指令的源操作数的寻址方式为直接寻址方式,也可采用其它寻址方式,但不同寻址方式所指的内存单元都应是双字类型。4.标志传送指令(LAHF,SAHF)在第2章中已介绍,CPU中有一标志寄存器FLAG,其中的每一位标志了CPU的一种状态。我们以后会看到,许多指令的执行结果会影响标志寄存器中的某些位,同时,有些指令的执行也受标志寄存器中的某些位控制。(1)取标志指令LAHF
LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:
OFDFIFTFSFZFAFPFCFAHLAHF指令的功能FLAG(2)设置标志指令SAHF
SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。OFDFIFTFSFZFAFPFCFAHSAHF指令的功能FLAG(3)标志进栈指令PUSHF
将16位标志寄存器F内容入栈保护。其操作过程与PUSH指令类似。(4)标志出栈指令POPF
将当前栈顶和次栈顶的数据字弹出送回标志寄存器中。PUSHF和POPF指令常用于调用子程序时保护和恢复状态标志位。(5.数据交换指令(XCHG)格式:XCHG DST,SRC该指令是完成寄存器与寄存器或寄存器与存储单元之间内容交换的。该指令要求两个操作数之一必须是寄存器,允许两个操作数都是寄存器,但不允许是段寄存器。例如:
XCHG AX,BX ;(AX)←→(BX)XCHG CX,[DI] ;(CX)←→([DI])XCHG BX,DATA1XCHG指令可以进行字节或字数据交换。通用寄存器AX、BX、CX、DXBP、SP、SI、DI存储器
6.字节转换指令(XLAT)该指令的寻址方式是隐含的,其有效地址EA=(BX)+(AL)。指令的功能是将偏移量EA所对应的存储单元中的一个字节的内容送入AL中,从而实现了AL中的字节变换。即AL((BX)+(AL))指令执行前,BX指向一张256个字节的表的起点,AL中是表的索引值。例24:通过查7段显示码表,将任意一位十进制数转换为对应的7段显示码。其操作步骤如下:(1)建立转换表,将表定位,表的起点地址偏移量送入BX。(2)将待转换的十进制数在表中的序号送入AL寄存器(3)执行XLAT指令
7.堆栈操作指令1)堆栈堆栈是以后进先出(LIFO)的规则存取信息的一种存储机构。在微型计算机中,堆栈通常是存储器的一部分。为了保证堆栈区的存储器能按后进先出的规则存取信息,该存储区的存取地址由一个专门的地址寄存器来管理,这个地址寄存器称为堆栈指示器或称堆栈指针。当信息存入堆栈时,堆栈指针将自动减量并将信息存入堆栈指针所指出的存储单元,当需要从堆栈中取出信息时,也将从堆栈指针所指出的存储单元中读取信息,并自动将堆栈指针增量。所以,堆栈指针始终指向堆栈中最后存入信息的那个单元,我们称该单元为堆栈顶。在信息的存与取的过程中,栈顶是不断移动的,也称它为堆栈区的动端,而堆栈区的另端则是固定不变的,这端我们又称其为栈底。
在8086/8088CPU中,寄存器SP即为堆栈指针,它是一个16位的地址寄存器,用来存放堆栈区的偏移地址,堆栈区的段地址则存于段寄存器SS中。若把内存中某段的偏移地址为0000~00FFH的一个存储区作为堆栈,那么堆栈指针SP的初值为0100H。此时,若向堆栈中存入信息,那么,首先将SP内容减2,即(SP)=00FEH,然后,将16位信息送入SP所指单元。,堆栈的读写地址由一个堆栈指针指示,保证了它的信息存取按后进先出的规则进行。2)堆栈操作指令堆栈操作指令是用来完成堆栈操作的。堆栈的主要操作是对堆栈进行信息的存取。通常将信息送入堆栈的过程称为压入操作,而从堆栈中取出信息的过程称为弹出操作。8086/8088指令系统中提供了完成这两种操作的相应指令。(1)建栈建立堆栈就是规定底部在RAM存储器中的位置,用户可以通过数据传送指令将堆栈底部的地址设置在堆栈指针SP和堆栈段寄存器SS中。这时,栈中无数据,底部与顶部重叠,是一个空栈。例19:MOV AX,3000HMOV SS,AX ;初始化SS段寄存器MOV SP,64H ;初始化SP指针
(2)压入指令(PUSH):PUSHSRC压入指令是将SRC或标志寄存器FLAG的内容送入堆栈,并修正堆栈指针的内容。指令的操作必须是字类型的。指令中的操作数SRC可以是通用寄存器和段寄存器,也可以是某种寻址方式所指示的内存单元,但不能是立即数。指令对标志寄存器内容没有影响。例如:PUSHAX;(SP)←(SP)-2,((SP)←(AH),((SP)-1)←(AL)PUSHDSPUSH[SI]PUSHF
(3)弹出指令(POP):POPDST弹出指令是将SP所指出的栈顶内容取出,并送入DST所指寄存器、内存某单元或标志寄存器F,并修正SP内容。DST也必须为字类型,它可以是通用寄存器和除了CS以外的段寄存器,也可以是某种寻址方式所指的内存单元,但不能为立即数。指令POPDST对标志位不产生影响。由于SP所指的就是堆栈中最后存入信息的单元,弹出指令正是弹出该单元的内容,所以,执行POP指令时是先弹出栈顶内容,后修正SP的内容,并且SP以加2修正。后两条指令详细步骤见课本P76、778、输入/输出指令只限于用累加器AL或AX来传送信息。功能:(累加器)←→I/O端口(1)输入指令IN格式:INacc,PORT;PORT端口号0~255INacc,DX;DX表示的端口范围达64K例:INAL,80H;(AL)←(80H端口)
INAL,DX;(AL)←((DX))(2)输出指令OUT
格式:OUTport,acc
OUTDX,acc例:OUT68H,AX;(69H,68H)←(AX)OUTDX,AL;((DX))←(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年玻璃制品采购合同
- 2024年物业服务与社区文化活动策划委托合同3篇
- 《背影》课时教案模板
- 拟定财务的个人工作计划大全
- 2024山东基础软件服务市场前景及投资研究报告
- 产科工作计划
- 初中教师年终教学计划五篇
- 幼儿园实习自我总结十篇
- 内勤个人工作计划10篇
- 关于教师一级述职报告3篇
- 2025年国家图书馆招聘笔试参考题库含答案解析
- 机器人课程课程设计
- 南充市市级事业单位2024年公招人员拟聘人员历年管理单位遴选500模拟题附带答案详解
- 安全知识考试题库500题(含答案)
- 员工投诉表格样板
- 基础工程施工月进度计划表
- 危险性较大的分部分项工程专家论证表
- 2021-2022学年上海市闵行区五年级上学期期末语文试卷
- 人教版五年级上册数学组合图形的面积同步练习
- 2018级成考专升本汉语言文学专业12月份考试资料文献学复习资料
- 最新中考英语单词表2200个
评论
0/150
提交评论