8086指令系统总结
- 格式:doc
- 大小:71.50 KB
- 文档页数:10
微机原理第3章8086指令系统8086是Intel公司推出的一种16位微处理器,是x86架构的第一代处理器。
8086指令系统是8086微处理器所支持的指令集合,本章将介绍8086指令系统的基本特性和指令编码格式。
8086指令系统采用变长指令编码格式,指令长度可以是1个字节到多个字节,提供了多种寻址方式和丰富的操作类型。
8086指令系统共支持256条标准指令,可以执行各种算术逻辑运算、数据传输和控制流操作。
8086指令由操作码和操作数组成。
操作码指示了执行的具体操作,操作数则是操作码所针对的数据。
8086指令系统提供了多种寻址方式,包括立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址和基址变址寻址等。
立即寻址是将常数或数据直接作为操作数,如MOVAX,1000H,表示将立即数1000H传送到AX寄存器。
直接寻址是通过指定一个内存单元的地址来作为操作数,如MOVAL,[BX],表示将BX寄存器指向的内存单元的内容传送到AL寄存器。
寄存器寻址是直接将一个寄存器作为操作数,如MOVAX,BX,表示将BX寄存器的内容传送到AX寄存器。
除了寻址方式,8086指令系统还提供了多种操作类型,如算术逻辑运算、数据传输和控制流操作等。
算术逻辑运算可以进行加、减、乘、除等数学运算,如ADD、SUB、MUL、DIV等指令。
数据传输可以进行数据的读取和存储操作,如MOV、PUSH、POP等指令。
控制流操作可以用于程序的跳转和条件判断,如JMP、JZ、JC等指令。
8086指令系统还支持多种数据类型的操作,包括字节、字和双字等。
字节操作是对8位数据进行操作,字操作是对16位数据进行操作,双字操作是对32位数据进行操作。
指令的操作数大小可以根据需要选择合适的寄存器或内存单元。
总之,8086指令系统是8086微处理器所支持的指令集合,提供了多种寻址方式和操作类型,支持多种数据类型的操作。
通过掌握8086指令系统,可以编写出高效、精确的8086汇编程序,实现各种功能和算法。
8086指令系统总结8086是一种x86架构的微处理器,由Intel公司于1978年推出。
它是16位的,拥有20位的物理寻址能力,可以访问1MB的内存空间。
8086指令系统是其所支持的一系列指令集合,下面将对8086指令系统进行详细总结。
数据传输指令是8086指令系统中的基础指令之一,用于将数据从一个位置传输到另一个位置。
其中包括mov指令、xchg指令、push指令和pop指令等。
mov指令用于将数据从一个存储位置复制到另一个存储位置;xchg指令用于交换两个存储位置中的数据;push指令用于将数据压入栈顶;pop指令用于将栈顶的数据弹出。
算术运算指令是用于进行各种算术运算的指令。
8086支持包括加法、减法、乘法和除法等多种算术运算指令。
例如,add指令用于将两个操作数相加,sub指令用于将第二个操作数从第一个操作数中减去,mul指令用于将两个操作数相乘,div指令用于将第一个操作数除以第一个操作数,并将结果保存在指定的寄存器中。
逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等运算。
例如,and指令用于对两个操作数进行按位与运算,or指令用于对两个操作数进行按位或运算,not指令用于对一个操作数进行按位非运算,xor指令用于对两个操作数进行按位异或运算。
控制转移指令用于控制程序的执行流程。
包括无条件转移指令、条件转移指令和循环指令。
无条件转移指令用于无条件地跳转到指定的地址,例如jmp指令;条件转移指令用于根据一些条件是否成立来进行跳转,例如je指令(跳转到指定地址,如果上一次比较操作相等);循环指令用于循环执行指定的指令块,例如loop指令。
I/O指令用于进行输入输出操作,包括从外部设备读取数据和将数据写入外部设备。
例如,in指令用于将输入端口的数据读取到指定的寄存器中,out指令用于将指定的寄存器中的数据写入到输出端口。
此外,8086还支持一些特殊的指令,如访问标志寄存器的指令,控制指令(如hlt指令、nop指令)和字符串指令(如movsb指令、cmpsb指令)等。
8086微处理器指令系统数据传送数据传送指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与I/O 端口之间的字节或字传送,它们共同的特点是不影响标志寄存器的内容通用数据传送指令MOV 传送指令格式: MOV 目标,源指令功能:将源操作数(一个字节或一个字)传送到目标操作数。
源操作数可以是8/16位通用寄存器、段寄存器、存储器中的某个字节/字或者是8/16 位的立即数。
堆栈操作指令后进先出的规则存取信息堆栈指针信息存入堆栈时,堆栈指针将自动减量,并将信息存入堆栈指针所指出的存储单元当需要从堆栈中取出信息时,也将从堆栈指针所指出的存储单元读出信息,并自动将堆栈指针增量堆栈指针始终指向堆栈中最后存入信息的那个单元栈顶不断移动、动端堆栈区的另一端则是固定不变的栈底PUSH 入栈指令格式: PUSH 源指令功能:将源操作数压入堆栈。
源操作数可以是16 位通用寄存器、段寄存器或者是存储器中的数据字。
P38 例 2.12POP 出栈指令格式: POP 目标指令功能:将堆栈中当前栈顶和次栈顶中的数据字弹出送到目标操作数。
目标操作数可以是16 位通用寄存器、段寄存器或者是存储单元。
P39 例 2.13XCHG 交换指令1格式: XCHG 目标,源指令功能:将源操作数与目标操作数(一个字节或一个字)相互交换位置。
源操作数可以是通用寄存器或存储单元。
目标操作数只允许是通用寄存器。
P39 例 2. 14XLAT 换码指令2目标地址传送指令这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址LEA 有效地址送寄存器指令格式: LEA 目标,源指令功能:将源操作数的有效地址EA 传送到目标操作数。
源操作数必须是存储器操作数。
目标操作数必须是16位通用寄存器。
LDS 指针送寄存器和DS指令格式: LDS 目标,源指令功能:从源操作数所指定的存储单元中取出某变扯的地址指针(共4 个字节),将其前两个字节(即变量的偏移地址)传送到目标操作数,后两个字节(即变量的段地址)传送到DS 段寄存器中。
8086汇编指令大全标志寄存器: 9个有效位,分6个状态寄存器和3个控制寄存器CF 当执行一个加法(减法)使最高位产生进位(借位)时CF=1 否则CF=0PF 指令执行的结果低8位有偶数个一时,CF=1 否则CF=0AF 当执行一个加法(减法)使运算结果低4位向高4位有进位(借位)时AF=1 否则 AF+0ZF 当前运算结果为零,ZF=1 否则ZF=0SF 符号标志位OF 溢出标志位DF 方向标志位IF 中断允许位 IF=1时响应外部中断TF 跟踪标志位操作数:[目的操作数(OPD),源操作数(OPS)] ;立即操作数,寄存器操作数,存储器操作数。
寻址方式:1) 寄存器寻址例: INC AX; MOV AX,BX2) 寄存器间接寻址(寄存器只能是BX,DI,SI,BP);[PA=(BX、DI、SI)+DS》4)或BP+SS》4]3) 寄存器相对寻址4) 基址变址寻址5) 相对基址变址寻址6) 直接寻址7) 立即数寻址i. 立即数寻址立即数寻址不能用在单操作数指令中ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段指令系统:1) 数据传送指令 mov注意:不允许在两个存储单元之间直接传送数据不允许在两个段寄存器之间传送数据不允许用立即数直接为段寄存器赋值不影响标志位不允许寄存器或存储单元到除CS外的段寄存器2) 入栈(出栈)指令PUSH(POP)注意:PUSH操作数不能是“立即数”POP操作数不能是段寄存器CS 不影响标志位先进后出单操作符3) 交换指令XCHG注意:只允许寄存器与存储单元之间的交换不影响标志位4) 换码指令 XLAT5) 地址传送指令LEA(load effective address):偏移地址()6) 数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI)、高地址的字送DS7) 附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI)、高地址送ES上三指令不影响标志位8) 标志寄存器传送指令LAHF :标志寄存器低八位送AHSAHF :AH送标志寄存器低八位PUSHF:标志寄存器压入堆栈POPF :栈顶内容送标志寄存器9) 加法指令 ADD目的操作数只能是寄存器或存储单元对CF,OF,SF,PF,ZF,AF有影响10) 加1指令 INC对OF,SF,PF,ZF,AF有影响11) 带位加法指令 ADC在进行单精度运算时用ADD指令,在高精度低位运算时用ADD、高位用ADCOPD=OPD+OPS+CF12) 减法指令 SUB对CF,OF,SF,PF,ZF,AF有影响13) 带借位减法指令 SBBOPD=OPD—OPS—CF对CF,OF,SF,PF,ZF,AF有影响对CF,OF,SF,PF,ZF,AF有影响14) 减1指令 DEC15) 比较指令 CMP16) 求补指令 NEG17) 无符号乘法指令 MUL字节操作:AX=AL*OPS字操作:DX,AX=AX*OPS18) 有符号乘法指令 IMUL19) 无符号除法指令 DIV字节的操作:AL=AX/(OPS)的商AH=AX/(OPS)的余数字的操作:20) 有符号除法 IDIV21) 字节转换为字指令 CBW把AL中的符号位扩展到AH中,如果AL的最高位为0,则AH=00H,如果最高位为1,则AH=FFH22) 字转换为双字指令 CWD23) 压缩的BCD码调整指令DAA 加法的十进制调整指令DAS 减法的十进制调整指令24) 非压缩的BCD码调整指令AAA 加法的ASCII调整指令AAS 减法的ASCII调整指令AAM 乘法的ASCII调整指令AAD 除法的ASCII调整指令25) 逻辑与运算指令ADDORNOTTEST(OPD和OPS的内容不变)26) 移位指令逻辑左移与算术左移SHL、SAL(低位补0)算术右移 SAR(高位不变、CF为最后移入的值)逻辑右移 SHR(高位补0、CF为最后移入的值)27) 循环移位左移 ROL (CF为最后移入的值)右移 ROR (CF为最后移入的值)带进位循环左移 RCL(CF+OPD 一起左循环)带进位循环右移 RCR(OPD+CF 一起右循环)28) 无条件转移指令下JMPJMP SHORT OPD(IP=IP+8位位移量)JMP NEAR PTR OPD(IP=IP+16位位移量)上二条指令目的地址是IP=OPD+IPJMP WORD PTR OPD(IP=EA)JMP FAR PTR OPD(IP=OPD的段内偏移地址 CS=OPD段地址)JMP DWORD PTR OPD(IP=EA CS=EA+2)29) 条件转移指令JZ(JE)结果为0则转移(ZF=1)JNZ(JNE)结果不为0则转移(ZF=0)JS 结果为负则转移(SF=1)JNS 结果为正则转移(SF=0)JO 溢出则转移(OF=1)JNO 不溢出则转移(OF=0)JP(JPE)奇偶位为1则转移(PF=1)JNP(JPO)奇偶位不为1则转移(PF=0)JC(JNAE,JB)低于且不等于或进位位为1则转移(CF=1)JNC(JNE,JNB)高于或等于或进位位为0则转移(CF=0)30)。
8086指令系统及汇编语言程序设计8086指令系统是指8086微处理器能够支持和执行的一系列指令。
8086微处理器是Intel公司于1978年推出的一款16位微处理器,是一个革命性的产品,为个人计算机的发展奠定了基础。
8086微处理器采用的是复杂指令集(CISC)架构,其指令系统非常丰富,共有近1000条指令,能够完成各种复杂的计算和操作。
8086指令系统主要分为数据传输指令、算术运算指令、逻辑运算指令、移位指令、控制转移指令等几类。
数据传输指令主要用于数据在寄存器和存储器之间的传输,其中包括直接传输和间接传输两种方式。
算术运算指令用于执行各种加减乘除运算,包括有符号数和无符号数的运算。
逻辑运算指令用于执行逻辑操作,如与、或、异或等。
移位指令用于对数据进行位移操作,包括左移、右移等。
控制转移指令用于改变程序的执行顺序,包括无条件跳转、条件跳转等。
在汇编语言程序设计中,我们使用汇编语言来编写针对8086微处理器的程序。
汇编语言是一种低级编程语言,与机器语言直接对应,使用助记符代表机器指令。
汇编语言程序通过汇编器进行编译,生成可执行的机器码文件。
编写汇编语言程序的过程一般包括以下几个步骤:设计程序的逻辑结构、确定程序的算法、编写汇编语言源程序、进行程序调试、优化程序性能。
汇编语言程序设计可以用于解决各种计算机软件和硬件问题。
它可以用来编写底层驱动程序、操作系统、嵌入式系统等,也可以用来进行系统调试和性能优化。
总而言之,8086指令系统及汇编语言程序设计是计算机科学领域中重要的内容。
了解8086指令系统和掌握汇编语言程序设计对于理解计算机底层原理和解决一些底层问题非常有帮助。
同时,汇编语言程序设计也是一门艺术,通过编写高效的汇编语言程序,可以提高计算机的性能和响应速度。
第三章8086的指令系统3.1 8086指令系统概述所谓一个微处理器的指令系统是一个微处理器所执行的全部指令的集合。
在8086的指令系统中一共有133条指令。
8086指令系统是在8位微处理器8080/8085的指令系统基础上设计的,它兼容了8080/8085的全部指令,这部分对8位微处理器具有兼容性的指令往往是处理字节(8位)的。
此外,8086还有自己所特有的对字或字符串的处理指令,以及对带符号数的运算指令、中断指令和协处理器指令。
对微处理器的指令的描述,一般有两种表示方法:指令的机器码和汇编指令。
无论对于机器码指令还是对于汇编指令均要解决三个问题(三个信息)(1)指令要完成什么操作(操作码);(2)参加这个操作的操作数在哪里(操作数);(3)操作结果放在哪里(结果);为了简化指令,通常在微机系统中规定:操作结果要放在某一个操作数中。
如MOV AL,08H;ADD AX,BX;(源操作数,目标操作数)这样,就将指令所要提供的信息简化为了两部分:操作码、操作数。
指令的机器码就是用二进制码描述指令的操作码和操作数的一种方式,实际上在微机系统内部,指令就是以机器码的形式存在的。
所谓的汇编指令是用指令功能的英文缩写表示操作码,用数字和符号表示操作数的指令描述方法。
例如操作码操作数MOV AX,2000H操作码B8H操作数:00H20H由于汇编语言程序有便于理解、识别、阅读和交流的优点。
所以汇编指令得到了广泛的应用。
但由于最终在机器中使用的是机器码,所以要有一个中间环节就是对其进行翻译。
3.2 8086指令的寻址方式所谓寻址方式就是寻找操作数的方式,所以寻址方式实际上在两种情况下被涉及:一种是用来对操作数进行寻址;另一种是对转移地址和调用地址进行寻址。
下面我们所讨论的寻址方式都是针对操作数的,关于指令地址的寻址,将在讲述转移指令和调用指令时作具体说明。
一条指令的机器码通常包含操作码(OP)和操作数两部分。
8086指令操作数的寻址方式实验总结在计算机体系结构的学习中,8086指令操作数的寻址方式是一个非常重要的概念。
通过对这一概念的深入了解和实验操作,我们可以更好地理解计算机程序的执行过程,深化对计算机底层原理的理解。
在本文中,我将结合理论知识和实验结果,对8086指令操作数的寻址方式进行全面评估和总结。
1. 立即寻址立即寻址是一种直接将操作数的值嵌入指令中的寻址方式。
在8086指令集中,我们可以使用MOV指令将一个立即数传送到目的操作数中。
MOV AX, 1234h指令将立即数1234h传送到寄存器AX中。
通过实验操作,我发现立即寻址方式适用于需要直接传送常数值的情况,能够提高程序执行的效率。
2. 寄存器寻址寄存器寻址是一种通过寄存器来寻址操作数的方式。
8086微处理器具有通用寄存器AX、BX、CX、DX等,可以直接操作这些寄存器中的数据。
MOV AX, BX指令将寄存器BX中的数据传送到寄存器AX中。
在实验过程中,我发现寄存器寻址方式是一种高效的操作数寻址方式,能够提高程序的执行速度。
3. 直接寻址直接寻址是一种通过内存位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用MOV指令将内存中的数据传送到寄存器中,或将寄存器中的数据传送到内存中。
MOV AX, [1234h]指令将存储在内存位置区域1234h处的数据传送到寄存器AX中。
实验结果表明,直接寻址方式可以灵活地对内存中的数据进行操作,适用于大规模数据的传送和处理。
4. 寄存器间接寻址寄存器间接寻址是一种通过寄存器中存储的位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用指令将寄存器中存储的内存位置区域作为操作数进行操作。
MOV BX, [SI]指令将寄存器SI中存储的内存位置区域处的数据传送到寄存器BX中。
在实验中,我发现寄存器间接寻址方式适用于需要对内存中多个数据进行操作的情况,能够提高程序的效率和灵活性。
5. 立即偏移寻址立即偏移寻址是一种通过基址寄存器和偏移量来寻址操作数的方式。
第三章 8086指令系统3.1基本数据类型1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字(64位,486中引入的)和双四字(128位,Pentium3中引入的)。
2.低字节占用内存中的最低地址,该地址也是此操作数的地址。
图:P44 图3-13.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的地址,双字和四字的自然边界地址要分别能被4和8除尽。
4.数据结构要尽可能在自然边界上对齐5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访问,只要进行一次存储访问操作。
6.数字数据类型(学生自学)PPT3.28086的指令格式一、 指令格式Label(标号):mnemonic(助记符)argument1(参数1), argument2(参数2), argument3(参数3)其中:1.标号是一个标识符,后面跟有冒号2.助记符是一类具有相同功能的指令操作码的保留名3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取决于操作码4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程序的另一部分声明的赋予数据项的标识符。
5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数是目的。
例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。
3.38086/8088指令的操作数寻址方式寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O 端口中。
1. 立即数用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。
立即数可以是8位或16位,立即数常用来给寄存器或内存单元赋初值。
例1 MOV AX , 2056H结果 ( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果 ( AL ) = 78H2. 寄存器操作数操作数在寄存器中,指令中指定寄存器名8 位操作数, 用 8 位寄存器: AH 、AL 、BH 、BL 、CH 、CL 、DH 、DL16 位操作数,用 16 位寄存器: AX 、BX 、CX 、DX 、SP 、BP 、SI 、DICS 、DS 、SS 、ES例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H▲ 立即数寻址、寄存器寻址的操作数, 不用在取完指令后再到内存中取数。
8086指令系统总结学习微处理器及其程序设计,必须掌握微处理器的指令系统。
本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。
要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。
能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。
本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。
下面我们分别进行总结:一.8086寻址方式(1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义(2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX(3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H]MOV AX,ES:[1234H](4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX]MOV AX,ES:[SI]MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统1.数据传送指令(一)通用传送指令(1)MOV指令指令格式:MOV 目,源功能:将源操作数传送给目标操作数。
(2)堆栈操作指令进栈指令:PUSH格式:PUSH 源功能:将源操作数压入堆栈。
例:用堆栈指令完成上例的功能。
MOV AX,3000HMOV DS,AX ;段寄存器填充MOV SI,0100H ;基本指令执MOV DI,2000H ;行前的初值MOV CX,50NT: PUSH [SI] ;程序从这POP [DI] ;开始设计INC SIINC SIINC DIINC DILOOP NTMOV AH,4CHINT 21H(3)交换指令XCHG格式:XCHG 目,源功能:源和目标中的内容交换。
(二)累加器专用传送指令(1)输入输出指令IN,OUT输入指令格式:#1 IN AX|AL,8位端口号#2 IN AX|AL,DX功能:从外设输入数据到AX|AL寄存器。
输出指令格式:#1 OUT 8位端口号,AX|AL#2 OUT DX,AX|AL功能:将AX|AL中的数据输出到外设。
该类指令是硬件功能与软件作用的结合。
(2)查表转换指令XLAT指令格式:XLAT功能:将内存单元[BX+AL]中的内容,置入AL寄存器中。
(三)地址传送指令地址传送指令有两类:仅传送偏移地址指令及段地址与偏移地址同时传送指令。
(1)仅传送偏移地址指令:LEA指令格式:LEA 目,源功能:将源操作数的偏移地址传送给目标寄存器。
如:LEA BX,[2000H]执行后BX=2000H。
又如:LEA SI,[BX+100H]若执行前BX=1000H,执行后SI=1100H。
(2)段地址与偏移地址同时传送指令:LDS、LES指令格式:LDS 目,源LES 目,源功能:将源存储器操作数连续4个字节的内容传送给目标寄存器DS寄存器(LDS指令)或ES寄存器(LES指令)。
如:LDS BX,[2000H]执行前[2000H]=1234H;[2002H]=5678H。
执行后BX=1234H;DS=5678H又如:LDS SI,[BX+100H]若执行前BX=1000H,而[1100H]=4321H;[1102]=8765H。
执行后SI=4321H;DS=8765H。
(四)标志传送指令(1)LAHF指令指令格式:LAHF指令功能:将标致寄存器的低八位中以定义位,传送给AH寄存器中对应的位。
(2)SAHF指令指令格式:SAHF指令功能:将AH寄存器中对应的位,传送给标致寄存器的低八位中以定义位。
(3)PUSHF指令指令格式:PUSHF指令功能:将标致寄存器内容进栈。
(4)POPF指令指令格式:POPF指令功能:从栈顶弹出一个字送入标致寄存器。
2.算术运算(一)加法指令加法指令有三类:不带进位加法指令、带进位加法指令和增一指令。
它们均适合与无符号数和有符号数的加法。
对于有符号数,其结果用补码表示。
(1)不带进位的加法指令ADD指令格式:ADD 目,源指令功能:源+目,其结果放到目标,并影响标志寄存器。
如:ADD AL,50H ;(AL)+50H→AL(2)带进位的加法指令ADC指令格式:ADC 目,源指令功能:源+目+CF,其结果放到目标,并影响标志寄存器。
利用ADC指令可以实现两个多字节数的相加运算。
如:1244AFDCH+9A12458FH。
如:ADC AL,50H ;(AL)+50H+CF→AL(3)增一指令INC指令格式:INC 目指令功能:目+1,其结果放到目标,并影响标志寄存器。
(二)减法指令减法指令包含有五类:不考虑借位减法指令、考虑借位减法指令、减一指令、求补指令和比较指令。
它们均适合与无符号数和有符号数的减法。
对于有符号数,其结果用补码表示。
(1)不考虑借位减法指令SUB指令格式:SUB 目,源指令功能:目-源,其结果放到目标,并影响标志寄存器。
(2)考虑借位减法指令SBB指令格式:SBB 目,源指令功能:目-源-CF,其结果放到目标,并影响标志寄存器。
利用SBB指令可以实现两个多字节数的相减运算。
如:1244AFDCH-9A12458FH。
(3)减一指令DEC指令格式:DEC 目指令功能:目-1,其结果放到目标,并影响标志寄存器。
(4)求补指令NEG指令格式:NEG 目指令功能:0-目,其结果放到目标,并影响标志寄存器。
(5)比较指令CMP指令格式:CMP 目,源指令功能:目-源,其结果不放到目标,但设置标志寄存器。
用法:#1 对于两个无符号数的比较,根据CF标志判断两数的大小。
#2 对于两个有符号数比较大小,根据SF和OF标志位来判断两数的大小:OF和SF相同(=0或=1)则目>源;如果OF和SF相异,则源>目。
(三)乘法指令乘法指令有两类:无符号数乘法指令和有符号数乘法指令。
(1)无符号乘法指令MUL指令格式:MUL 源指令功能:(AL|AX)*源,其结果放到AX|DX:AX(2)有符号乘法指令IMUL指令格式:IMUL 源指令功能:(AL|AX)*源,其结果放到AX|DX:AX(四)除法指令8086CPU的除法指令有两类:无符号数除法指令和有符号数除法指令。
它们均是不等长除法指令。
即:被除数长度必须是除数长度的两倍。
所以,在进行除法运算前应根据除数长度将被除数变成它的两倍长度。
(1)无符号数除法指令DIV指令格式:DIV 源指令功能:AX|DX:AX/源,其结果:商放在AL|AX,余数放在AH|DX之中。
(2)有符号数除法指令IDIV指令格式:IDIV 源指令功能:AX|DX:AX/源,其结果:商放在AL|AX,余数放在AH|DX之中。
(3)将字节扩展成字的指令CBW指令格式:CBW指令功能:将AL中有符号数的符号位扩展到AH之中。
不影响标志位。
用法:一般在两字节有符号数除法前,利用该指令,将符号位进行扩展,以使两数变成不等长数。
(4)将字扩展成双字的指令CWD指令格式:CWD指令功能:将AH中有符号数的符号位扩展到DX之中。
不影响标志位。
用法:一般在执行两字长有符号数除法前,利用该指令,将符号位进行扩展,以使两数变成不等长数。
(五)BCD码运算指令BCD码有两类:组合(压缩)型BCD码和未组合(非压缩)型BCD码。
BCD码的运算相应也有两种情况。
(1)未组合BCD码加法十进制调整指令AAA指令格式:AAA指令功能:对AL中的数进行校正:在AX中产生未组合十进制数和。
如: MOV AL,7ADD AL,5AAA执行前两条后,AL=0CH,经AAA调整后,AX=0102H,CF=OF=1。
(2)组合BCD码加法十进制调整指令DAA指令格式:DAA指令功能:对AL中的数进行校正:在AL中产生组合十进制数和。
如: MOV AL,56H(BCD)ADD AL,47H(BCD)DAA执行前两条后,AL=9DH,经DAA调整后,AL=03H,CF=1。
例:多字节组合BCD码十进制相加设两数长度均为8个字节,分别存放在1000H和2000H开始的8个单元中,要求将两数相加后,结果放在2000H开始的内存区域。
MOV SI,1000HMOV DI,2000HMOV CX,8CLCL1:MOV AL,[SI]ADC AL,[DI]DAAMOV [DI], ALINC SIINC DILOOP L1MOV AH,4CHINT 21H(3)未组合BCD码减法十进制调整指令AAS指令格式:AAS指令功能:对AL中的数进行校正:在AX中产生未组合十进制数差。
如: MOV AL,"7" ;"7"为7的ASCII码SUB AL,5AAS执行前两条后,AL=32H,经AAS调整后,AL=02H。
(4)组合BCD码加减十进制调整指令DAS指令格式:DAS指令功能:对AL中的数进行校正:在AL中产生组合十进制数差。
如: MOV AL,56H(BCD)SUB AL,47H(BCD)DAS执行前两条后,AL=0FH,经DAS调整后,AL=09H,CF=1。
(5)未组合BCD码的乘法十进制调整指令AAM指令格式:AAM指令功能:对AL中的数进行校正:在AX中产生未组合十进制数积。
如: MOV AL,05H(BCD)MOV BL,06H(BCD)MUL BLAAM执行前三条后,AX=001EH,经AAM调整后,AX=0300H (BCD)。
(6)未组合BCD码的除法十进制调整指令AAD指令格式:AAD指令功能:对AX中的数进行校正:在AX中产生未组合十进制数。
如: MOV AX,0300H(BCD)AADMOV BL,06H(BCD)DIV BL执行前两条后,AX=001EH,执行DIV指令后,AX=0005H (BCD)。
3.逻辑运算(一)逻辑运算指令逻辑指令有三类:逻辑运算指令:NOT、AND、OR、XOR及TEST移位指令:SHL、SAL、SHR和SHR循环移位指令:ROL、ROR、RCL和RCR1. 逻辑运算指令(1)求反指令NOT指令格式: NOT 目指令功能:将目标内容求反。
(2)逻辑与指令AND指令格式: AND 目,源指令功能:将目标内容同源内容按位进行逻辑与运算。
结果放在目标。
如:AND AX,00FFH其结果AH=0;AL内容不变。
(3)逻辑或指令OR指令格式: OR 目,源指令功能:将目标内容同源内容按位进行逻辑或运算。
结果放在目标。