微机原理及接口技术_03 8086的指令系统_第1页
微机原理及接口技术_03 8086的指令系统_第2页
微机原理及接口技术_03 8086的指令系统_第3页
微机原理及接口技术_03 8086的指令系统_第4页
微机原理及接口技术_03 8086的指令系统_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第33章 8086的指令系统本章主要内容 3.1 8086的寻址方式 3.2 8086的指令系统3.1 8086的寻址方式3.1.1 操作数寻址方式 计算机的核心部件是CPU,CPU是通过执行指令序列来解决问题的,因此每种CPU都有一组指令集提供给用户使用,这组指令集就称为CPU的指令系统。每一条指令都由操作码和操作数两部分构成。8086的寻址方式较为丰富,总体来说操作数的位置可以分为三类。 (1)操作数包含在指令中,这种寻址方式称为立即寻址,这种操作数就称为立即数。 (2)操作数包含在CPU的某个内部寄存器中,这种寻址方式称为寄存器寻址。 (3)操作数在内存的数据区中,在8086中任何内存的

2、地址都是由两部分组成:段基址和偏移量。 1立即寻址(Immediate Addressing) 当操作数就在指令中时为立即寻址,该操作数称为立即数,用data 8或data16表示。立即数可以是数值、字符,也可以是由数值和运算符构成的表达式。 2寄存器寻址(Register Addressing) 这种寻址方式的操作数放在寄存器中,用寄存器的符号来表示。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或者BP等;对于8位操作数,则用寄存器AH、AL、BH、BL、CH、CL、DH或者DL。 3直接寻址(Direct Addressing) 操作数总是在存储器中,其有效地址E

3、A由指令以具体数值的形式直接给出。要注意的是指令中有效地址必须加一个方括号,以便与立即数相区别。 4寄存器间接寻址(Register Indirect Addressing) 操作数的有效地址EA直接取自某一个基址寄存器或变址寄存器。可以使用BP、BX、SI和DI这个16位的寄存器作为间接寻址寄存器,并且规定使用BP寄存器时,约定访问的是由SS指示的堆栈段,而使用BX、SI和DI寄存器时,约定访问的是由DS指示的数据段。 5寄存器相对寻址(Register Relative Addressing) 操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的位或16位位移量(简记为disp)之和

4、。同样,当指令中指定的寄存器是BX、SI或DI时,段寄存器使用DS,当指定寄存器是BP时,段寄存器使用SS。 6基址变址寻址(Based Indexed Addressing) 操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和。在这种方式中,只要用上BP寄存器,那么默认的段寄存器就是SS;在其他情况下,默认的段寄存器均为DS。 7基址变址相对寻址(Relative based indexed addressing) 使用基址变址寻址方式时允许带一个8位或16位的位移量disp,称为基址变址相对寻址。 例如: MOV AX,dispBXSI ;源操作数的物理

5、地址DS10HBXSIdisp 设DS2000H,BX1500H,SI0300H,disp0200H,(21A00H)26BFH,则物理地址DS10HBXSIdisp20000H1500H0300H0200H21A00H。指令执行后,AX26BFH。 3.1.2 转移地址的寻址方式指令系统中有一类指令可以用来控制程序的执行顺序,从而实现分支、循环以及子程序等复杂的程序结构,这类指令属于控制转移类指令,它们通过修改指令指针IP以及代码段寄存器CS的值来实现转移。与前面所述的一般数据的寻址方式不同,转移类指令需要用一定的寻址方式指出转移的目的地址,这就是转移地址的寻址方式。 1段内直接寻址 转向的

6、有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。 指令的汇编语言格式表示为 JMP NEAR PTR PROGIA JMP SHORT QUEST 2段内间接寻址 转移目的指令的偏移地址存放在寄存器或存储器中,而此寄存器或存储器可以用一般数据的寻址方式给出。 3段间直接寻址 在指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到另一个段的转移操作。 指令的汇编语言格式可表示为 JMP FAR PTR NEXTROUTINT 其中,NEXTROUTINT为转向的符号地址,FAR P

7、TR则是表示段间转移的操作符。 4段间间接寻址 用存储器中两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。这里,存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。 这种指令的汇编语言格式可表示为 JMP DWORD PTRINTERSBX 其中INTERSBX说明数据寻址方式为直接变址寻址方式,DWORD PTR 为双字操作符,说明转向地址需取双字为段间转移指令。3.1.3 隐含寻址方式 除了上述常见的寻址方式以外,还有一类特殊的寻址方式,称为隐含寻址,即指令中不出现操作数,但指令本身隐含指示了操作数的来源。如串操作指令MOVS,其源操

8、作数隐含由DS:SI寄存器间接寻址,而目的操作数则隐含由ES:DI寄存器间接寻址。 3.2 8086的指令系统3.2.1 数据传送指令 1通用数据传送指令 1)MOV指令 MOV指令是形式最简单、用得最多的指令。它允许在CPU的寄存器之间、存储器和寄存器之间传送字节和字数据,也可以将立即数传送到寄存器或存储器中。 格式:MOV OPRD1,OPRD2 说明:MOV是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。 功能:将源操作数(字或字节)传送到目的操作数,源操作数保持不变。 2)堆栈操作指令 堆栈是以“先进后出”方式工作的一个存储区,栈区的段地址由SS寄存器的内容确定,而栈顶位置

9、由堆栈指针SP寄存器的内容来确定。堆栈操作指令包括入栈(PUSH)和出栈(POP)指令两类。 (1)入栈操作。 格式:PUSH OPRD ;OPRD为源操作数 (2)出栈操作。 格式:POP OPRD; OPRD为目的操作数 3)数据交换指令XCHG 格式:XCHG OPRD1, OPRD2 功能:完成数据交换。把一个字节或一个字的源操作数与目的操作数相互交换。交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,也不能在累加器之间进行。 4)字节转换指令XLAT 格式:XLAT 转换表 功能:用查表方式将一种代码转换(翻译)成另一种

10、代码。XLAT指令有两种格式,第一种格式中的“转换表”为表格的首地址,一般用符号表示,以提高程序的可读性,但它也可以省略,即用第二种格式。 2输入/输出(I/O)指令 1)输入指令IN 格式: IN AL,端口地址n ;ALn IN AX,端口地址n ;AXn1n IN AL,DX ;ALDX IN AX,DX ;AXDX1DX 功能:从I/O端口输入数据至AL或AX。允许把一个字节由一个输入端口传送到AL中,或者把一个字由一个输入端口传送到AX中。若端口地址超过256(00FFH),则必须用DX寄存器来保存该端口地址,这样用DX作端口地址时,最多可寻找64K(0000FFFFH)个端口。 2

11、)输出指令OUT 格式: OUT 端口地址n,AL ;ALn OUT 端口地址n,AX ;AXn1n OUT DX,AL ;ALDX OUT DX,AX ;AXDX1DX 功能:将AL或AX的内容输出至I/O端口。可以将AL或AX中的内容传送到一个输出端口,端口寻址方式与IN指令相同。 3地址目标传送指令 1)取有效地址指令LEA 格式:LEA OPRD1,OPRD2 2)双字指针送寄存器和DS指令LDS 格式:LDS OPRD1,OPRD2 3)双字指针送寄存器和ES指令LES 格式:LES OPRD1,OPRD2 4标志传送指令 1)标志传送AH指令LAHF 这条指令的功能是将标志寄存器的

12、低8位数据传送至AH寄存器。 2)AH送标志寄存器低字节指令SAHF 这条指令与LAHF指令的操作相反,可以将寄存器AH的内容送至标志寄存器的低8位。 3)标志入栈指令PUSHF 将标志寄存器的内容压入堆栈顶部,同时修改堆栈指针,但不影响标志位。 4)标志出栈指令POPF 把当前堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。 3.2.2 算术运算指令 1加法指令 1)加法指令ADD 格式:ADD OPRD1,OPRD2 2)带进位的加法指令ADC 格式:ADC OPRD1,OPRD2 3)增量指令INC 格式:INC OPRD 例如: ADD AL,10H ;ALAL10H

13、 ADD BX,3000H ;通用寄存器与存储单元内容相加 例如: MOV AX,7248H;将立即数7248H送AX寄存器 ADD AX,91F9H;(AX)0441H,且CF1 MOV BX,01 ADC BX,02 执行结果为 (AX)0441H,(BX)04 各标志位的值为:ZF0,AF1,PF1,CF1,OF0,SF0 2减法指令 1)减法指令SUB 格式:SUB OPRD1,OPRD2 2)带借位的减法指令SBB 格式:SBB OPRD1,OPRD2 3)减量指令DEC 格式:DEC OPRD 4)取补指令NEG 5)比较指令CMP 例如: SUB CX,BX ;CX CX-BX

14、SUB BP2,CL ;将SS段的BP2所指的单元中的值减去CL中的值,结果放在BP2所指的堆栈单元中 例如: MOV CX,2100H NEG CX MOV DX,CX DEC DX 执行结果:CX0DF00H,DX0DEFFH,SF1,CF1,ZF0,PF1,AF0,OF0。 3乘法指令 1)无符号数乘法指令MUL 格式:MUL OPRD ;OPRD为源操作数 例如: MOV AL,FIRST MUL SECOND ;结果为AXFIRSTSECOND MOV AX,THIRD; MUL AX ;结果为 DX:AXTHIRDTHIRD MOV AL,30H CBW ;字扩展AX30H MOV

15、 BX,2000H MUL BX 2)符号数乘法指令IMUL 格式:IMUL OPRD; OPRD 为源操作数 例如: MOV AL,0C8H MOV BL,43H IMUL BL 指令执行结果为AXF158H。 4除法指令 1)无符号数除法指令DIV 格式:DIV OPRD 2)整数除法指令IDIV 格式:IDIV OPRD 例如: AX2000H,DX200H,BX1000H, 则DIV BX执行后,AX2002H,DX0000H。 5符号扩展指令 格式:CBW 功能:将AL中字节数的符号位扩展到AH的各个位,形成AX中的字数据。 格式:CWD 功能:将AX中字数据的符号位扩展到DX中的各

16、个位,形成DX和AX中的双字数据。 6BCD调整指令 1)组合BCD数 格式:DAA 功能:组合BCD数的加法调整指令,半字节1位BCD相加,超过9或有进位,要加6调整。若低半字节调整后有进位,则高半字节再做加6调整。 格式:DAS 功能:组合BCD数的减法调整指令,半字节1位BCD相减,有借位,要减6调整。 2)分离BCD数 格式:AAA 功能:分离BCD数的加法调整指令,只取低半字节,其余同DAA指令。 格式:AAS 功能:分离BCD数的减法调整指令,只取低半字节,其余同DAS指令。 格式:AAM 功能:分离BCD数的乘法调整指令,两个BCD数相乘,结果在AL中,除以10后商在AH中,余数

17、在AL中。 格式:AAD 功能:分离BCD数的除法调整指令,先将两个BCD码转为一字节二进制(高位10低位)得到被除数,放于AL中,AH清零,运算后,商送AL,余数送AH。 3.2.3 位操作指令1逻辑运算指令1)取反指令NOT格式:NOT OPRD功能:对OPRD给出的操作数按位取反。此指令对标志无影响。2)逻辑与指令AND格式:AND OPRD1,OPRD2功能:对两个操作数按位进行逻辑“与”运算,结果送回目的操作数。 3)逻辑或指令OR 格式:OR OPRD1,OPRD2 功能:对指定的两个操作数按位进行逻辑“或”运算。结果送回目的操作数。 4)异或操作指令XOR 格式:XOR OPRD

18、1,OPRD2 功能:对两个指定的操作数按位进行“异或”运算,结果送回目的操作数。 5)测试指令TEST 格式:TEST OPRD1,OPRD2 功能:完成与AND指令相同的操作,结果只影响标志位,不改变目的操作数。通常使用它进行数据中某些位是0或1的测试。 3.2.3 位操作指令2移位指令1)逻辑右移SHR格式:SHR OPRD1,移位次数例如:ALabcdefgh ; abcdefgh均为二进制数1或0,逻辑右移指令SHR AL,1 ; 执行后,AL0abcdefgh、CFhALabcdefgh ; abcdefgh均为二进制数1或0)、CL3,逻辑右移指令SHR AL,CL; 执行后,A

19、L000abcde、CFf 2)算术右移SAR 格式:SAR OPRD1,移位次数 例如: ALabcdefgh; abcdefgh均为二进制数1或0,算术右移指令 SAR AL,1 ; 执行后,ALaabcdefgh、CFh ALabcdefgh; abcdefgh均为二进制数1或0、CL3,算术右移指令 SAR AL,CL ; 执行后,ALaaaabcde、CFf 3)算术/逻辑左移SAL/SHL 格式:SAL/SHL OPRD1,移位次数 功能:将OPRD1中的8位或16位二进制数向左移动1位或者CL位,最左边位(即最高位)或者最后移出位至CF,最右边的1位(即最低位)或右边的CL位移入

20、0。 例如: ALabcdefgh; abcdefgh均为二进制数1或0, 逻辑左移指令 SHL AL,1 ; 执行后,ALbcdefgh0、CFa ALabcdefgh; abcdefgh均为二进制数1或0)、CL3,逻辑左移指令 SHL AL,CL ; 执行后,ALdefgh000、CFc 4)循环左移指令ROL 格式:ROL OPRD1,移位次数 例如: ALabcdefgh; abcdefgh均为二进制数1或0、CL5,循环左移指令 ROL AL,CL ; 执行后,ALfghabcde、CFe 5)循环右移指令ROR 格式:ROR OPRD1,移位次数 例如: ALabcdefgh;

21、abcdefgh均为二进制数1或0,循环右移指令 ROR AL,1 ; 执行后,ALhabcdefgh、CFh 6)带进位循环右移RCR 格式:RCR OPRD1, 移位次数 例如: ALabcdefgh、CFi(abcdefghi均为二进制数1或0)、CL4,执行指令RCR AL,CL后,ALfghiabcd、CFe。 7)带进位循环左移RCL 格式:RCL OPRD1, 移位次数 例如: ALabcdefgh、CFi(abcdefghi均为二进制数1或0),执行指令RCL AL,1后,ALbcdefghi、CFa。 3.2.4 串操作指令与重复前缀 1串操作 串操作类指令用来实现内存区域中

22、数据串的操作,这些数据串可以是字节类型的字节串,也可以是字类型的字串。串操作指令共有五种。 1)串传送指令MOVS 功能:把数据段中由SI间接寻址的一个字节(或字)数据传送到附加段中由DI间接寻址的一个字节(或字)单元中;然后根据方向标志DF及所传送数据的类型(字节或字)的不同,对SI及DI进行1(字节)或2(字)的修改,即修改地址指针。 2)串比较指令CMPS 功能:把数据段中由SI间接寻址的一个字节(或字)数据与附加段中由DI间接寻址的一个字节(或字)数据进行比较,使比较的结果影响标志位;然后根据方向标志DF及所进行比较的操作数的类型(字节或字)对SI及DI进行1(字节)或2(字)的修改,

23、即修改地址指针。 3)串扫描指令SCAS 功能:使用由指令指定的关键字节或关键字(存放在AL或AX中),与附加段中由DI间接寻址的一个字节(或字)数据进行比较,使比较的结果影响标志位;然后根据方向标志DF及所进行操作的数据类型(字节或字)的不同,对SI及DI进行1(字节)或2(字)的修改,即修改地址指针。 4)串存储指令STOS 功能:把指令中指定的一个字节或一个字(分别存放在AL及AX寄存器中),传送到附加段中由DI间接寻址的字节内存单元(或字内存单元)中去,然后根据方向标志DF及进行操作的数据的类型(字节或字)对DI进行修改操作。 。在重复前缀的控制下,可连续将AL(AX)的内容存入到附加

24、段的一段内存区域中去,该指令不影响标志位。 5)串装入指令LODS 功能:与串存储指令的功能相反,实现从“DS SI”间接寻址的字节串(或字串)中读出数据传送到AL(或AX)寄存器中。 2重复前缀 串操作类指令可以与重复前缀配合使用,从而操作得以重复执行,并在条件符合时停止执行。 例如: 分析下列几行程序,指出指令执行后,CX和ZF的值。 STR1 DBSPEED CLD MOV CX,5 MOV AL,D LEA DI,STR1 REPNE SCASB HLT 指令执行结果为CX0,ZF1。 3.2.5 控制转移指令 1无条件转移、调用和返回指令 1)无条件转移指令JMP 格式:JMP OPRD ;OPRD是转移的目的地址 功能:转移到目的地址所指示的指令去执行。 该指令分直接转移和间接转移两种,直接转移的3种形式如下。 (1)短程转移。 JMP SHORT OPRD (2)近程转移。 JMP NEAR PTR OPRD (3)远程转移。 间接转移指令的目的地址可以由存储器或寄存器给出,有以下两种形式

温馨提示

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

评论

0/150

提交评论