1、模块3 指令系统,任务1 指令格式 3.1.1 指令前缀 3.1.2 指令中各字段的意义 任务2 8086寻址方式 3.2.1 数据类型 3.2.2 寻址方式 任务3 8086指令系统 3.3.1 数据传送类指令,下一页,模块3 指令系统,3.3.2 地址传送指令 3.3.3 算术运算类指令 3.3.4 控制转移类指令 3.3.5 处理器控制类指令 3.3.6 逻辑运算与移位类指令 任务4 汇编语言简述 3.4.1 汇编语言及语句格式 3.4.2 汇编语言程序结构,下一页,上一页,模块3 指令系统,3.4.3 常用伪指令 3.4.4 宏指令 3.4.5 条件汇编 3.4.6 保护方式编程指令
2、3.4.7 与保护方式程序接口 3.4.8 汇编语言程序上机过程 3.4.9 顺序程序 3.4.10 循环程序 3.4.11 分支程序设计,下一页,上一页,模块3 指令系统,3.4.12 子程序设计 3.4.13 DOS调用程序设计,上一页,模块3 指令系统,从科学发展的角度,对Intel新增加的指令也进行了介绍。从每一条指令的功能和操作,可以进一步领会微机硬件的操作过程。 模块3将以Intel指令系统为背景对指令格式、指令功能进行描述,对从8086到Pentium的指令系统中的常用的一些指令有选择地、分门别类地进行了说明。 本模块的重点是指令格式和指令的操作。,返回,任务1 指令格式,指令由
3、许多部分组成。在构成指令的这几部分中,只有操作码部分是必须存在的,其余各部分则要根据指令操作所涉及的操作数类型以及操作数存放在何处等因素来决定取舍。 任何一条机器指令都是由一组二进制代码构成的,通常又被进一步分成操作码部分和地址码部分,一般的指令格式如图3-1所示。 Intel从8086到Pentium系列微处理器的指令都是由多字节组成的,一条指令可以由多个字节构成。指令的操作码表示指令所执行的操作,通常用指令的第一个字节表示。但由于一个字节所能表示的指令的条数有限,因此还会在指令的第二个字节中占用3位用作操作码。在一条指令中,除操作码之外的那些字节则被用来表示操作数的地址码。 从8086到8
4、0286都是16位的微处理器,所以,它们的指令格式是16位的,如图3-2所示。,下一页,返回,图3-1指令格式,返回,图3-2 16位的指令格式,返回,任务1 指令格式,Intel从80386以后的各高档微处理器都是32位的微处理器,它们所用的指令格式为如图3-3所示的32位的指令格式。 初看起来,从8086到Pentium的指令格式不尽相同,且比较复杂。但这些指令却是很有规律的,而且16位的指令格式与32位的指令格式在80386以上的高档微处理器上是兼容的。如果Intel的32位微处理器运行的是16位程序,则像32位的指令格式那样,必须带有指令前缀,且在实模式下进行操作,在32位的微处理器上
5、按16位的指令格式运行。 Pentium微处理器指令的一般格式如图3-3所示,Pentium微处理器的所有指令都是如图3-3所示的指令格式的子集。由图3-3可知,一条指令由可任选的指令前缀(可以是任何的次序),一个或两个原操作码字节,有可能要用的地址说明符(由Mod R/M字节和按比例变址基地址SIB字节构成),一个偏移量(根据需要)和一个立即操作数数据字段(如果需要)等元素组成。,下一页,返回,上一页,图3-3 32位的指令格式,返回,任务1 指令格式,3.1.1指令前缀 指令前缀是置于指令前面的一个或多个字节,它的作用是用来修改指令的操作。下面所列出的这4个指令前缀就是供应用程序使用的。
6、1.指令前缀 指令前缀并不经常出现,若出现,则由锁定前缀(LOCK)或一个重复前缀组成。 2.段的超前前缀 段的超前前缀用于显式地指定本条指令将使用CS,SS,DS,ES,FS,GS这6个段寄存器中的哪一个。用于代替Pentium微处理器为本指令生成默认的段寄存器。 3.操作数大小前缀 指令默认的操作数大小是16位或32位的,操作数大小前缀用来在32位和16位操作数之间进行切换。,下一页,返回,上一页,任务1 指令格式,4.地址大小前缀 在对存储器进行寻址操作时,微处理器既可以使用16位地址,也可以使用犯位的地址。地址的大小决定了指令格式中偏移量的大小以及在计算有效地址时生成的偏移量的大小。
7、3.1.2指令中各字段的意义 1.操作码字段 操作码字段占用1个或2个字节。由操作码字段规定指令的操作性质,如操作数的类型(是字节、字、还是双字)、操作数的传送方向(是取自存储器,还是存入存储器)以及寄存器编码或符号扩展等。,下一页,返回,上一页,任务1 指令格式,2. Mod R/M字段 Mod R/M字段和SIB字段是寻址方式说明字段。Mod R/M是主寻址字节,由这个字节指定操作数是寄存器操作数还是存储器操作数。若是存储器操作数,则用这个字节中的一个字段来说明将要采用的寻址方式。其实,ModR/M字节由Mod字段(2位)、Reg/OPcode字段(3位)和R/ M字段(3位)这样3个字段
8、组成。 Mod字段(2位)和R/M字段(3位)这5位可以构造成32个不同的值。具体地,它们可分别用于指示8个寄存器和24种变址方式;Reg/OPcode字段(3位)用来指定8个寄存器中的一个,或者用来作为操作码信息的3个补充位;R/M字段(3位)用来指定一个寄存器,指示出操作数的位置,或者用来作为寻址方式的一个组成部分,与Mod字段组合起来进行编码。,下一页,返回,上一页,任务1 指令格式,3.SIB字段 SIB字段又被进一步分成3个字段,分别是SS字段(2位),Index字段(3位)和Base字段(3位)。SS字段在进行按比例变址操作时用来当比例因子,Index字段用来指示使用的是哪一个变址
9、寄存器,而用Base字段则指示基地址寄存器。 4.偏移量 寻址方式一经确定,偏移量也就随之确定了,一个用8位、16位或32位的带符号的整数表示的偏移量也就被放入了指令之中。 5.立即数 立即数就是包括在指令中的一个8位、16位或32位的操作数。,返回,上一页,任务2 8086寻址方式,在指令中,操作数或操作数的地址可用多种方式来表示,统称为寻址方式。同一条指令可有不同的寻址方式,以说明不同的操作对象。 3.2.1数据类型 在计算机中,数据有多种类型。一种是指令处理的对象,称为操作数;另一种表示指令,称为指令字;第三种是存储器单元的序号,称为地址。其中,操作数又分为两种,一种是参加运算或由计算机
10、处理的对象,称为数据操作数,简称为数据;另一种用来表示转移指令的目标地址,称为转移地址操作数,简称为转移地址。,下一页,返回,任务2 8086寻址方式,1.数据操作数 根据操作数存放的位置或者存放方式,常见的数据操作数有3种,一种是在指令中直接给出,称为立即数;另一种存放在寄存器中,称为寄存器数据;第三种存放在存储器中,称为存储器数据。 2.转移地址操作数 转移地址操作数用来表示转移指令的目标地址。其表示方式可以在转移指令中直接给出,也可以根据某一寻址方式经计算后求得。 3.2.2寻址方式 根据操作数的两大类型,8086微处理器的寻址方式也可分为两大类型,即数据寻址方式和转移地址寻址方式。,下
11、一页,返回,上一页,任务2 8086寻址方式,1.数据寻址方式 数据寻址方式有以下7种类型。 1)立即数寻址 立即数是指令操作数域直接给出参加运算或者进行某种操作的数据,又称即时数。它跟在操作码之后作为指令的一部分直接存放在代码段中,有8位、16位等形式。对于16位数据,低字节在先,高字节在后。举例如下。 MOV AL,5 执行后(AL) =O5H,其示意如图3-4(a)所示。 又如,指令 MOV AX,2790H 执行后(AX) =2790H,其示意如图3-4(b)所示。,下一页,返回,上一页,图3-4立即寻址示意图,(a)8位立即数;(b)16位立即数,返回,任务2 8086寻址方式,立即
12、数只能是源操作数,不能是目的操作数。这种寻址方式执行速度快,但是灵活性差,主要用来对寄存器或存储器赋值。 2)寄存器寻址 寄存器寻址是指令操作数域给出存放操作数的寄存器。对于8位操作数,寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH;对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP。举例如下。 MOV BX,AX 其示意如图3-5所示。由于操作数在寄存器中,因此与存储器寻址相比,执行速度快。,下一页,返回,上一页,图3-5寄存器寻址示例,返回,任务2 8086寻址方式,3)直接寻址 直接寻址是指令操作数域给出存放操作数地址的偏移量,也称为有效地址,常用E
13、A表示。如果操作数存放在数据段以外的其他段中,应在指令中指定段寄存器。直接寻址示意如图3-6所示。举例如下。 MOV BX,2000 H 设执行前(DS) = 4000 H , EA = 2000 H , ( 42000 H ) = 1 FH , ( 42001 H ) = 75 H,则执行后(BX)=751FH,其示意如图3-7所示。 在汇编语言中,也可以使用符号地址代替数值地址。举例如下。 MOV AX,VALUE 其中,VALUE表示存放操作数单元的符号地址。符号地址出现在指令中时,可省略方括号,例如,MOV AX,DATA。,下一页,返回,上一页,图3-6直接寻址示意图,返回,图3-7
14、直接寻址示例,返回,任务2 8086寻址方式,4)寄存器间接寻址 寄存器间接寻址是指令操作数域给出存放操作数地址偏移量的寄存器。其寄存器主要有BX ,BP,SI和DI。如果没有特别说明,使用寄存器BX ,SI ,DI寻址时默认操作数在数据段中,即段寄存器DS。使用BP寻址时,默认操作数在堆栈段中,即段寄存器SS。物理地址的生成如图3-8所示。举例如下。 MOV AX,BX 设执行前(DS)=3000H, ( BX)=3000H,则执行后(AX) =2C7DH,其示意如图3-9所示。 又如,指令MOV AX,ES : SI,其段寄存器为ES,表示数据在附加段中。,下一页,返回,上一页,图3-8寄
15、存器间接寻址示意图,返回,图3-9寄存器间接寻址示例,返回,任务2 8086寻址方式,5)寄存器相对寻址 寄存器相对寻址是指令操作数域给出存放基地址的基址寄存器和一个偏移量,基地址与偏移量相加,作为操作数地址的偏移地址,即有效地址EA。段地址左移4位,与有效地址相加,生成20位的物理地址,如图3-10所示。举例如下。 MOV AX,DATADI 设执行前(DS)=3000H, (DI) =2000H, DATA =300H,则执行后(AX) =201AH,其意如图3-11所示。 6)基址加变址寻址 基址加变址寻址是指令操作数域给出一个存放基地址的基址寄存器和一个存放变址基值的变址寄存器,两个寄
16、存器中的数据相加,作为操作数的偏移地址,即有效地址EA。基址寄存器主要有BX ,BP,变址寄存器主要有SI和DI。其中,基址寄存器BX默认段寄存器DS基址寄存器BP默认段寄存器SS,允许使用段跨越,其示意如图3-12所示。,下一页,返回,上一页,图3-10寄存器相对寻址示意图,返回,图3-11寄存器相对寻址示例,返回,图3-12基址加变址寻址示意图,返回,任务2 8086寻址方式,举例如下。 MOV AX,BXDI或MOV AX,BX+DI 设执行前(DS) = 2100H, ( BX) = 0158H, ( DI) =10A5H,则执行后(AX) =1234H,其示意如图3-13所示。 7)
17、相对基址加变址寻址 相对基址加变址寻址是指令操作数域给出的是一个存放基地址的基址寄存器、一个存放变址基值的变址寄存器和一个偏移量,两个寄存器中的数据及偏移量相加,作为操作数的偏移地址,即有效地址EA。基址寄存器主要有BX , BP,变址寄存器主要有SI和DI。其中,基址寄存器BX默认段寄存器DS,基址寄存器BP默认段寄存器SS。举例如下。,下一页,返回,上一页,图3-13基址加变址寻址示例,返回,任务2 8086寻址方式,MOV AX,MASKBXDI MOV AX,MASKBX+DI MOV AX,MASK+BX+DI 设执行前(DS) =3000H, ( BX) =2000H, ( DI) =1000H, MASK= 0250H,则执行后(AX)= 4675 H,其示意如图3-14所示。 这种寻址方式为数组、表格及堆栈的访问提供了很大的方便。,下一页,返回,上一页,图3-14相对基址变址寻址示例,返回,