资源预览内容
第1页 / 共150页
第2页 / 共150页
第3页 / 共150页
第4页 / 共150页
第5页 / 共150页
第6页 / 共150页
第7页 / 共150页
第8页 / 共150页
第9页 / 共150页
第10页 / 共150页
亲,该文档总共150页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
指令指令是计算机用以控制各个部件协调是计算机用以控制各个部件协调工作的命令,工作的命令,指令系统指令系统是微处理器所能执是微处理器所能执行的指令的集合,它与微处理器有密切的行的指令的集合,它与微处理器有密切的联系,不同的微处理器有不同的指令系统联系,不同的微处理器有不同的指令系统 第第3 3章章 指令系统指令系统3.1 8086指令系统概述 计算机的工作就是运行程序,而程序由存储在存储器中的指令序列构成。 微处理器高效软件的发展要求对每条指令的寻址方式(Addressing Mode)都要相当地熟悉。机器语言指令由二进制代码组成。 指令语句一般由操作码(Operating Code)和操作数(Operating Data)两部分组成:汇编语言助记符指令书写的基本格式为汇编语言助记符指令书写的基本格式为(标号标号): 操作码操作码 (操作数操作数) (;注释注释) 其中,操作码是指令语句中不可缺少的;带括号其中,操作码是指令语句中不可缺少的;带括号的项是可选项,如果有此项时,不能加括号;多个的项是可选项,如果有此项时,不能加括号;多个操作数间是以操作数间是以,隔开的;操作码与操作数之间必须隔开的;操作码与操作数之间必须以空格分开。以空格分开。助记符指令格式助记符指令格式 操作码操作码由便于记忆的助记符表示由便于记忆的助记符表示(通常为英文单通常为英文单词缩写词缩写),操作码表示计算机执行什么操作;,操作码表示计算机执行什么操作; 操作数操作数可能指明了参与操作的数本身,或规定了可能指明了参与操作的数本身,或规定了操作数的地址。操作数的地址。 8086/8088系统中一条指令的操作数可以是双系统中一条指令的操作数可以是双操作数操作数(源操作数和目的操作数源操作数和目的操作数),也可以是单操作,也可以是单操作数,有的指令还可以没有操作数或隐含操作数。而数,有的指令还可以没有操作数或隐含操作数。而80386/80486系统中的指令则有多个操作数系统中的指令则有多个操作数操作数主要分为三类:操作数主要分为三类:立即数操作数立即数操作数 立即数即常数,是一个固定数值的操作数;立即数即常数,是一个固定数值的操作数;寄存器操作数寄存器操作数 寄存器操作数存放在寄存器操作数存放在CPU的某个寄存器中;的某个寄存器中;存储器操作数存储器操作数 存储器操作数则存放在内存的数据区中。存储器操作数则存放在内存的数据区中。3.2 寻址方式 通过指令采用合适的方式指定操作数的地址。通过指令采用合适的方式指定操作数的地址。寻找操作数所在地址的方法称为寻找操作数所在地址的方法称为寻址方式。寻址方式。 在在80X86系统中,寻址方式通常分为两种:一系统中,寻址方式通常分为两种:一种为种为寻找操作数的地址寻找操作数的地址,称为,称为数据寻址数据寻址;另一种为;另一种为寻找要执行的下一条寻找要执行的下一条指令的地址指令的地址,即程序转移或子,即程序转移或子程序调用时的目的地址或入口地址,称为程序调用时的目的地址或入口地址,称为程序转移程序转移地址寻址地址寻址。3.2.1 数据的寻址方式数据的寻址方式 本节中寻址方式一般针对源操作数而言,以通用本节中寻址方式一般针对源操作数而言,以通用传送指令为例传送指令为例 MOV DST,SRC SRC为源操作数,指令执行过程中原值保持不变;为源操作数,指令执行过程中原值保持不变;DST为目的操作数,原值不保留,为目的操作数,原值不保留,MOV指令完成从指令完成从源操作数向目的操作数拷贝数据的功能。源操作数向目的操作数拷贝数据的功能。3.2.1 数据的寻址方式数据的寻址方式1立即寻址立即寻址(Immediate Addressing)操作数包含在指令码中,由指令给出。汇编语操作数包含在指令码中,由指令给出。汇编语言可用多种方式描述立即数。立即操作数可以是常言可用多种方式描述立即数。立即操作数可以是常数,如果操作数以字母开头,汇编程序要求操作数数,如果操作数以字母开头,汇编程序要求操作数在其前加在其前加0。立即寻址通常用于给寄存器赋值,并且只适用立即寻址通常用于给寄存器赋值,并且只适用于源操作数字段,不能用于目的操作数字段,要求于源操作数字段,不能用于目的操作数字段,要求源操作数与目的操作数长度一致。源操作数与目的操作数长度一致。MOV AL,100指令执行后,(AL)=64HMOV CL,01001100B指令执行后,(CL)=4CHMOV AX,1234H 指令执行后,(AX)=1234H3.2.1 数据的寻址方式数据的寻址方式 立即数如果是多字节数,则高位字节存放在高立即数如果是多字节数,则高位字节存放在高地址中,低位字节存放在低地址中。地址中,低位字节存放在低地址中。3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式2寄存器寻址寄存器寻址(Register Addressing)寄存器寻址是一种寄存器寻址是一种最普遍的数据寻址方式最普遍的数据寻址方式,指,指令指定寄存器号,操作数存放在指令规定的令指定寄存器号,操作数存放在指令规定的CPU内内部寄存器中。可用于寄存器寻址的为通用寄存器。部寄存器中。可用于寄存器寻址的为通用寄存器。 寄存器寻址不需要访问存储器,也不需要使用寄存器寻址不需要访问存储器,也不需要使用总线周期,操作在总线周期,操作在CPU内部进行,因而可取得内部进行,因而可取得较高较高的运算速度的运算速度。MOV AX,BX指令执行前,指令执行前,(AX)=5678H,(BX)=1234H;指令执行后,指令执行后,(AX)=1234H,(BX)=1234H。 除上述两种寻址方式外,以下各种寻址方式的操除上述两种寻址方式外,以下各种寻址方式的操作数均在代码段以外的存储区中,寻址方式通过不同作数均在代码段以外的存储区中,寻址方式通过不同的途径求得操作数的偏移地址,即有效地址的途径求得操作数的偏移地址,即有效地址EA (Effective Address)。3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式3直接寻址直接寻址(Direct Addressing)直接寻址由直接寻址由指令直接给出操作数的有效地址指令直接给出操作数的有效地址EA,操作数本身在存储单元中,通常存放在数据段,默认操作数本身在存储单元中,通常存放在数据段,默认的段寄存器为的段寄存器为DS。操作数有效地址格式为。操作数有效地址格式为数值数值 或或 符号符号 或或 符号符号MOV AX,2040H执行结果为执行结果为 (AX)=6A4BH 注意:本指令不是将立即数注意:本指令不是将立即数2040H传送到传送到AX,而,而是将有效地址是是将有效地址是2040H的的存储单元的内容存储单元的内容传送到传送到AX。 3.2.1 数据的寻址方式数据的寻址方式 汇编语言指令中可以用汇编语言指令中可以用符号地址符号地址代替数值地址:代替数值地址:MOV AX,TABLE;或;或MOV AX,TABLE;这两者等价,此处这两者等价,此处TABLE为存放操作数单元的符号地为存放操作数单元的符号地址。址。如果要对如果要对其他段寄存器其他段寄存器所指出的存储区进行直接所指出的存储区进行直接寻址,则在指令前必须用前缀指出段寄存器名。寻址,则在指令前必须用前缀指出段寄存器名。MOV AX,ES:2000H;将将ES段的段的2000H和和2001H两单元的内容传送到两单元的内容传送到AX。3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式4寄存器间接寻址寄存器间接寻址(Register Indirect Addressing)操作数的操作数的有效地址有效地址存放在基址寄存器或变址寄存存放在基址寄存器或变址寄存器器中,而中,而操作数操作数则在存储器则在存储器中。对中。对16位数进行寄存器位数进行寄存器间接寻址时可用的寄存器是基址寄存器间接寻址时可用的寄存器是基址寄存器BX、BP和变和变址寄存器址寄存器SI、DI。使用。使用BP时默认的段寄存器为时默认的段寄存器为SS,使用其他寄存器默认的段寄存器为使用其他寄存器默认的段寄存器为DS。 操作数有效地址格式为:操作数有效地址格式为:间接寻址的寄存器间接寻址的寄存器。寻址寄存器放在方括号中寻址寄存器放在方括号中。MOV BX,BP指令执行前,指令执行前,(BP)=4000H,执行结果为:执行结果为:(BX)=50A0H。3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式 寄存器间接寻址方式可用于寄存器间接寻址方式可用于表格表格处理,执行处理,执行完一条指令后,只需修改寄存器的内容就可以取完一条指令后,只需修改寄存器的内容就可以取出表格中的下一项。出表格中的下一项。3.2.1 数据的寻址方式数据的寻址方式5寄存器相对寻址寄存器相对寻址(Register Relative Addressing)操作数的操作数的有效地址有效地址为指令中规定的间接寻址为指令中规定的间接寻址寄寄存器的内容存器的内容和指令中指定的和指令中指定的位移量位移量之和。操作数存之和。操作数存放在存储器中。操作数有效地址格式为放在存储器中。操作数有效地址格式为位移量位移量间接寻址的寄存器间接寻址的寄存器 或或 位移量位移量+间间接寻址的寄存器接寻址的寄存器MOV AX,TABSI如果如果TAB为为16位的符号地址,其值为位的符号地址,其值为3080H,(SI) =2000H,默认的段寄存器为,默认的段寄存器为DS,则,则EA=TAB+(SI)=3080H+2000H=5080H3.2.1 数据的寻址方式数据的寻址方式 寄存器相对寻址可用于寄存器相对寻址可用于表格处理表格处理或访问一维或访问一维数组中的元素。把表格的数组中的元素。把表格的首地址首地址设置为位移量,设置为位移量,利用利用修改间接寄存器的值修改间接寄存器的值来存取表格中的任意一来存取表格中的任意一个元素。个元素。3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式6基址变址寻址基址变址寻址(Based Indexed Addressing)操作数的有效地址是一个基址寄存器和变址寄操作数的有效地址是一个基址寄存器和变址寄存器的内容之和,操作数本身在存储单元中。操作存器的内容之和,操作数本身在存储单元中。操作数有效地址格式为:数有效地址格式为: 基址寄存器基址寄存器变址寄存器变址寄存器 MOV AX,BXSI如果如果 (BX)=0200H,(SI)=0010H, (DS)=3000H,则则 EA=(BX)+(SI)=0200H+0010H=0210H 物理地址物理地址=(DS)10H+EA =3000H10H+0210H =30210H若若30210H和和30211H中分别存放的数值为中分别存放的数值为56H、78H,则指令执行结果,则指令执行结果(AX)=7856H。3.2.1 数据的寻址方式数据的寻址方式基址变址寻址同样适用于基址变址寻址同样适用于数组数组或或表格表格处理,处理,首地首地址址存放在基址寄存器中,存放在基址寄存器中,变址寄存器变址寄存器访问数组中各元访问数组中各元素。因两个寄存器都可以修改,所以它比寄存器相对素。因两个寄存器都可以修改,所以它比寄存器相对寻址方式更灵活。需要注意的是,两个寄存器不能均寻址方式更灵活。需要注意的是,两个寄存器不能均为基址寄存器,也不能均为变址寄存器。为基址寄存器,也不能均为变址寄存器。3.2.1 数据的寻址方式数据的寻址方式7基址变址相对寻址基址变址相对寻址 (Relative Based Indexed Addressing)操作数的有效地址为指令中规定的操作数的有效地址为指令中规定的1个基址寄存个基址寄存器和器和1个变址寄存器的内容及指令中指定的位移量三个变址寄存器的内容及指令中指定的位移量三者之和。者之和。 位移量位移量基址寄存器基址寄存器变址寄存器变址寄存器可以表示成多种形式组合。寻址寄存器要放在方括可以表示成多种形式组合。寻址寄存器要放在方括号中。号中。3.2.1 数据的寻址方式数据的寻址方式MOV AX,TABBXSI(BX)=1000H,(SI)=2000H, TAB=0150H则则EA=(BX)+(SI)+ TAB=3150H执行结果执行结果 (AX)=1234H。3.2.1 数据的寻址方式数据的寻址方式3.2.1 数据的寻址方式数据的寻址方式 基址变址相对寻址通常用于对基址变址相对寻址通常用于对二维数组二维数组的访问。的访问。位移量为位移量为数组起始地址数组起始地址。基址寄存器和变址寄存器。基址寄存器和变址寄存器分别存放分别存放行行和和列列的值,利用相对基址变址寻址就可的值,利用相对基址变址寻址就可以直接访问二维数组中指定的某个元素。以直接访问二维数组中指定的某个元素。3.2.1 数据的寻址方式数据的寻址方式8隐含寻址隐含寻址(Concealed Addressing)有些指令的有些指令的指令码中不包含指明操作数地址指令码中不包含指明操作数地址的的部分,而其操作码本身隐含地指明了操作数的地址。部分,而其操作码本身隐含地指明了操作数的地址。 如:如:LODSB; 表示表示SI的内容送到的内容送到AL,SI指针加指针加1。该指令将。该指令将在后面串操作指令部分详细介绍。在后面串操作指令部分详细介绍。3.2.1 数据的寻址方式数据的寻址方式 9I/O端口寻址端口寻址 I/O端口寻址就是寻找输入输出设备的端端口寻址就是寻找输入输出设备的端口地址对口地址对I/O端口的寻址有以下两种方式。端口的寻址有以下两种方式。 (1) 直接端口寻址方式直接端口寻址方式 端口地址用端口地址用8位地址码表示:位地址码表示:INAL(AX or EAX),port8;OUT port8,AL(AX or EAX)如:如:IN AL,21H。表示从表示从I/O地址为地址为21H的的端口中读取数据到端口中读取数据到AL中。中。3.2.1 数据的寻址方式数据的寻址方式(2) 间接端口寻址方式间接端口寻址方式 端口地址为端口地址为16位,并规定存放在寄存器位,并规定存放在寄存器DX中。中。格式如下:格式如下:IN AL(AX or EAX),DX;OUT DX,AL(AX or EAX)如:如:IN AL,DX。这条指令表示从。这条指令表示从DX寄存器内寄存器内容所指定的端口中读取数据到容所指定的端口中读取数据到AL中。中。3.2.1 数据的寻址方式数据的寻址方式3.2.2 程序转移地址寻址方式程序转移地址寻址方式 CPU执行指令时,指令是按顺序存放在存储器执行指令时,指令是按顺序存放在存储器中的,而程序执行顺序是由中的,而程序执行顺序是由CS和和IP的内容来决定的。的内容来决定的。当程序执行到某一转移或调用指令时,需脱离程序当程序执行到某一转移或调用指令时,需脱离程序的正常顺序执行,而把它转移到指定的指令地址,的正常顺序执行,而把它转移到指定的指令地址,程序转移及调用指令通过改变程序转移及调用指令通过改变IP和和CS内容,就可改内容,就可改变程序执行顺序。变程序执行顺序。 根据程序转移地址相对于当前程序地址的关根据程序转移地址相对于当前程序地址的关系,可分为系,可分为段内、段外段内、段外;又根据转移地址是否直;又根据转移地址是否直接出现在指令中,分为接出现在指令中,分为直接、间接直接、间接,所以有四种,所以有四种程序转移寻址方式:段内直接寻址、段内间接寻程序转移寻址方式:段内直接寻址、段内间接寻址、段间直接寻址及段间间接寻址。址、段间直接寻址及段间间接寻址。3.2.2 程序转移地址寻址方式程序转移地址寻址方式1段内直接寻址段内直接寻址(Intrasegment Direct Addressing)段内直接寻址方式也称为段内直接寻址方式也称为相对寻址方式相对寻址方式。指令。指令码中包括一个位移量码中包括一个位移量disp,转移的有效地址为:,转移的有效地址为: EA=(IP)+disp。当位移量是当位移量是8位时,称为短程转移;当位移量是位时,称为短程转移;当位移量是16位位时,称为近程转移。时,称为近程转移。 JMP NEAR PTR 符号地址符号地址 JMP SHORT 符号地址符号地址3.2.2 程序转移地址寻址方式程序转移地址寻址方式2段内间接寻址段内间接寻址(Intrasegment Indirect Addressing)程序转移的有效地址是一个寄存器或存储单元的程序转移的有效地址是一个寄存器或存储单元的内容内容。所得到的转向的有效地址用来取代所得到的转向的有效地址用来取代IP寄存器的寄存器的内容。内容。 JMP 寄存器寄存器 JMP 存储单元存储单元 由于以上两种寻址方式仅修改由于以上两种寻址方式仅修改IP的内容,的内容,所以这所以这种寻址方式只能在段内进行程序转移。种寻址方式只能在段内进行程序转移。3.2.2 程序转移地址寻址方式程序转移地址寻址方式JMP BX 如果如果(BX)=1020H, 则指令执行后则指令执行后 (IP)=1020H JMP TABLEBXSI 如果如果(DS)=2000H,(BX)=1020H, (SI)=0002H,TABLE=0010H, (21032H)=1234H, 则指令执行后则指令执行后(IP)=(DS)10H+(BX)+(SI)+TABLE) =(2000H10H+1020H+0002H+0010H) =(21032H)=1234H3.2.2 程序转移地址寻址方式程序转移地址寻址方式3段间直接寻址段间直接寻址(Intersegment Direct Addressing)指令中指令中直接给出直接给出程序转移的代码段地址和偏移程序转移的代码段地址和偏移地址来取代当前的地址来取代当前的CS和和IP。 指令的汇编语言格式为指令的汇编语言格式为JMP FAR PTR 符号地址;符号地址;FAR PTR表示段间转移的操作符表示段间转移的操作符3.2.2 程序转移地址寻址方式程序转移地址寻址方式4段间间接寻址段间间接寻址(Intersegment Indirect Addressing)程序转移的有效地址是一个存储单元中连续程序转移的有效地址是一个存储单元中连续4个个字节的内容。这个存储单元的内容可以用数据寻址方字节的内容。这个存储单元的内容可以用数据寻址方式中除立即数和寄存器方式以外的任何一种寻址方式式中除立即数和寄存器方式以外的任何一种寻址方式获得,将所寻址的存储单元前获得,将所寻址的存储单元前2个字节内容送个字节内容送IP,后,后2个字节内容送个字节内容送CS。 指令的汇编语言格式为指令的汇编语言格式为JMP DWORD PTR 存储单元存储单元3.2.2 程序转移地址寻址方式程序转移地址寻址方式JMP DWORD PTR BX 如果如果(BX)=1034H,且从,且从1034H开始的连续开始的连续4个存储单元内容分别为个存储单元内容分别为12H、34H、56H、78H,则指令执行后则指令执行后(IP)=1234H,(CS)=5678H。3.2.2 程序转移地址寻址方式程序转移地址寻址方式3.3 8086指令系统指令系统 指令系统是指微处理器所能执行全部指令的指令系统是指微处理器所能执行全部指令的集集合合。不同微处理器具有不同的指令系统,这在微处。不同微处理器具有不同的指令系统,这在微处理器设计时就已决定了。理器设计时就已决定了。80X86系列的系列的CPU中,其中,其指令系统的机器代码是完全向上兼容的。指令系统的机器代码是完全向上兼容的。80X86指指令系统按功能可分为以下令系统按功能可分为以下9类:类: (1) 数据传送类指令;数据传送类指令;(2) 算术运算类指令;算术运算类指令;(3) 逻辑运算和移位类指令;逻辑运算和移位类指令;(4) 位操作指令;位操作指令;(5) 串操作指令;串操作指令;(6) 控制转移类指令;控制转移类指令;(7) 处理器控制指令;处理器控制指令;(8) 高级语言类指令;高级语言类指令;(9) 操作系统型指令。操作系统型指令。3.3 8086指令系统指令系统常用到的一些符号所表示的含义。常用到的一些符号所表示的含义。src 源操作数源操作数dst 目的操作数目的操作数data 立即数立即数disp 8位或位或16位位移量位位移量 存储单元的内容存储单元的内容mem 存储器操作数存储器操作数opr 表示操作数表示操作数reg 寄存器寄存器count 移位次数,可以是移位次数,可以是1或或CL3.3 8086指令系统指令系统3.3.1 数据传送类指令数据传送类指令 数据传送类指令数据传送类指令用于实现用于实现立即数立即数到到寄存器寄存器或或存储存储器器、CPU内部内部寄存器之间寄存器之间、寄存器与、寄存器与存储器之间存储器之间、累、累加器与加器与I/O口之间的数据传送。除标志位传送指令之口之间的数据传送。除标志位传送指令之外,数据传送类指令不会影响标志寄存器中的标志位。外,数据传送类指令不会影响标志寄存器中的标志位。这类指令又分为通用数据传送、地址传送、标志传送这类指令又分为通用数据传送、地址传送、标志传送和输入输出等和输入输出等4组指令。组指令。1通用数据传送指令通用数据传送指令通用数据传送指令包括最基本的通用数据传送指令包括最基本的传送指令、堆栈传送指令、堆栈指令、数据交换指令、换码指令。指令、数据交换指令、换码指令。(1) 数据传送指令数据传送指令基本的传送指令包括基本的传送指令包括MOV、MOVSX、MOVZX。其中其中MOVSX、MOVZX仅在仅在386及其后继机型中可及其后继机型中可用。用。3.3.1 数据传送类指令数据传送类指令 传送指令传送指令(move) MOV 指令格式:指令格式:MOV DST,SRC指令功能:将源操作数指令功能:将源操作数SRC的内容传送到目的操的内容传送到目的操作数作数DST所指单元,完成字节、字或双字传送。源操所指单元,完成字节、字或双字传送。源操作数可以是通用寄存器作数可以是通用寄存器(REGn)、段寄存器、段寄存器(SEG)、立即数立即数(DATAn)和存储单元和存储单元(MEMn)。目的操作数。目的操作数可以是可以是REGn、SEG和和MEMn。存储单元可通过数据。存储单元可通过数据寻址的各种寻址方式寻址。寻址的各种寻址方式寻址。3.3.1 数据传送类指令数据传送类指令在使用在使用MOV指令时应注意以下几点:指令时应注意以下几点:(1) 目的操作数不得为立即数。目的操作数不得为立即数。如:如:MOV 12H,BL为非法指令。为非法指令。(2) 不影响标志位。不影响标志位。(3) 操作数类型必须一致。如:操作数类型必须一致。如:MOV AX,BL为为非法指令,应为非法指令,应为MOV AL,BL。(4) 源操作数为非立即数时,两操作数之一必为源操作数为非立即数时,两操作数之一必为寄存器。如:寄存器。如:MOV DX,SI为非法指令,为非法指令,不能在不能在两个存储单元之间进行数据传送。两个存储单元之间进行数据传送。3.3.1 数据传送类指令数据传送类指令 (5) 目的操作数为段寄存器目的操作数为段寄存器(CS和和IP或或EIP不能不能作为目的寄存器作为目的寄存器),源操作数不得为立即数。,源操作数不得为立即数。(6) 不能在段寄存器之间进行直接数据传送。如:不能在段寄存器之间进行直接数据传送。如:MOV DS,ES为非法指令。为非法指令。3.3.1 数据传送类指令数据传送类指令几个不能传送操作的解决办法是通过几个不能传送操作的解决办法是通过AX作桥梁。作桥梁。存储器存储器存储器:存储器: MOV AX,MEM1 MOV MEM2,AX段寄存器段寄存器段寄存器:段寄存器: MOV AX,SEG1 MOV SEG2,AX段寄存器段寄存器立即数:立即数: MOV AX,DATA MOV SEG,AX3.3.1 数据传送类指令数据传送类指令(2) 堆栈操作指令堆栈操作指令堆栈指令包括压栈堆栈指令包括压栈PUSH和出栈和出栈POP指令。堆栈指令。堆栈是按是按“后进先出后进先出(LIFO)”方式工作的存储区域。规定由方式工作的存储区域。规定由SS指示堆栈段的段基址,堆栈指针指示堆栈段的段基址,堆栈指针(E)SP始终指向堆始终指向堆栈的顶部,栈的顶部,(E)SP的初值规定了所用堆栈区的大小。的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。进栈方向是由高地址向低地堆栈的最高地址叫栈底。进栈方向是由高地址向低地址发展。址发展。3.3.1 数据传送类指令数据传送类指令压入堆栈指令压入堆栈指令指令格式:指令格式:PUSH src指令功能:指令功能:SPSP-2, (SP)+1,(SP) ) (src)。 指令中的操作数可以是通用寄存器、段寄存器、存指令中的操作数可以是通用寄存器、段寄存器、存储器,但不能是立即数。例如:储器,但不能是立即数。例如: PUSH AX ; SPSP2,(SP)+1(AH), (SP)(AL)3.3.1 数据传送类指令数据传送类指令弹出堆栈指令弹出堆栈指令指令格式:指令格式:POP dst指令功能:指令功能:dst (SP)+1,(SP),SP(SP)+2。 操作数可以是通用寄存器、存储器、段寄存器(但操作数可以是通用寄存器、存储器、段寄存器(但不能是不能是CS),同样,不能是立即数。),同样,不能是立即数。 POP BX ;BH(SP)+1),BL (SP), SP(SP)+2 注意,堆栈指令中操作数一定是注意,堆栈指令中操作数一定是16位操作数。位操作数。3.3.1 数据传送类指令数据传送类指令【例】 PUSH AX如果(AX)=1234H,(SP)=0100H,则指令执行后,(SP)=00FEH。3.3.1 数据传送类指令数据传送类指令【例】 POP AX3.3.1 数据传送类指令数据传送类指令【例】【例】 如果将如果将AX,BX两个寄存器的内容互换,两个寄存器的内容互换,则可执行下列程序段实现。则可执行下列程序段实现。PUSH AXPUSHBXPOP AXPOPBX3.3.1 数据传送类指令数据传送类指令(3) 数据交换指令数据交换指令指令格式:指令格式:XCHG DST, SRC 指令功能:将两个操作数的内容相互交换。两操作指令功能:将两个操作数的内容相互交换。两操作数之一必为寄存器,操作数不能为立即数。两个操作数之一必为寄存器,操作数不能为立即数。两个操作数可以同时为寄存器,但不允许同时都为段寄存器。数可以同时为寄存器,但不允许同时都为段寄存器。该指令执行后不影响标志位。例如:该指令执行后不影响标志位。例如:XCHG AH, BLXCHG ES, AXXCHG EAX, ARRAY4*EBX3.3.1 数据传送类指令数据传送类指令(4) 换码指令换码指令指令格式:指令格式:XLAT 指令功能:用查表方式将一种代码转换成另一种指令功能:用查表方式将一种代码转换成另一种代码。如将字符的扫描码转换为代码。如将字符的扫描码转换为ASCII码。该类指令码。该类指令是隐含寻址。规定是隐含寻址。规定BX指向存放在内存表格的首地址,指向存放在内存表格的首地址,AL为表格中某一元素与表格首地址之间的偏移量,表为表格中某一元素与表格首地址之间的偏移量,表格中的内容即为要替换的代码,指令执行后在格中的内容即为要替换的代码,指令执行后在AL中得中得到转换后的代码。到转换后的代码。3.3.1 数据传送类指令数据传送类指令 例例3-1 有一个表存放数字有一个表存放数字09的的ASCII码,其码,其表首地址是表首地址是0100H,找出,找出7的的ASCII码。码。 MOV BX,0100H ;0100BX MOV AL,7 ;7AL XLAT ;BX+AL AL3.3.1 数据传送类指令数据传送类指令2地址传送指令地址传送指令1) 有效地址传送指令有效地址传送指令LEA(load effective address) 指令格式:指令格式:LEA REG,SRC;(REG)SRC 指令功能:将源操作数的有效地址指令功能:将源操作数的有效地址EA传送到指传送到指定寄存器中。源操作数的寻址方式只能是存储器寻定寄存器中。源操作数的寻址方式只能是存储器寻址方式址方式(即不允许是立即数和寄存器寻址方式即不允许是立即数和寄存器寻址方式),目,目的操作数的寄存器可使用的操作数的寄存器可使用16位或位或32位寄存器,但不位寄存器,但不能为段寄存器。能为段寄存器。3.3.1 数据传送类指令数据传送类指令【例】【例】 比较以下两条指令的执行结果。比较以下两条指令的执行结果。LEA BX,DIMOV BX,DI3.3.1 数据传送类指令数据传送类指令2) 指针传送指令指针传送指令LDS(load DS with pointer) 指令格式:指令格式:LDS REG,MEM ; (REG)(MEM),(DS)(MEM+2) 指令功能:指令功能:将源操作数将源操作数MEM所指定存储单元中所指定存储单元中连续连续4个单元的前两个单元的内容作为有效地址存入个单元的前两个单元的内容作为有效地址存入指令指定的指令指定的16位寄存器位寄存器(REG)中,后两个单元的内中,后两个单元的内容装入指令指定的段寄存器容装入指令指定的段寄存器(DS)中中.3.3.1 数据传送类指令数据传送类指令【例【例】 LDS BX, TABLESI如果指令执行前,如果指令执行前,TABLE=0200H,(SI)=0008H,(DS)=0000H,则则EA =TABLE+(SI) = 0200H+0008H =0208H。指令执行后,指令执行后,(DS)=1000H,(BX)=1234H3.3.1 数据传送类指令数据传送类指令 3)地址指针装入)地址指针装入ES指令指令 指令格式:指令格式:LES reg,mere 指令功能:与指令功能:与LDS指令功能类似,只是把指令功能类似,只是把DS换成换成ES。操作时将段地址传送到。操作时将段地址传送到ES段寄存器。段寄存器。需要注意的是,需要注意的是,LDS、LES两条指令都是传送一两条指令都是传送一个目的地址指针,包括一个偏移地址和一个段地个目的地址指针,包括一个偏移地址和一个段地址,共址,共32位数据。位数据。3.3.1 数据传送类指令数据传送类指令3标志传送指令标志传送指令1) 标志送标志送AH (load AH with flags)LAHF指令格式:指令格式:LAHF;(AH)(FLAGS的低字节的低字节) 指令功能:将标志寄存器指令功能:将标志寄存器FLAGS的低的低8位中位中5个状个状态标志位态标志位(不包括不包括OF)分别传送到分别传送到AH的对应位,如图的对应位,如图所示。该指令的执行不影响标志位。所示。该指令的执行不影响标志位。2) AH送标志寄存器送标志寄存器(store AH into flags)SAHF指令格式:指令格式:SAHF ;(FLAGS的低字节的低字节)(AH) 指令功能:指令功能:SAHF指令与指令与LAHF指令指令 功能相反,即功能相反,即将将AH中相应位中相应位(D7、D6、D4、D2、D0)的状态分别的状态分别传送到标志寄存器传送到标志寄存器FLAGS的对应位的对应位(SF、ZF、AF、PF、CF),而,而FLAGS其他位不受影响。其他位不受影响。3.3.1 数据传送类指令数据传送类指令3)标志进出栈指令标志进出栈指令 PUSHF (push the flags); POPF(pop the flags)指令功能:将指令功能:将FLAGS标志寄存器中内容压入标志寄存器中内容压入堆栈堆栈/从堆栈中弹出字从堆栈中弹出字FLAGS标志寄存器中。标志寄存器中。3.3.1 数据传送类指令数据传送类指令3.3.2 算术运算类指令算术运算类指令 80X86提供了加、减、乘、除等各类算术运算提供了加、减、乘、除等各类算术运算指令,这些指令可处理指令,这些指令可处理4种类型的数据:种类型的数据:有符号的有符号的二进制数二进制数、无符号的二进制数无符号的二进制数、无符号的压缩十进无符号的压缩十进制数制数(压缩(压缩BCD码)和码)和无符号非压缩十进制数无符号非压缩十进制数(非(非压缩压缩BCD码)码) 。 压缩型压缩型BCD码一个字节表示两位码一个字节表示两位BCD码。码。 非非压缩型压缩型BCD码一个字节表示一位码一个字节表示一位BCD码,有效位在码,有效位在低低4位,高位,高4位为零位为零 1加减法指令加减法指令不带进不带进(借借)位的加减法指令位的加减法指令ADD、SUB; 带进带进(借借)位的加减法指令位的加减法指令ADC、SUB; 增减量指令增减量指令INC、DEC; 特殊减法指令即求补指令特殊减法指令即求补指令NEG、 比较指令比较指令CMP。3.3.2 算术运算类指令算术运算类指令1) ADD/SUB加加/减法指令减法指令 (addition/subtraction)指令格式:指令格式:ADD DST,SRC; SUB DST,SRC指令功能:指令功能:ADD指令将目的操作数与源操作数指令将目的操作数与源操作数相加之和相加之和送到目的操作数所指单元中送到目的操作数所指单元中。SUB指令将目的操作数与源指令将目的操作数与源操作数操作数相减之差送到目的操作数所指单元中相减之差送到目的操作数所指单元中。指令会影响。指令会影响SF、ZF、CF、AF、PF和和OF等等6个标志位。个标志位。3.3.2 算术运算类指令算术运算类指令 指令中源操作数可以是通用寄存器指令中源操作数可以是通用寄存器REGn、立即、立即数数DATAn和存储单元和存储单元MEMn。目的操作数可以是。目的操作数可以是REGn和和MEMn。源操作数和目的操作数都不能是段。源操作数和目的操作数都不能是段寄存器,目的操作数不得为立即数。存储单元可通寄存器,目的操作数不得为立即数。存储单元可通过数据寻址的各种寻址方式寻址。使用加、减法指过数据寻址的各种寻址方式寻址。使用加、减法指令时,应注意源操作数为非立即数时,两操作数之令时,应注意源操作数为非立即数时,两操作数之一必为寄存器,一必为寄存器,两存储单元之间不能进行加、减法两存储单元之间不能进行加、减法运算运算。两操作数类型必须一致,可以同时为字节、。两操作数类型必须一致,可以同时为字节、字或双字。字或双字。 3.3.2 算术运算类指令算术运算类指令例如:例如: ADD AX, DI; (AX)(AX)+(DI) SUB BL, 5FH; (BL)(BL)-(5FH)下边下边3条指令是非法的条指令是非法的ADD DS, BX;操作数不允许为段寄存器操作数不允许为段寄存器SUB DI, BP ;不允许两操作数都为存储单元不允许两操作数都为存储单元ADD 34H, EAX ;目的操作数不能为立即数目的操作数不能为立即数3.3.2 算术运算类指令算术运算类指令2) ADC/SBB带进带进/借位加借位加/减法指令减法指令(addition with carry/subtraction with carry)指令格式:指令格式: ADC DST,SRC ; SBB DST,SRC指令功能:将进指令功能:将进/借位标志位的值借位标志位的值(CF)一起与操一起与操作数相加作数相加/减。该组指令主要针对出现在减。该组指令主要针对出现在8086中超过中超过16位的数据进行多字节加位的数据进行多字节加/减法的运算中,其中减法的运算中,其中CF的的当前值是由程序中本指令之前的指令产生的。其他规当前值是由程序中本指令之前的指令产生的。其他规定均与定均与ADD/SUB指令相同。指令相同。3.3.2 算术运算类指令算术运算类指令3) INC/DEC增减量指令增减量指令 (increment/decrement)指令格式:指令格式:INCDST;DEC DST指令功能:指令功能:INC/ DEC将目的操作数的内容加将目的操作数的内容加/减减1。用于循环程序中指针修改。该组指令影响。用于循环程序中指针修改。该组指令影响OF、SF、ZF、AF、DF标志位,但不影响标志位,但不影响CF位。目的操作位。目的操作数可以是数可以是REGn和和MEMn。目的操作数不能是段寄存。目的操作数不能是段寄存器,不得为立即数。器,不得为立即数。3.3.2 算术运算类指令算术运算类指令4) 求补指令求补指令(negate)NEG 指令格式:指令格式:NEGDST指令功能:对一个操作数取补码,即相当于用指令功能:对一个操作数取补码,即相当于用0减去目的操作数,并将结果送回到目的操作数。可利减去目的操作数,并将结果送回到目的操作数。可利用用NEG指令得到补码表示的负数的绝对值。指令得到补码表示的负数的绝对值。3.3.2 算术运算类指令算术运算类指令5) 比较指令比较指令(compare) CMP 指令格式:指令格式:CMPDST ,SRC指令功能:将两个操作数相减,但指令功能:将两个操作数相减,但不将结果送回不将结果送回到目的操作数,两个操作数的内容均不变,仅根据结到目的操作数,两个操作数的内容均不变,仅根据结果影响标志位,果影响标志位,CMP指令对标志位的影响与指令对标志位的影响与SUB相相同。目标操作数可以是寄存器或存储器,源操作数可同。目标操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,既可以进行字节比较,以是立即数、寄存器或存储器,既可以进行字节比较,也可以进行字比较。也可以进行字比较。 一般情况下,该指令后面都会有一条一般情况下,该指令后面都会有一条条件转移条件转移指指令,用来检查标志位的状态是否满足某种关系。令,用来检查标志位的状态是否满足某种关系。3.3.2 算术运算类指令算术运算类指令 比较指令后面常常会跟一个跳转指令,以检测标志位,比较指令后面常常会跟一个跳转指令,以检测标志位,控制程序的走向。控制程序的走向。CMP指令执行后可根据标志位判断比较指令执行后可根据标志位判断比较结果。结果。(1) 根据根据ZF判断两个数是否相等判断两个数是否相等。若。若ZF=1,则两数,则两数相等。相等。(2) 若若两个数不相等两个数不相等,则分两种情况考虑:,则分两种情况考虑: 比较的是两个比较的是两个无符号数无符号数:若若CF=0,则,则(DST)(SRC);若若CF=1,则,则(DST)(SRC)。 比较的是两个比较的是两个有符号数有符号数:若若OFSF=0,则,则(DST)(SRC); 若若OFSF=1,则,则(DST)(SRC)。3.3.2 算术运算类指令算术运算类指令2乘法指令乘法指令乘法指令有单操作数的无符号数乘法指令乘法指令有单操作数的无符号数乘法指令MUL和有符号数乘法指令和有符号数乘法指令IMUL指令。指令。386及其后继机型及其后继机型中还增加了双操作数和三操作数有符号数乘法指令中还增加了双操作数和三操作数有符号数乘法指令IMUL指令。指令。3.3.2 算术运算类指令算术运算类指令1) 无符号数乘法指令无符号数乘法指令(multiple) MUL 指令格式:指令格式:MUL SRC指令功能:将目的操作数乘以源操作数,结果存指令功能:将目的操作数乘以源操作数,结果存放到目的操作数中。目的操作数是隐含寻址,必须为放到目的操作数中。目的操作数是隐含寻址,必须为累加器。源操作数用于存放乘数,可以是寄存器或存累加器。源操作数用于存放乘数,可以是寄存器或存储器中的数据,但不允许为立即数。储器中的数据,但不允许为立即数。 乘法指令执行完后的结果总是一个两倍于原数据乘法指令执行完后的结果总是一个两倍于原数据大小的数据。当两个大小的数据。当两个8位数相乘时,位数相乘时,16位乘积存放在位乘积存放在AX中;当两个中;当两个16位数相乘时,位数相乘时,32位乘积存放在位乘积存放在DX:AX中,其中高位字存放在中,其中高位字存放在DX中,低位字存放在中,低位字存放在AX中。中。3.3.2 算术运算类指令算术运算类指令 当乘法指令执行完后,一些标志位当乘法指令执行完后,一些标志位(CF 和和OF)会会改变,产生预期的结果。其他的标志位也会改变,不改变,产生预期的结果。其他的标志位也会改变,不过它们的结果是无法预知的,因而不能被利用。过它们的结果是无法预知的,因而不能被利用。CF、OF表示乘积值的范围。对于无符号数,若表示乘积值的范围。对于无符号数,若CF=OF=0,则表示,则表示AH(字节乘字节乘)/DX(字乘字乘)乘积值乘积值高位为零。高位为零。3.3.2 算术运算类指令算术运算类指令 2) 有符号数乘法指令有符号数乘法指令(signed multiple) IMUL 指令格式:指令格式:IMUL SRC指令功能:与指令功能:与MUL相同,只是必须是有符号数。相同,只是必须是有符号数。对于有符号数,对于有符号数,IMUL执行后,执行后,CF=OF=0,AH(字字节乘节乘)/DX(字乘字乘)乘积值高位为符号扩展。若乘积值高位为符号扩展。若CF=OF=1,则积的高位存在其有效值。,则积的高位存在其有效值。3.3.2 算术运算类指令算术运算类指令3除法指令除法指令除法指令有无符号数除法指令除法指令有无符号数除法指令DIV和有符号数除和有符号数除法指令法指令IDIV。和乘法一样,除法指令的操作数类型可。和乘法一样,除法指令的操作数类型可以是字节或字者。被除数的字长常常是两倍于除数字以是字节或字者。被除数的字长常常是两倍于除数字长的数据。可以用符号扩展的方法获得除法指令所需长的数据。可以用符号扩展的方法获得除法指令所需要的被除数格式。对于除法来讲,要的被除数格式。对于除法来讲,全部标志无意义全部标志无意义。溢出处理不是使溢出处理不是使OF为为1,而是当除数为,而是当除数为0时产生时产生0号中号中断。断。3.3.2 算术运算类指令算术运算类指令1) 无符号数除法指令无符号数除法指令(divide) DIV 指令格式:指令格式:DIV SRC指令功能:完成两个不带符号的指令功能:完成两个不带符号的8位位/16位二进位二进制数的除法运算。将制数的除法运算。将AX(16位)中或位)中或DX和和AX(32位)中的内容,除以在指定的寄存器或存储单元中的位)中的内容,除以在指定的寄存器或存储单元中的内容,对于字节除法,所得的商存于内容,对于字节除法,所得的商存于AL,余数存于,余数存于AH;对于字除法,所得的商存于;对于字除法,所得的商存于AX,余数存于,余数存于DX。3.3.2 算术运算类指令算术运算类指令2) 有符号数除法指令有符号数除法指令(signed divide) IDIV 指令格式:指令格式:IDIV SRC指令功能:有符号除法指令与无符号除法指令指令功能:有符号除法指令与无符号除法指令相同,只是操作数必须为有符号数,商和余数也必相同,只是操作数必须为有符号数,商和余数也必须是有符号数,且余数符号与被除数符号相同。须是有符号数,且余数符号与被除数符号相同。有符号除法指令运算时先将数变为原码,并去有符号除法指令运算时先将数变为原码,并去掉符号位,然后再两数掉符号位,然后再两数(绝对值绝对值)相除,其结果的符相除,其结果的符号按两数符号位异或运算规则确定。如果符号位为号按两数符号位异或运算规则确定。如果符号位为1(负数负数),则再取补码。此过程由计算机执行指令时,则再取补码。此过程由计算机执行指令时自动完成。自动完成。3.3.2 算术运算类指令算术运算类指令4BCD码码(十进制十进制)调整指令调整指令如何方便地将二进制数转换为人们日常生活中如何方便地将二进制数转换为人们日常生活中习惯使用的十进制数呢?习惯使用的十进制数呢?80X86指令系统专门提供指令系统专门提供了一组相应的十进制调整指令:了一组相应的十进制调整指令:DAA、DAS、AAA、AAS、AAM和和AAD。该类指令都是隐含寻址,。该类指令都是隐含寻址,BCD码总是作为无符号数看待的。学习该类指令时应重码总是作为无符号数看待的。学习该类指令时应重点理解并掌握它们的用途,即指令执行后的结果。点理解并掌握它们的用途,即指令执行后的结果。指令操作过程是计算机自动完成的,只需了解即可。指令操作过程是计算机自动完成的,只需了解即可。3.3.2 算术运算类指令算术运算类指令1) 压缩压缩BCD码调整指令码调整指令 加法的十进制调整指令加法的十进制调整指令(decimal adjust for addition)DAA 指令格式:指令格式:DAA指令功能:该指令之前必须先执行指令功能:该指令之前必须先执行ADD或或ADC指令,加法指令将两个压缩的指令,加法指令将两个压缩的BCD码相加,并将结码相加,并将结果存放在果存放在AL寄存器中,而后寄存器中,而后DAA将将AL中的和调整到中的和调整到压缩的压缩的BCD格式。格式。3.3.2 算术运算类指令算术运算类指令 执行指令时执行指令时CPU对对AL中高中高4位、低位、低4位进行检测,位进行检测,判断是否为有效的判断是否为有效的BCD码。如果码。如果AL中低中低4位大于位大于9或或AF=1,则将,则将AL寄存器的内容加寄存器的内容加06H,并将,并将AF置置1;如果;如果AL中高中高4位大于位大于9或或CF=1,则将,则将AL寄寄存器的内容加存器的内容加60H,并将,并将CF置置1;如果;如果AL中高低中高低4位均大于位均大于9,则将,则将AL寄存器的内容加寄存器的内容加66H。 3.3.2 算术运算类指令算术运算类指令 0100 1000 48H MOV AL,48H + 0111 0100 74H MOV BL,74H 1011 1100 BCH ADD AL,BL + 0110 0110 66H DAA 1 0010 0010 1 22H 最后结果为:最后结果为: (AL)=22H, CF=1, AF=1 减法的十进制调整指令减法的十进制调整指令(decimal adjust for subtraction)DAS 指令格式:指令格式:DAS指令功能:该指令之前必须先执行指令功能:该指令之前必须先执行SUB或或SBB指指令,减法指令将两个压缩的令,减法指令将两个压缩的BCD码相减,并将结果存码相减,并将结果存放在放在AL寄存器中,而后寄存器中,而后DAS将将AL中的差调整到压缩的中的差调整到压缩的BCD格式。格式。3.3.2 算术运算类指令算术运算类指令 执行指令时,执行指令时,CPU对对AL中高中高4位、低位、低4位进位进行检测,判断是否为有效的行检测,判断是否为有效的BCD码。如果码。如果AL中低中低4位大于位大于9或或AF=1,则将,则将AL寄存器的内容减去寄存器的内容减去06H,并将,并将AF置置1;如果;如果AL中高中高4位大于位大于9或或CF=1,则将,则将AL寄存器的内容减去寄存器的内容减去60H,并将,并将CF置置1;如果;如果AL中高低中高低4位均大于位均大于9,则将,则将AL寄存器寄存器的内容减去的内容减去66H3.3.2 算术运算类指令算术运算类指令2) 非压缩非压缩BCD码调整指令码调整指令 加法的加法的ASCII码调整指令码调整指令(ASCII adjust for addition)AAA 指令格式:指令格式:AAA指令功能:将两个指令功能:将两个ASCII码或非压缩码或非压缩BCD码相加之码相加之和存放在和存放在AL中,而后进行调整,形成一个扩展的非压中,而后进行调整,形成一个扩展的非压缩缩BCD码,调整后的结果低位在码,调整后的结果低位在AL中,高位在中,高位在AH中。中。执行指令时,执行指令时,CPU对对AL中的低中的低4位进行检测。如果位进行检测。如果AL中低中低4位大于位大于9或或AF=1,则将,则将AL寄存器的内容加寄存器的内容加6,AH寄存器的内容加寄存器的内容加1,并将,并将AF置置1,同时将,同时将AL中的中的高高4位清零,位清零,CF置置1。3.3.2 算术运算类指令算术运算类指令 减法的减法的ASCII码调整指令码调整指令(ASCII adjust for subtraction)AAS 指令格式:指令格式:AAS指令功能:将两个指令功能:将两个ASCII码或非压缩码或非压缩BCD码相减码相减之差存放在之差存放在AL中,而后进行调整,形成一个扩展的非中,而后进行调整,形成一个扩展的非压缩压缩BCD码,调整后的结果低位在码,调整后的结果低位在AL中,高位在中,高位在AH中。中。执行指令时,执行指令时,CPU对对AL中的低中的低4位进行检测。如位进行检测。如果果AL中低中低4位大于位大于9或或AF=1,则将,则将AL寄存器的内容寄存器的内容减去减去06H,AL寄存器的内容减去寄存器的内容减去01H,并将,并将AF置置1,同时将同时将AL中的高中的高4位清零,位清零,CF置置1。3.3.2 算术运算类指令算术运算类指令 BCD码乘法调整指令码乘法调整指令(ASCII adjust for multiplication)AAM 指令格式:指令格式:AAM指令功能:将存放在指令功能:将存放在AL寄存器中两个一位非压缩寄存器中两个一位非压缩BCD码相乘之积调整为非压缩码相乘之积调整为非压缩BCD码。码。3.3.2 算术运算类指令算术运算类指令 BCD码除法调整指令码除法调整指令 (ASCII adjust for division)AAD 指令格式:指令格式:AAD指令功能:将指令功能:将AX中存放的两位非压缩中存放的两位非压缩BCD码调码调整为二进制数。整为二进制数。3.3.2 算术运算类指令算术运算类指令 5符号扩展指令符号扩展指令80X86指令系统提供了一组符号扩展指令:指令系统提供了一组符号扩展指令:CBW、CWD、CWDE和和CDQ。该类指令都是隐含。该类指令都是隐含寻址,常用于除法运算,指令执行后不影响标志位。寻址,常用于除法运算,指令执行后不影响标志位。其中其中CWDE和和CDQ用于用于80386及其后继机型中。及其后继机型中。3.3.2 算术运算类指令算术运算类指令 1) 字节转换为字指令字节转换为字指令 (convert byte to word)CBW 指令格式:指令格式:CBW指令功能:将指令功能:将AL中的中的8位数符号扩展为位数符号扩展为16位数,形成位数,形成AX中的字。中的字。3.3.2 算术运算类指令算术运算类指令2) 字转换为双字指令字转换为双字指令 (convert word to double word)CWD 指令格式:指令格式:CWD指令功能:将指令功能:将AX中的中的16位数符号扩展为位数符号扩展为32位数,形成位数,形成DX:AX中的双字。中的双字。3.3.2 算术运算类指令算术运算类指令3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令1逻辑运算指令逻辑运算指令逻辑运算指令包括逻辑运算指令包括AND(与与)、OR(或或)、NOT(非非)、XOR(异或异或)和和TEST(测试测试)等指令。可以对等指令。可以对8位、位、16位位操作数进行逻辑运算,除操作数进行逻辑运算,除NOT不影响标志位外,其余不影响标志位外,其余指令将使指令将使CF=OF=0,影响,影响SF、ZF、PF。 1) 逻辑与指令逻辑与指令AND 指令格式:指令格式: AND DST SRC ;(DST)(DST) (SRC)指令功能:将目的操作数与源操作数按位相指令功能:将目的操作数与源操作数按位相与,结果送目的操作数;该指令可用来使操作数与,结果送目的操作数;该指令可用来使操作数的某些位被屏蔽。的某些位被屏蔽。3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 2) 逻辑或指令逻辑或指令(or)OR 指令格式:指令格式:OR DST,SRC ; (DST)(DST) (SRC)指令功能:将目的操作数与源操作数按位指令功能:将目的操作数与源操作数按位相或,结果送目的操作数;该指令可用来使操相或,结果送目的操作数;该指令可用来使操作数某些位置作数某些位置1。3) 逻辑非指令逻辑非指令(not)NOT 指令格式:指令格式:NOT DST 指令功能:将目的操作数按位取反;该指指令功能:将目的操作数按位取反;该指令常用来将某个数据取成反码。令常用来将某个数据取成反码。3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 4) 异或指令异或指令(exclusive or)XOR 指令格式:指令格式:XOR DST,SRC 指令功能:将目的操作数与源操作数按位指令功能:将目的操作数与源操作数按位相异或,结果送目的操作数;该指令可用来使相异或,结果送目的操作数;该指令可用来使操作数某些位变反。操作数某些位变反。 5) 测试指令测试指令(test)TEST 指令格式:指令格式:TEST DST,SRC 指令功能:将目的操作数与源操作数按位指令功能:将目的操作数与源操作数按位相与,只影响标志位,但结果不保存;该指令相与,只影响标志位,但结果不保存;该指令可用来屏蔽某些位,或使某些位置可用来屏蔽某些位,或使某些位置1或测试某或测试某些位等。些位等。3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 XOR AX,AX ;清零;清零AX,CFAND AL,0FH;屏蔽高;屏蔽高4位,保留低位,保留低4位,位,TEST AL,01H;测;测AL最低位最低位OR AL,0FH;保留高;保留高4位,使低位,使低4位置位置1,3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令2移位指令逻辑左移指令逻辑左移指令 SHL逻辑右移指令逻辑右移指令 SHR算术左移指令算术左移指令 SAL算术左移指令算术左移指令 SAR不带进位循环左移指令不带进位循环左移指令 ROL不带进位循环右移指令不带进位循环右移指令 ROR带进位循环左移指令带进位循环左移指令 RCL带进位循环右移指令带进位循环右移指令 RCRS: ShiftR: RotateL: LeftR: RightA: ArithmeticC: Carry flag3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 1) 算术移位和逻辑移位算术移位和逻辑移位算术移动算术移动N位,相当于把二进制数乘以或位,相当于把二进制数乘以或除以除以2N,把操作数看做有符号数;逻辑移位,把操作数看做有符号数;逻辑移位操作则用于截取字节或字中的若干位,把操作操作则用于截取字节或字中的若干位,把操作数看做无符号数。所有的移位指令在移位时,数看做无符号数。所有的移位指令在移位时,都会影响标志位都会影响标志位CF、OF、PF、SF和和ZF。3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 算术算术/逻辑左移指令逻辑左移指令 (shift arithmetic/logical left)SAL/ SHL 指令格式:指令格式: SAL/ SHL DST ,CNT指令功能:按照指令功能:按照CNT规定的移位次数,对目的规定的移位次数,对目的操作数操作数DST进行左移,每移一次,最高位进行左移,每移一次,最高位MSB移入移入CF ,而最低位,而最低位LSB补补0。移位位数。移位位数CNT放在放在CL寄存寄存器中,如果只移器中,如果只移1位,也可以直接写在指令中。位,也可以直接写在指令中。CFDST03.3.3 逻辑运算和移位类指令逻辑运算和移位类指令CFDST0 逻辑右移指令逻辑右移指令(shift logical right)SHR指令格式:指令格式:SAR DST,CNT指令功能:按照指令功能:按照CNT规定的移位次数,对规定的移位次数,对目的操作数目的操作数DST进行右移,每移一次,最高位进行右移,每移一次,最高位MSB补补0,最低位,最低位LSB移入移入CF。3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 算术右移指令算术右移指令(shift arithmetic right)SAR 指令格式:指令格式:SAR DST,CNT指令功能:按照指令功能:按照CNT规定的移位次数,对目规定的移位次数,对目的操作数的操作数DST进行右移,每移一次,最高位进行右移,每移一次,最高位MSB(符号位符号位)保持不变,最低位保持不变,最低位LSB移入移入CF。CFDST3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 【例例】 设一个字节数据设一个字节数据X存放在存放在AL寄存器中,完寄存器中,完成成(AL)10的功能,即的功能,即10X。可用移位实现乘。可用移位实现乘10操作,因为操作,因为10=8+2=23+21 XORAH,AHSALAX,1;2XMOVBX,AXMOVCL,2SALAX,CL;8XADDAX,BX;8X+2X = 10X3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 3) 循环移位指令循环移位指令循环移位指令在移位时移出的目的操作数并循环移位指令在移位时移出的目的操作数并不丢失,而循环送回目的操作数的另一端。循环不丢失,而循环送回目的操作数的另一端。循环移位指令仅影响移位指令仅影响CF和和OF。3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 循环左移指令循环左移指令(rotate left)ROL 指令格式:指令格式:ROL DST,CNT指令功能:目的操作数每向左移位一次,其指令功能:目的操作数每向左移位一次,其最高位最高位MSB移入最低位移入最低位LSB,MSB同时也移入同时也移入CF。CFDST3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 循环右移指令循环右移指令(rotate right)ROR 指令格式:指令格式:ROR DST,CNT指令功能:目的操作数每向右移位一次,指令功能:目的操作数每向右移位一次,其最低位其最低位LSB移入最高位移入最高位MSB,LSB同时也移同时也移入入CF。CFDST3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 带进位循环左移指令带进位循环左移指令 (rotate left through carry)RCL指令格式:指令格式:RCL DST,CNT指令功能:目的操作数每向左移位一次,指令功能:目的操作数每向左移位一次,其最高位其最高位MSB移入移入CF,CF移入最低位移入最低位LSB。CFDST3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 带进位循环右移指令带进位循环右移指令 (rotate right through carry)RCR 指令格式:指令格式:RCR DST,CNT指令功能:目的操作数每向右移位一次,指令功能:目的操作数每向右移位一次,其最低位其最低位LSB移入移入CF,CF移入最高位移入最高位MSB。CFDST3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令【例例】将】将BX的高的高8位与低位与低8位互换。位互换。MOV BX,1234H;(BX)= 1234HMOV CL,8ROL BX,CL;(BX)= 3412H3.3.3 逻辑运算和移位类指令逻辑运算和移位类指令 串操作指令就是对一个字符串进行操作、串操作指令就是对一个字符串进行操作、处理。字符串可以是字串或字节串。字串操作处理。字符串可以是字串或字节串。字串操作允许对连续存放在存储器中大的数据块进行操允许对连续存放在存储器中大的数据块进行操作。作。80X86通过加重复前缀来实现串操作。所通过加重复前缀来实现串操作。所有串操作指令都用寄存器有串操作指令都用寄存器SI对源操作数进行间对源操作数进行间接寻址,并且默认是在接寻址,并且默认是在DS段中;用段中;用DI为目的为目的操作数进行间接寻址,并且默认是在操作数进行间接寻址,并且默认是在ES段中。段中。串操作指令是串操作指令是唯一唯一的一组源操作数和目的操作的一组源操作数和目的操作数都在存储器中的指令。数都在存储器中的指令。 3.3.4 串操作类指令串操作类指令 串操作时,地址的修改往往与方向标志串操作时,地址的修改往往与方向标志DF有关,当有关,当DF=1时,时,SI和和DI作自动减量修改;作自动减量修改;当当DF=0时,时,SI和和DI作自动增量修改。作自动增量修改。 一条带重复前缀的串操作指令的执行过程一条带重复前缀的串操作指令的执行过程往往相当于执行一个循环程序。在每次重复之往往相当于执行一个循环程序。在每次重复之后,都会修改地址指针后,都会修改地址指针SI和和DI,要用,要用CX寄存寄存器作为重复次数计数器,指令每执行一次,器作为重复次数计数器,指令每执行一次,CX的内容减的内容减1,直到其值减为,直到其值减为0。3.3.4 串操作类指令串操作类指令 1 1重复前缀指令重复前缀指令重复前缀指令控制其后的串指令重复执行。重复前缀指令控制其后的串指令重复执行。1) 重复前缀指令重复前缀指令(repeat)REP 功能:重复其后指令串的操作直至功能:重复其后指令串的操作直至(CX)=0;用于串传送、串装入、串存储指令;用于串传送、串装入、串存储指令前。前。(1) 判条件,若判条件,若(CX)=0,则退出,则退出REP,否则往下执行;否则往下执行;(2) (CX)(CX)1;(3) 执行其后串指令;执行其后串指令;(4) 重复重复(1)(3)。3.3.4 串操作类指令串操作类指令 2) 相等相等/为零则重复前缀指令为零则重复前缀指令 (repeat while equal/zero)REPE/REPZ 功能:相等功能:相等/为零则重复串操作;用于串比较、为零则重复串操作;用于串比较、串扫描指令前。串扫描指令前。操作:与操作:与REP类同,区别在于判断条件,当类同,区别在于判断条件,当(CX)0且且ZF=1时,重复执行。时,重复执行。3) 不相等不相等/不为零则重复前缀指令不为零则重复前缀指令 (repeat while not equal/not zero)REPNE/ REPNZ功能:不相等功能:不相等/不为零则重复串操作;用于串不为零则重复串操作;用于串比较、串扫描指令前。比较、串扫描指令前。操作:与操作:与REP类同,区别在于判断条件,当类同,区别在于判断条件,当(CX)0且且ZF=0时,重复执行。时,重复执行。3.3.4 串操作类指令串操作类指令2 2串操作指令串操作指令1) 串传送指令串传送指令(move string)MOVS指令格式:指令格式: MOVSDST,SRCMOVSB(字节字节); (ES):(DI)(DS):(SI), (SI)(SI)1,(DI)(DI)1MOVSW(字字); (ES):(DI)(DS):(SI), (SI)(SI)2,(DI)(DI)23.3.4 串操作类指令串操作类指令执行串指令之前,应先进行如下设置:执行串指令之前,应先进行如下设置:(1) 源串首地址源串首地址(末地址末地址) SI;(2) 目的串首地址目的串首地址(末地址末地址) DI;(3) 串长度串长度CX;(4) 建立方向标志建立方向标志(CLD使使DF=0,STD使使DF=1)。串操作指令前面可加重复前缀完成串传送功能。串操作指令前面可加重复前缀完成串传送功能。3.3.4 串操作类指令串操作类指令 【例】将【例】将DS:0100H地址开始的地址开始的50个字传送个字传送到到ES:2000H开始的内存单元中。开始的内存单元中。MOVSI,0100HMOVDI,2000HMOVCX,50CLDREP MOVSW3.3.4 串操作类指令串操作类指令 2) 串装入指令串装入指令(load from string)LODS指令格式:指令格式: LODSSRCLODSB(字节字节); (AL)(DS):(SI),(SI)(SI)1 LODSW(字字); (AX)(DS):(SI),(SI)(SI)23.3.4 串操作类指令串操作类指令3) 串存储指令串存储指令(store into string)STOS 指令格式:指令格式:STOS DSTSTOSB(字节字节); (ES):(DI)(AL), (DI)(DI)1 STOSW(字字) ; (ES):(DI)(AX), (DI)(DI)23.3.4 串操作类指令串操作类指令4) 串比较指令串比较指令(compare string)CMPS 指令格式:指令格式:CMPS DST,SRCCMPSB(字节字节); (ES):(DI)(DS):(SI), (SI)(SI)1,(DI)(DI)1CMPSW(字字); (ES):(DI)(DS):(SI), (SI)(SI)2,(DI)(DI)23.3.4 串操作类指令串操作类指令5) 串扫描指令串扫描指令(scan string)SCAS指令格式:指令格式:SCASDSTSCASB(字节字节); (AL)(ES):(DI),(DI)(DI)1 SCASW(字字); (AX)(ES):(DI),(DI)(DI)23.3.4 串操作类指令串操作类指令转移指令用于分支程序,它分为无条件转移转移指令用于分支程序,它分为无条件转移和条件转移。和条件转移。无条件转移无条件转移可转到内存中存放的可转到内存中存放的任何程序段。任何程序段。条件转移条件转移指令对于条件的判别主指令对于条件的判别主要是要是根据标志位来判别根据标志位来判别的,对于的,对于CF、OF、PF、SF、ZF都有相应的判别指令。都有相应的判别指令。3.3.5 控制转移类指令控制转移类指令 1. 无条件转移指令无条件转移指令 (1)JMP(jump) 指令指令指令格式:指令格式:JMP DST指令功能:无条件跳转到指令指定的目标指令功能:无条件跳转到指令指定的目标地址地址DST去执行指令。去执行指令。DST可以是标号、通用可以是标号、通用寄存器或存储器。前面已经详细介绍了四种程寄存器或存储器。前面已经详细介绍了四种程序转移寻址方式:段内直接寻址、段内间接寻序转移寻址方式:段内直接寻址、段内间接寻址、段间直接寻址及段间间接寻址。址、段间直接寻址及段间间接寻址。3.3.5 控制转移类指令控制转移类指令段内直接转移指令段内直接转移指令 JMP near label段内直接短转移指令段内直接短转移指令 JMP short label段内间接转移指令段内间接转移指令 JMP reg16 JMP mem16段间直接转移指令段间直接转移指令 JMP FAR PTR labelname段间间接转移指令段间间接转移指令 JMP mem323.3.5 控制转移类指令控制转移类指令 (2 2)子程序调用指令)子程序调用指令 主程序用主程序用CALL指令来调用子程序。指令来调用子程序。 CALL指令的功能是先将断点地址指令的功能是先将断点地址( (IP)与与(CS)压入堆栈,然后将子程序的首址装入压入堆栈,然后将子程序的首址装入IP与与CS中,从而将程序转移到子程序的入口,再中,从而将程序转移到子程序的入口,再顺序执行子程序。顺序执行子程序。 在子程序的最后应安排一条返回指令在子程序的最后应安排一条返回指令RET,CPU执行执行RET指令时,会从堆栈中弹出断点地指令时,会从堆栈中弹出断点地址,重新装入址,重新装入IP与与CS中,从而达到返回主程中,从而达到返回主程序的目的。序的目的。3.3.5 控制转移类指令控制转移类指令3.3.5 控制转移类指令控制转移类指令 调用指令调用指令(call)CALL 指令格式:指令格式:CALL DST执行操作:执行操作: (1) PUSH CS (2) PUSH IP (3) JMP DST目的操作数的寻址方式与目的操作数的寻址方式与JMP相似,只是相似,只是没有短程调用。没有短程调用。3.3.5 控制转移类指令控制转移类指令返回指令返回指令(return)RET指令格式:指令格式:RET执行操作:执行操作: (1) POP IP (2) POP CS 3.3.5 控制转移类指令控制转移类指令 2.条件转移指令条件转移指令(jump if cc)Jcc指令格式:指令格式:Jcc DST指令功能:如果测试条件指令功能:如果测试条件cc为真,则转移到为真,则转移到目标地址目标地址DST处执行程序,否则顺序执行。处执行程序,否则顺序执行。DST应给出转移到的指令的标号或转移的应给出转移到的指令的标号或转移的8位相对偏位相对偏移量。移量。3.3.5 控制转移类指令控制转移类指令 条件条件“cc”共分三类。共分三类。(1) 以状态标志位为条件:以状态标志位为条件:ZF、SF、OF、CF、PF;(2) 以两个以两个无符号数比较无符号数比较为条件:高于、高为条件:高于、高于等于、低于、低于等于;于等于、低于、低于等于;(3) 以两个以两个有符号数比较有符号数比较为条件:大于、大为条件:大于、大于等于、小于、小于等于。于等于、小于、小于等于。3.3.5 控制转移类指令控制转移类指令类类 型型 指令格式指令格式指令功能指令功能条件转移条件转移JZ/JE targetJZ/JE targetJNZ/JNE targetJNZ/JNE targetJP/JPE targetJP/JPE targetJNP/JPO targetJNP/JPO targetJO targetJO targetJNO targetJNO targetJC targetJC targetJNC targetJNC targetJS targetJS targetJNS targetJNS targetJB/JNAE targetJB/JNAE targetJNB/JAE targetJNB/JAE targetJA/JNBE targetJA/JNBE targetJNA/JBE targetJNA/JBE targetJL/JNGE targetJL/JNGE targetJNL/JGE targetJNL/JGE targetJG/JNLE targetJG/JNLE targetJNG/JLE targetJNG/JLE target结果为结果为0/相等转移相等转移不为不为0/不相等转移不相等转移结果为偶性转移结果为偶性转移结果为奇性转移结果为奇性转移溢出转移溢出转移无溢出转移无溢出转移有进(借)位转移有进(借)位转移无进(借)位转移无进(借)位转移符号位为符号位为1转转符号位为符号位为0转转低于低于/不高于等于转不高于等于转不低于不低于/高于等于转高于等于转高于高于/不低于等于转不低于等于转不高于不高于/低于等于转低于等于转小于小于/不大于等于转不大于等于转不小于不小于/大于等于转大于等于转大于大于/不小于等于转不小于等于转不大于不大于/小于等于转小于等于转3.3.5 控制转移类指令控制转移类指令【例】【例】 在在DATA开始的存储区中存放了开始的存储区中存放了100个个8位无符号数,位无符号数,找出其中最大的数存入找出其中最大的数存入MAX单元。单元。 MOV BX,OFFSET DATA ;BX指向数据首地址指向数据首地址 MOV AL,BX ;取其中的一个数;取其中的一个数 MOV CX,63H ;CX作为计数器作为计数器P1: INC BX ;BX指向下一个数指向下一个数 CMP AL,BX ;两数比较;两数比较 JAE NEXT ;AL中的数大,转中的数大,转NEXT MOV AL,BX ;否则;否则ALBX中大数中大数NEXT:DEC CX ;计数器;计数器-1 JNZ P1 ;未找完,转;未找完,转P1 MOV MAX,AL ;最大数送至;最大数送至MAX单元单元3.3.5 控制转移类指令控制转移类指令 3 3循环指令循环指令(loop if cc)LOOPcc(loop if cc)LOOPcc 指令格式:LOOPcc DST 指令功能:如果CX的内容不等于0,且测试条件“cc”成立,则转到由目的操作数dst所寻址单元处执行程序,即执行循环,CX的内容减1,不影响标志位;如果测试条件“cc”不成立,则退出循环,程序按顺序继续执行。3.3.5 控制转移类指令控制转移类指令3.3.5 控制转移类指令控制转移类指令【例例】 计算。程序段如下:计算。程序段如下: XOR AX,AXMOV SI,1MOV CX,10SUM: ADD AX,SI INC SILOOP SUM3.3.5 控制转移类指令控制转移类指令1标志处理指令3.3.6 处理器控制指令处理器控制指令 2 2CPUCPU控制指令控制指令1)暂停指令暂停指令(Halt)HLT暂停程序执行,只有重新启动或有非可屏蔽和暂停程序执行,只有重新启动或有非可屏蔽和可屏蔽中断发生时,才继续执行下一条指令。可屏蔽中断发生时,才继续执行下一条指令。2)等待指令等待指令(Wait)WAIT检查检查TEST引脚状态,用于引脚状态,用于CPU与协处理器和与协处理器和外部设备同步。也可用来等待外部中断的发生,但外部设备同步。也可用来等待外部中断的发生,但中断结束后仍返回中断结束后仍返回WAIT 指令继续等待。指令继续等待。3.3.6 处理器控制指令处理器控制指令 3)交权指令交权指令(Escape)ESC用来为协处理器提供一个操作码和操作数,以用来为协处理器提供一个操作码和操作数,以便完成主机对协处理器的某操作要求。便完成主机对协处理器的某操作要求。4) 总线封锁指令总线封锁指令(Lock)LOCK可置于任何指令前,封锁外部总线,其他外设可置于任何指令前,封锁外部总线,其他外设不可使用总线,直至本指令执行完毕。不可使用总线,直至本指令执行完毕。3.3.6 处理器控制指令处理器控制指令 5)空操作指令空操作指令(No operation)NOPCPU不完成任何操作,仅占三个时钟周期,不完成任何操作,仅占三个时钟周期,主要用于程序调试,执行主要用于程序调试,执行NOP指令后,指令后,CPU继续继续执行下条指令。执行下条指令。3.3.6 处理器控制指令处理器控制指令3.3.7 输入输出指令输入输出指令 80X86提供了提供了IN和和OUT输入输出指令,也输入输出指令,也称为累加器专用指令,该类指令仅限于用累加器称为累加器专用指令,该类指令仅限于用累加器AL、AX、EAX传送信息。输入输出指令只有两传送信息。输入输出指令只有两种寻址方式:直接寻址方式和寄存器间接寻址方种寻址方式:直接寻址方式和寄存器间接寻址方式。输入输出指令执行后不影响标志位。式。输入输出指令执行后不影响标志位。3.3.7 输入输出指令输入输出指令1) 输入指令输入指令(input)IN 指令格式:指令格式: IN AL,port ;(AL)(port) IN AX,port ;(AX)(port+1,port) IN AL,DX ;(AL)(DX) IN AX,DX;(AX)(DX) +1,(DX) 指令功能:用于指令功能:用于I/O端口到端口到CPU的数据输入操作。的数据输入操作。 2) 输出指令输出指令(output)OUT 指令格式指令格式: OUT port ,AL ;(port)(AL) OUT port ,AX;(port+1,port) (AX) OUT DX ,AL ;(DX)(AL) OUT DX ,AX;(DX) +1,(DX) (AX) 指令功能:用于指令功能:用于CPU到到I/O端口的数据输出操作。端口的数据输出操作。 3.3.7 输入输出指令输入输出指令 程序运行时,会遇到某些特殊情况要求程序运行时,会遇到某些特殊情况要求CPU中止正在运行的程序,执行中断服务程序,中止正在运行的程序,执行中断服务程序,执行处理完毕后,返回被中止的程序继续进行,执行处理完毕后,返回被中止的程序继续进行,这样的过程称为中断。这样的过程称为中断。 中断分为中断分为外部中断外部中断和和内部中断内部中断两种,中断两种,中断指令可引起指令可引起CPU中断,这种由指令引起的中断,这种由指令引起的CPU中断,称为软中断。中断,称为软中断。3.3.8 中断指令中断指令 1.软中断指令软中断指令 指令的格式指令的格式:INT n 指令功能:指令功能:n为中断类型号,取值为:为中断类型号,取值为:00H0FFH。检测。检测OF标志位。当标志位。当OF=1时,时,产生一个中断类型为产生一个中断类型为4n的中断;当的中断;当OF=0时,时,本指令不起作用。本指令不起作用。 本指令只影响本指令只影响IF、TF,对其它标志位无影,对其它标志位无影响。响。3.3.8 中断指令中断指令 2.溢出中断指令溢出中断指令 指令格式指令格式:INTO 指令功能:若算术运算结果产生溢出,即指令功能:若算术运算结果产生溢出,即OF=1,则立即调用一个处理算术溢出的中断服,则立即调用一个处理算术溢出的中断服务程序;否则不进行任何操作,接着执行下一条务程序;否则不进行任何操作,接着执行下一条指令。指令。 本指令只影响本指令只影响IF、TF,对其它标志位无影响。,对其它标志位无影响。3.3.8 中断指令中断指令 3.中断返回指令中断返回指令 指令格式:指令格式:IRET 指令功能:用于从中断服务子程序返回到指令功能:用于从中断服务子程序返回到被中止的程序继续执行。退出中断服务程序,被中止的程序继续执行。退出中断服务程序,返回到被中止的程序的断点处。返回到被中止的程序的断点处。 本指令影响所有标志位。本指令影响所有标志位。3.3.8 中断指令中断指令
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号