第03章8086的指令系统.ppt_第1页
第03章8086的指令系统.ppt_第2页
第03章8086的指令系统.ppt_第3页
第03章8086的指令系统.ppt_第4页
第03章8086的指令系统.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 8086的指令系统,计算机是通过执行指令来管理计算机并完成一系列给定功能。每种计算机都有一组指令集提供给用户使用,这组指令集叫做计算机的指令系统。,3.1 8086指令的特点,指令的一般格式为: 操作码 操作数,操作数,目的,源,MOV AL,12H ADD AL,24H,不能作目的操作数,不能直接将立即数 传送到段寄存器,不允许源和目的操作数同时都是存储器操作数,1) 立即数:操作数包含在指令中。 如:MOV AX,080AH ADD AL,2 2) 寄存器操作数:操作数在CPU的某个寄存器中。 如:MOV DS,AX 3) 存储器操作数:操作数在内存数据区内。 如:MOV AX,2

2、2A0H MOV bufferSI,AX,操作数存在方式 在微机中,操作数有三种类型:,寻址方式是寻找指令中操作数所在地址的方法。,3.2 8086的寻址方式,3.2.1 8086寻址方式的说明,外部总线,内部暂存器,IP,ES,SS,DS,CS,输入/输出控制电路,执行部分控制电路,1 2 3 4 5 6,ALU,标志寄存器,AH AL,BH BL,CH CL,DH DL,SP,BP,SI,DI,通用 寄存 器,地址加法器,指令队列缓冲器,执行部件 (EU),总线接口部件 (BIU),16位,20位,16位,8位,8086微处理器的内部结构框图,存储器的分段及存储器地址分配,段内偏移量由指令

3、的操作数部分规定,通常称为有效地址,用EA表示。,1. 有效地址EA,8086的内存地址 :段地址16 + 段内偏移量 段地址存放在段寄存器CS、 DS、 ES、 SS中; 段内偏移量即有效地址EA存放在BX、BP、SI、DI 中;或直接地址,如3000H中;或上述形式的组合中。见p37图3-1。, 立即寻址 变址寻址 寄存器寻址 基址+变址寻址 直接寻址 串寻址 寄存器间接寻址 I/O端口寻址 基址寻址 隐含寻址,3.2.2 寻址方式介绍, 立即寻址,例如:MOV AX,1234H 如图所示。 立即寻址主要用于给寄存器或 存储单元赋初值。(复制), 寄存器寻址,操作数存放在指令规定的寄存器中

4、。 16位:AX、BX、CX、DX、SI、DI、SP、BP、 CS、DS、SS或ES 8位:AH、AL、BH、BL、CH、CL、DH或DL 例如:MOV AX,BX 将寄存器BX的内容送入AX中。(复制),执行速度很快, 直接寻址 默认以DS的内容为基准。,例如:MOV AL,2000H 有效地址EA为2000H,若 段地址DS=4000H,则段 起始物理地址为4000H左 移4位,即40000H,此指 令将数据段中物理地址为 42000H单元的内容传至 AL寄存器。 但允许利用段超越方法。 例如:MOV AX,ES:BUFF,符号地址, 寄存器间接寻址,例如:MOV AX,BX,EA=,BP

5、 BX DI SI,DS,SS, 基址寻址,若使用BP,则隐含地表示操作数存放在SS中。若使用BX,则隐含地表示操作数存放在DS中。,EA=,BX BP,8位偏移量 16位偏移量, 变址寻址,EA=,SI DI,8位偏移量 16位偏移量,段地址规定为DS段寄存器的内容。 变址寻址方式常用于存取表格或一维数组中的元素。, 基址+变址寻址方式,课堂练习: 假设DS=4000H,CS=0000H,SS=2000H,ES=1000H,SI=0010H,DI=0100H,BX=0200H,COUNT=2000H,问下列指令执行后,寄存器AX、AH的内容如何? MOV AX,COUNTSI MOV AH,

6、BX+DI+1234H,AX的内容为40000H+2000H+0010H=42010H和42011H单元的内容,前一个在低8位,后一个在高8位。,AH的内容为40000H+0200H+0100H+1234H=41534H单元的内容。, 串寻址,如:MOVSB ES:DI DS:SI DI DI 1 SI SI 1, I/O端口寻址,直接端口寻址:由指令直接给出输入输出设备的端口地址,规定为8位。 间接端口寻址:由寄存器DX给出输入输出设备的端口地址,规定为16位。 如:IN AL,20H OUT DX,AL, 隐含寻址 操作数是隐含的。 如:AAA 隐含操作数是AH、AL,MOV AX,310

7、0H, 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 基址寻址 变址寻址 基址+变址寻址 串寻址 I/O端口寻址 隐含寻址,MOV SS,AX,MOV AX,3100H; ES:H,MOV BX,DI; SI,BX;BP,MOV SI,DATABX; BP,MOV BX,SI+1003H; DI,MOV AX,COUNTBXSI,MOVSB,IN AL,data8; DX,AAA,寻址方式,MOV BX,2000H MOV DX,DASSBX MOV DI,BX SUB AX,BXSI ADD AX,DI+64H MOV AX,BP+10 MOV AX,ES:BX CMP BX+SI+10,

8、100 IN AL,DX MOVS,例:分别指出下列指令中源、目的操作数的寻址方式,源操作数 目的操作数,立即 寄存器,基址 寄存器,寄存器 寄存器间址或变址,基址+变址 寄存器,变址 寄存器,基址 寄存器,带段超越寄存器 寄存器,立即 基址+变址,寄存器间址 寄存器,隐含 隐含,3.3 8086的指令格式及数据类型,1. 8086的操作码 2. 8086指令中寄存器的编码 3. 指令中的操作数 4. 指令中的数据类型 无符号数 带符号数 ASCII码 BCD数,3.4 8086的指令集,1数据传送指令 2算术运算指令 3位操作指令 4串处理指令 5程序控制转移指令 6处理器控制指令,3.4.

9、1数据传送指令,数据传送指令是最基本的一种指令,主要用来实现存储器与寄存器、寄存器与寄存器以及立即数到寄存器或存储器的字节或字的传送。一般包括目的操作数和源操作数。 注意:源和目的操作数的数据长度必须保持一致。 除POPF和SAHF指令外,这类指令的操作结果 不影响FR。,1、通用数据传送指令,表1 通用数据传送指令格式,(1)传送指令MOV 功能:将源操作数传送到目的操作数中。实际 上是进行数据的“复制”。 格式:MOV OP目,OP源 OP目:寄存器、存储器 OP源:寄存器、存储器、立即数注意:1) CS、立即数不能作目的操作数; 2) 立即数与存储器变量类型要一致; 3) 源与目的操作数

10、不能同时为存储器操作数。,注意:不能用一条MOV指令实现以下传送,若需要时, 可用两条MOV指令来实现,例如:, 存储单元之间的传送 MOV AX,MEM1;先将MEM1传送至通用数据寄存器 MOV MEM2,AX;再从通用数据寄存器传送至MEM2, 立即数至段寄存器的传送 MOV AX,DATA;先将立即数传送至通用数据寄存器 MOV DS,AX ;再从通用数据寄存器传送至段寄存器, 段寄存器之间的传送 MOC AX,DS;段寄存器传送至通用数据寄存器 MOV ES,AX;从通用数据寄存器传送至另一个段寄存器,另外,对于CS和IP,通常不要求用户利用传送指令改变其中内容。但CS可作为源操作数

11、。,变量的段地址和偏移地址分别用两个算符SEG和OFFSET来指定,加上变量名,就可以分别产生该变量的段地址或偏移地址,如:SEG W, OFFSET DATA。,例: MOV DI,AX;寄存器间接寻址,AX中的16位数送 ;DI、DI+1单元,MOV SI,ES:BP;寄存器间接寻址,缺省时段寄存 ;器为SS,这里特指附加段ES中BP所指 ;向的两个单元的内容送SI寄存器。,MOV WORD PTRSI,6070H;立即数6070H送 ;到SI字单元。PTR是一个汇编操作符, ;与前面的 WORD一起表示该单元类型 ;是字单元。,堆栈是按后进先出原则组织的一段特殊存储区域,8086系统设置

12、堆栈段寄存器SS(存放堆栈段段地址)和堆栈指针SP(存放偏移地址)。,堆栈操作指令,例:PUSH AX;将AX内容压入堆栈,同时SP-2 SP,(2) 进栈指令PUSH,格式:PUSH OP 将16位寄存器或存储单元的内容送入堆栈。,注意:CS不能作为目的操作数;操作数必须是16位。 中断服务程序中保护现场和恢复现场时用到: PUSH AX PUSH BX POP BX POP AX,将SP所指向的堆栈栈顶的一个字弹到寄存器 或存储单元中。,(3) 出栈指令POP,格式:POP OP,(4)交换指令XCHG格式:XCHG OP1,OP2功能:将源操作数和目的操作数内容相互交换。注意:通用寄存器

13、间、通用寄存器与存储器间可以, 但段寄存器、存储单元间不可。,2. 累加器专用传送指令,实现CPU与外设(打印机、显示器等)交换数据、传送控制命令。 8086用专用输入(in)输出(out)指令,通过累加器AX(AL)/DATA,AX(AL)/DX完成,前者为直接寻址(000FFH),后者为间接寻址(00000FFFFH),并对所有的外设地址采用独立于存储器的编址方式,外设地址称为端口号。 (1)输入指令IN 格式:IN 累加器,端口 例:IN AL,21H;将端口21H的8位数读到AL中 MOV DX,201H IN AX,DX ;将端口201H和202H的16位数 ;读入AX中,格式:OU

14、T 端口,累加器 例: OUT 22H,AX;将AX中的16位数传到端口 ;22H和23H MOV DX,501H OUT DX,AL ;将AL中的8位数输出到端口 ;501H,(2)输出指令OUT,功能:将BX和AL的内容相加作为有效地址 EA,在一个表格中找出此单元的内容 并传给AL。 该(查表)指令是在一个字节型变量表中取某个值存入AL。 特殊之处:源操作数使用BX、AL这种BX 基址、AL变址的寻址方式,表的起 始地址的偏移量应事先装入BX寄存 器, AL中存放查找对象在表中地址 与表起始地址相差的字节数。,(3)换码指令XLAT,格式:XLAT,MOV AL,9 ;9 AL MOV

15、BX,OFFSET S_TAB;表首址 BX XLAT ;BX+AL AL,例:以下指令序列把S_TAB表的第10个字节送入AL。,用于将源操作数的地址传送到目的操作数,其中源操作数必须是存储器操作数,目的操作数必须是16位的内部寄存器。共有三条如表2:,表2 目标地址传送指令格式,3. 目标地址传送指令,(1) LEA指令 格式:LEA OP目,OP源 功能:将源操作数的有效地址EA送目的操作数。 比较下列两条指令: LEADI,TABLE MOV DI,OFFSET TABLE;取TABLE偏移地址送DI,(2) LDS和LES指令 LDS和LES指令的源操作数是一个具有双字类型(4字节)

16、的变量,取出后,低地址的两字节送目的操作数,高地址的两字节分别送DS和ES段寄存器。 例:LDS DI,2300;将2300和2301单元的内 ;容送DI,将2302和 ;2303单元的内容送DS。,4. 标志寄存器传送指令,(1)读标志指令 LAHF:将标志寄存器低8位送AH (2)设置标志指令SAHF:将AH送标志寄存器低8位 (3)PUSHF指令:将16位标志寄存器入栈,同时修改 栈指针 (4)POPF指令:将栈顶的一个字送标志寄存器入栈, 同时修改栈指针SP SAHF和POPF指令将影响标志寄存器的内容。,标志寄存器结构图,3.4.2 算术运算指令,加法指令,减法指令,1. 算术加法指

17、令,(1)算数加法ADD 格式:ADD OP目,OP源 功能:将源和目的操作数相加,结果保留在目的操作数 中。 例:MOV AX,FIRST ;FIRST存储区第一个数送AX ADD AX,SECOND ;两数相加送AX。见例4-25 (2)带进位算数加法ADC 格式:ADC OP目,OP源 功能:将源和目的操作数及CF的值相加,结果保留在目 的操作数中。 (3)加1指令INC 格式:INC OP 功能:将操作数加1,再送回该操作数。(不影响CF),存储器操作数要说明类型,BCD数运算调整指令,用一个字节表示一位十进制数,称为非组合(或非压缩)式BCD码;用一个字节表示两位十进制数,称为组合(

18、或压缩)式BCD码; 例:0000 0110(6),0001 0110(16)。 BCD数向高位的进位是逢10进1,而4位二进制数向高位进位是逢16进一,若加上6,则可以得到正确的BCD数。,DAA:对AL中两个组合BCD码相加所得的结果进行 调整,结果存于AL中。 方法:若(AL AX=0904H(E 9,0EH614H ;08H1),方法:若(ALEA=BX+DI(存储器) JMP BX ;EA=BX(通用寄存器),(3)段间直接(远)转移:JMP FAR PTR OP 执行操作:(IP)OP的段内偏移地址 (CS)OP所在段的段地址 例: JMP FAR PTR NEXT;NEXT所在段

19、的段地址、偏移 ;地址送CS、IP JMP 2000H:1000H ;CS=2000H,IP=1000H (4)段间间接转移:JMP DWORD PTR OP 执行操作:(IP)(EA) (CS)(EA+2) 例: JMP DWORD PTR SI;EA存放在SI、SI+1,段地 ;址存放在SI+2,SI+3,2、条件转移指令, 单条件转移指令: 格式 测试条件 格式 测试条件 JZ(JE) OP ZF=1 JP OP PF=1 JNZ(JNE) OP ZF=0 JNP OP PF=0 JS OP SF=1 JC OP CF=1 JNS OP SF=0 (JB、JNAE) JO OP OF=1

20、 JNC OP CF=0 JNO OP OF=0 (JAE、JNB),注意:只能用段内直接寻址的8位位移量(-128127) 指令执行时,首先测试条件,满足则程序转移 到指令给出的目标标号,否则顺序执行下一条 指令语句。,条件A处理,条件A判断,条件B处理,条件B判断,N,Y,Y,N, 无符号数的条件转移指令 格式 测试条件 JNBE(JA) OP CF且ZF=0 不低于也不等于/高于,例:在DATA1开始的存储区中存放了100 个8位无符号数,找出其中最大的数 存入MAX单元。,MOV BX,OFFSET DATA1 MOV AL,BX MOV CX,63H P1:INC BX CMP AL

21、,BX JAE NEXT MOV AL,BX NEXT:DEC CX JNZ P1 MOV MAX,AL HLT, 带符号数的条件转移指令,格式 测试条件 JNLE(JG) OP (SF OF)且ZF=0,3. 循环控制指令,注意:* CX中存放循环次数, * 只能用段内直接寻址的8位位移量(-128127)。 LOOP 目标标号:计数循环,CX=0退出循环。 LOOPZ / LOOPE 目标标号:结果为0/相等循环, CX=0或ZF=0退出循环。 LOOPNZ / LOOPNE 目标标号:结果不为0/不相等 循环,CX=0或ZF=1退出循环。 JCXZ 目标标号:计数为0转移,若CX=0 时

22、,则 控制转向目标标号,否则顺序执行。 执行步骤: (CX)(CX) -1 检查是否满足测试条件,如满足则循环转 移到目标标号执行循环;不满足则退出循环。,例:在某数据段中有10个字节的数组,要求从该数组 中找出“$”字符,然后将“$”前的所有数据相加, 结果存在AX中。,MOV SI,OFFSET BUF ;数据首址送SI DEC SI MOV CX,10L1:INC SI CMP BYTE PTRSI,$;找“$”字符 LOOPNZ L1 SUB SI,OFFSET BUF ;求“$”前的字节长 JZ L3 MOV CX,SI ADC AH,0 MOV SI,OFFSET BUF INC

23、SI MOV AX,0 LOOP L2;循环累加 L2:ADD AL,SI L3:HLT ; “$”前的数据,4. 子程序调用和返回指令 (1)CALL调用指令功能: 将CALL指令的下一条指令的地址IP或IP与CS压栈, 新的目标地址(子程序首地址)装入IP或IP与CS 中,控制程序转移到由OP指明入口的子程序。,a 段内直接调用:CALL OP 执行操作: (SP)(SP)-2,(SP)+1,(SP)(IP) (当前IP压栈) (IP)(IP)+16位位移量 例:CALL ABC;ABC为段内子程序地址 b 段内间接调用:CALL OP 执行操作: (SP)(SP)-2,(SP)+1,(SP)(IP) (IP)(EA) 例:CALL BX,c 段间直接调用:CALL OP 执行操作: (SP)(SP)-2,(SP)+1,(SP)(CS)(当前CS压栈) (CS)段

温馨提示

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

评论

0/150

提交评论