【教学课件】第五章80868088指令系统.ppt
第五章8086/8088 指令系统C第一节指令格式和寻址方式第一节指令格式和寻址方式C第二节数据传送指令第二节数据传送指令C第三节算术运算指令第三节算术运算指令C第四节逻辑运算指令第四节逻辑运算指令C第五节控制转移指令第五节控制转移指令C第六节字符串指令第六节字符串指令第一节指令格式和寻址方式i一、指令格式一、指令格式i二、指令助记符二、指令助记符i三、寻址方式三、寻址方式i(一)指令地址的寻址方式(一)指令地址的寻址方式i(二)操作数地址寻地方式(二)操作数地址寻地方式一、指令格式指令是计算机用以控制各部件协调动作的命令指令是计算机用以控制各部件协调动作的命令指指令令字字是是一一种种二二进进制制代代码码,它它包包括括两两个个基基本本部部分分:操操作作码码和和地地址址码码。操操作作码码提提供供的的是是操操作作控控制制信信息息,指指明明计计算算机机应应执执行行什什么么性性质质的的操操作作,如如进进行行+、-、等等;地地址址码码提提供供参加运算操作数据的存放地址(即操作数地址)。参加运算操作数据的存放地址(即操作数地址)。只只提提供供一一个个操操作作数数地地址址的的指指令令,称称为为单单操操作作数数指指令令;提提供供二二个个操操作作数数地地址址的的指指令令,称称为为双双操操作作数数指指令令;不不提提供供操操作作数地址的指令,称为无操作数指令。数地址的指令,称为无操作数指令。无操作数指令只有操作码部分,它的格式为无操作数指令只有操作码部分,它的格式为 其中其中为操作码。为操作码。这这种种指指令令表表示示只只进进行行某某种种操操作作,无无需需操操作作数数,如如控控制制机机器的运行状态,暂停(器的运行状态,暂停(HALTHALT)等,就属于无操作数指令。等,就属于无操作数指令。单操作数指令格式为单操作数指令格式为 其中其中为操作码;为操作码;D D为目标操作数地址,简称目标地址。为目标操作数地址,简称目标地址。这这种种指指令令表表示示对对目目标标地地址址D D中中的的内内容容,按按操操作作码码规规定定进行操作,结果送目标地址。进行操作,结果送目标地址。双操作数指令格式为双操作数指令格式为 其其中中,为为操操作作码码,D D为为目目标标地地址址,S S为为源源地地址址(即即作作数数地址)。地址)。这这种种指指令令表表示示对对源源地地址址和和目目标标地地址址中中的的内内容容,按按操操作作码码规定的操作进行操作,结果送目标地址,即规定的操作进行操作,结果送目标地址,即DDSDDS。在在微微型型机机中中,一一般般采采用用可可变变字字长长指指令令。也也就就是是说说,不不同同的的指指令令用用不不同同长长度度来来表表示示,但但都都是是字字节节的的整整倍倍数数。如如一一字字节节、二二字字节节、三三字字节节和和四四字字节节指指令令等等。它它们们在在存存储储器器中中分分别别占占有有14个存储单元,其格式如下:个存储单元,其格式如下:单字节指令:单字节指令:操作码操作码 7 6 5 4 3 2 1 0 双字节指令:双字节指令:第一字节:第一字节:操作码操作码 第二字节:第二字节:操作数或地址操作数或地址 三字节指令:三字节指令:第一字节:第一字节:操作码操作码 第二字节:第二字节:操作数或地址低位操作数或地址低位 第三字节:第三字节:操作数或地址高位操作数或地址高位 或:或:第一字节:第一字节:操作码操作码 第二字节:第二字节:操作码操作码 第三字节:第三字节:操作数或地址操作数或地址 四字节指令:四字节指令:第一字节:第一字节:操作码操作码 第二字节:第二字节:操作码操作码 第三字节:第三字节:操作数或地址地位操作数或地址地位 第四字节:第四字节:操作数或地址高位操作数或地址高位 二、指令助记符机机器器指指令令是是二二进进制制代代码码,二二进进制制代代码码不不易易辨辨识识和和记记忆忆。因因此此,在在介介绍绍机机器器指指令令时时,除除非非必必要要情情况况下下用用二二进进制制代代码码,一一般般情情况况下下使使用用指指令令助助记记符符。指指令令助助记记符符由由操操作作码码和和操操作作数数的的助助记记符符号号表表示示。通通常常操操作作码码用用英英文文单单词词或或英英文文缩缩写写单单词词来来表表示示如如:ADD,JP(Jump)等等。操操作作数数用用表表示示寄寄存存器器存存储储器器地地址址的的符符号号来来表表示示。我我们们首首先先来来学学习习操操作作数数部部分分的的符符号号,然然后后结结合合指指令令来来学学习习表表示示操操作作码码的的符符号号。用用助助记记符符来来表表示示的的指令又称为指令的汇编格式。指令又称为指令的汇编格式。指令中要出现的符号介绍如下:指令中要出现的符号介绍如下:AX,BX,CX,DX 16位位通通用用寄寄存存器器AH,BH,CH,DH,AL,BL,CL,DL 8位通用寄存器位通用寄存器CS,DS,ES,SS 段寄存器段寄存器SP,BP,IP 堆栈指针,基址指针,指令指针堆栈指针,基址指针,指令指针DI,SI 目目的的,源源变变址址寄寄存存器器Flags 标志寄存标志寄存r r=AX、BX、CX、DX r=AL、BL、CL、DLa(acc)a=AX ALSeg seg=CS、DS、ES、SSSrc(source)、)、dst(dest)源操作数、目的操作数源操作数、目的操作数Count 计数器计数器Oprd 操作数操作数Im 立即数立即数 n 8位位 nn 16位位nnnn 32位位EA 有效地址有效地址三、寻址方式数数据据和和程程序序在在存存储储器器中中的的位位置置,称称为为地地址址。存存放放指指令令的的地地址址,称称为为指指令令地地址址;存存放放数数据据的的地地址址,称称为为操操作作数数地地址址,简简称称操操作地址。作地址。寻寻找找指指令令地地址址和和操操作作数数地地址址的的方方式式,统统称称为为寻寻址址方方式式。形形成成指指令令地地址址和和操操作作数数地地址址的的过过程程,称称为为寻址过程。寻址过程。(一)指令地址的寻址方式(一)指令地址的寻址方式(二)操作数地址寻地方式(二)操作数地址寻地方式(一)指令地址的寻址方式在在微微机机中中,指指令令地地址址的的寻寻址址方方式式比比较较简简单单,通通常常是是在在CPU中设置程序计数器中设置程序计数器PC,PC中的内容就是指令地址。中的内容就是指令地址。在在一一般般情情况况下下,程程序序是是顺顺序序执执行行的的,程程序序在在存存储储器器中中也也是是按按顺顺序序存存放放的的。这这时时,只只要要将将程程序序计计数数器器中中的的内内容容自自动动递递增,就可以形成下一条指令地址。增,就可以形成下一条指令地址。当当需需要要改改变变程程序序的的执执行行顺顺序序时时,要要使使用用转转移移指指令令,由由转转移移指指令令给给出出转转移移后后指指令令字字的的起起始始地地址址。将将此此地地址址送送到到程程序序计计数数器器,就就形形成成了了转转移移后后的的地地址址。然然后后,程程序序计计数数器器中中的的内内容容又自动递增,直到再次发生转移为止。又自动递增,直到再次发生转移为止。(二)操作数地址寻地方式微微机机在在工工作作时时,指指令令地地址址在在程程序序执执行行过过程程中中时时自自动动形形成成的的,但但指指令令所所需需的的操操作作数数地地址址是是随随机机的的,要要根根据据指指令令的的规规定定求求得得,获获得得操操作作数数地地址址的的方方式式,称称为为操操作作数数寻寻址址方方式式,有有时时也把它称为寻址方式。也把它称为寻址方式。在在操操作作数数寻寻址址方方式式中中,除除了了涉涉及及BP的的寻寻址址方方式式外外,一一般般寻寻址址均均在在数数据据段段内内(段段地地址址由由DS提提供供),在在涉涉及及BP时时,则则使使用用堆堆栈栈段段(段段地地址址由由SS提提供供),在在执执行行串串操操作作时时,使使用用附附加加段段ES。在在各各种种寻寻址址方方式式中中,以以立立即即数数和和存存储储器器直直接接寻寻址址方方式式,速速度度最最快快,因因为为此此时时8086/8088的的执执行行单单元元EU可可以以立立即即从从寄寄存存器器中中或或指指令令队队列列中中取取出出操操作作数数,而而无无须须再再由由总总线线执执行单元计算出有效的行单元计算出有效的20位地址,然后再去取操作数。位地址,然后再去取操作数。立即数寻址在指令中直接给出一个常数作为操作数,如:在指令中直接给出一个常数作为操作数,如:MOV AX,200表示将常数表示将常数200送到存储器送到存储器AX中,要注意的是在中,要注意的是在16位操位操作中,直接数的取值范围为作中,直接数的取值范围为32767(7FFFH)到到-32768(8000H),),当为无符号数时则为当为无符号数时则为0-65535(0FFFFH),),对对8位数应为位数应为0-255(OFFH),),符号符号数为数为127(7FH)到到-128(80H)。)。2.寄存器直接寻址指令中的寄存器存放了操作数,如:指令中的寄存器存放了操作数,如:ADD CX,BX表示将表示将BX中的值直接相加,然后送到中的值直接相加,然后送到CX中去。中去。3.寄存器间接寻址在在指指令令中中,有有操操作作数数的的地地址址,将将该该地地址址同同左左移移4位位后后的的DS值值相相加加,即即可可得得到到20位位物物理理地地址址,从从该该地地址址中中取取出出操操作作数数进进行行指指令令所所要要求求的的操操作作,这这种种寻寻址址方方法法称称为为直直接接寻寻址址,通通常该类指令中,操作数的地址用标号表示,例如:常该类指令中,操作数的地址用标号表示,例如:ADD AX、TABLE表表示示将将AX中中的的值值和和TABLE表表示示的的地地址址中中的的内内容容相相加加,和和放在放在AX中。中。8086/8088按按字字存存放放内内容容时时,低低字字节节方方在在低低地地址址中中,高字节跟随其后,方在高地址中。高字节跟随其后,方在高地址中。5.变址寻址将将指指令令中中指指令令的的变变址址寄寄存存器器的的内内容容加加上上偏偏移移值值,即即成成为为操作的地址,例如:操作的地址,例如:MOV DI,4MOV AX,TABLEDI表表示示偏偏移移值值TABLE加加4(DI的的内内容容)作作为为操操作作数数地地址址,取出操作数送取出操作数送AX。这这种种寻寻址址方方式式通通常常用用于于读读写写表表中中的的元元素素,如如TABLE偏偏移移值值表表示示的的首首址址,加加4表表示示将将表表中中的的第第三三个个量量(16位位)送送AX,读写数组元素也采用此法。读写数组元素也采用此法。6.基址寻址同同变变址址类类似似,不不过过这这种种寻寻址址中中使使用用基基址址寄寄存存器器BX、BP代代替替变变址址寄寄存存器器DI和和SI。它它是是将将基基址址寄寄存存器器的的内内容容加加上上偏偏移量而作为操作数地址的,例如:移量而作为操作数地址的,例如:MOV AX,BX+6表表示示BX作作为为基基址址,距距其其偏偏移移6字字节节的的地地址址便便是是操操作作数数地地址址,在在这这种种寻寻址址中中BX基基址址对对应应的的段段地地址址在在当当前前数数据据段段中中,若若基址是基址是BP,则操做数在堆栈段内。则操做数在堆栈段内。IBM汇汇编编允允许许用用三三种种形形式式指指定定基基址址寻寻址址,它它们们的的效效果果是是一样的,如:一样的,如:MOV AX,BX+6 ;标准格式标准格式MOV AX,6BX ;先写偏移值先写偏移值MOV AX,BX+6 ;偏移值写在括号内偏移值写在括号内7.基址变址寻址基基址址变变址址寻寻址址时时,操操作作数数地地址址是是由由一一个个基基址址寄寄存存器器的的内内容容,一一个个变变址址寄寄存存器器的的内内容容及及偏偏移移值值(是是任任选选项项,也也可可不不用用)相加和,例如:相加和,例如:MOV AX,6BPSI表表示示距距栈栈顶顶6个个字字节节处处作作为为基基址址,然然后后以以SI内内容容为为相相对对基基址址的的偏偏移移作作为为操操作作地地址址,这这种种寻寻址址方方式式在在访访问问堆堆栈栈数数组组时时很很有有用用,如如基基址址为为栈栈顶顶,则则变变址址寄寄存存器器中中的的值值表表示示堆堆栈栈中中的的相应元素。相应元素。这这种种寻寻址址方方式式也也多多用用于于对对二二维维数数组组的的访访问问,如如用用BX作作为为数数组组的的首首地地址址,变变址址寄寄存存器器及及偏偏移移值值作作为为数数组组行行和和列列的的值值,依次寻址,就可找到某个二维数组元素。依次寻址,就可找到某个二维数组元素。第二节数据传送指令第二节数据传送指令8086/8088有有92条指令,按其功能可分为条指令,按其功能可分为6个功能组:个功能组:1.数据才传送数据才传送2.算术运算算术运算 3.逻辑运算逻辑运算 4.串操作串操作 5.控制传送控制传送 6.处理器控制处理器控制 数据传送指令又可分为以下七种:数据传送指令又可分为以下七种:(1)通用数据传送指令通用数据传送指令MOV(2)堆栈操作指令堆栈操作指令 (3)交换指令交换指令(4)标志寄存器传送指令标志寄存器传送指令(5)输入输出指令输入输出指令(6)地址目的传送指令地址目的传送指令(7)查表转换指令查表转换指令 这类指令用来在寄存器和存储单元或输入这类指令用来在寄存器和存储单元或输入/输出端口传输出端口传送数据或地址,表送数据或地址,表5.2.1列出这列出这7种指令种指令:汇编格式汇编格式 操作操作MOV dest,source 传送一个字节或字传送一个字节或字PUSH source 压一个字进栈压一个字进栈POP dest 弹一个字进栈弹一个字进栈PUSHF 压标志寄存器进栈压标志寄存器进栈POPF 弹标志寄存器出栈弹标志寄存器出栈XCHG op1,op2 交换两个字节或字交换两个字节或字LAHF 将标志寄存器内容装入将标志寄存器内容装入AH中(装右字节)中(装右字节)SAHF 将将AH寄存器内容存到标志寄存器(右字节)寄存器内容存到标志寄存器(右字节)IN acc,port 从端口输入字节或字到累加器从端口输入字节或字到累加器OUT port,acc 从累加器输出一个字节或字到端口从累加器输出一个字节或字到端口LEA dest,source 装入有效地址,即将存储器操作数偏装入有效地址,即将存储器操作数偏 移地址送目的寄存器移地址送目的寄存器LDS dest,source 将段地址装入将段地址装入DS中,偏移地址装入中,偏移地址装入 目的寄存器目的寄存器LES dest,source 将段地址装入将段地址装入ES中,偏移地址装入目中,偏移地址装入目 的寄存器的寄存器 XLAT 查表转换查表转换、MOV指令MOV指指令令是是最最基基本本的的通通用用传传送送指指令令,它它把把一一个个字字节节或或一一个字从源传送到目的。这条指令可实现下述操作:个字从源传送到目的。这条指令可实现下述操作:MOV nn,a ;(nn)aMOV a,nn ;a(nn)MOV seg,src ;segsrcMOV dst,seg ;dstsegMOV r,src ;rsrcMOV dst,r ;dstrMOV dst,im ;dstimMOV指指令令可可以以在在寄寄存存器器与与存存储储单单元元之之间间,寄寄存存器器和和寄寄存存器器之之间间传传送送字字节节或或字字,也也可可以以将将一一个个立立即即数数送送寄寄存存器器或或存存储储单元,例如:单元,例如:MOV AX,TABLE ;TABLE存储地址传送到存储地址传送到AXMOV TABLE,DX ;从从DX传送到存储地址传送到存储地址MOV ES;BX,AX ;指指定定段段寄寄存存器器到到ES,而而不不用用DSMOV DS,AX ;寄存器间寄存器间16位数传送位数传送MOV DL,AL ;8位寄存器间传送位寄存器间传送MOV CL,30 ;常数送寄存器常数送寄存器MOV TABLE,05H ;常数送存储单元常数送存储单元2、堆栈操作指令目目前前,微微计计算算机机一一般般都都是是把把内内存存的的一一个个区区域域作作为为堆堆栈栈。这这个个堆堆栈栈按按照照后后进进先先出出的的原原则则组组织织一一段段内内存存区区域域,由由堆堆栈栈指指针针指指出出它它在在存存储储器器中中的的位位置置。8086/8088用用段段寄寄存存器器SS和和堆堆栈栈指指针针SP指指示示堆堆栈栈在在内内存存的的位位置置,这这个个堆堆栈栈长长度度为为64KB,因因此此SP为为16位位指指针针的的单单元元。8086/8088规规定定SP始始终终指指向向堆堆栈栈的的顶顶部部,即即始始终终指指向向最最后后压压入入堆堆栈栈的的信信息息所所在在的的单单元元。8086/8088的的堆堆栈栈是是下下推推式式,即即随随着着压压入入堆堆栈栈的的内内容容的的增增加,加,SP的值减小。的值减小。SP的初值可由的初值可由MOV SP,im指令来设定。指令来设定。堆栈操作指令包括入栈指令和出栈指令。堆栈操作指令包括入栈指令和出栈指令。(1)入栈指令)入栈指令 PUSH oprd 入栈指令完成将入栈指令完成将16位的数据送入堆栈的操作,具体入栈位的数据送入堆栈的操作,具体入栈指令如下:指令如下:PUSH r ;(SP)r,SPSP-2PUSH seg ;(SP)seg,SPSP-2PUSH src ;(SP)src,SPSP-2(2)出栈指令出栈指令 POP oprd出栈指令完成将出栈指令完成将16位的数据从堆栈弹出的操作,具体出位的数据从堆栈弹出的操作,具体出栈指令如下:栈指令如下:POP r ;r(SP),SPSP+2POP seg ;seg(SP),SPSP+2POP dst ;dst(DP),SPSP+2入入栈栈时时,把把一一个个字字从从上上述述操操作作数数传传送送到到已已由由SP指指向向的的堆堆栈顶部,同时修改栈顶部,同时修改SP的值,使的值,使SP指向新的栈项单元。指向新的栈项单元。出出栈栈时时,把把堆堆栈栈顶顶部部的的一一个个字字,传传送送到到指指定定的的目目标标操操作作数,同时修改数,同时修改SP的值,使的值,使SP指向新的栈顶单元。指向新的栈顶单元。PUSH和和POP指指令令提提供供一一个个先先进进后后出出的的堆堆栈栈结结构构,它它们们用用SS栈栈寄寄存存器器来来指指向向栈栈的的段段地地址址,用用SP堆堆栈栈指指针针来来指指向向栈栈顶顶位位置置,当当执执行行PUSH指指令令时时,SP减减2后后,将将源源操操作作数数(一一个个字字)压压入入栈栈内内,相相反反POP指指令令则则将将当当时时SP所所指指定定的的堆堆栈栈中中的的字字取取出到目的操作数,然后出到目的操作数,然后SP加加2。PUSH和和POP指指令令提提供供了了一一种种存存储储的的技技巧巧,例例如如可可用用于于数数据据交交换换,将将DS的的值值传传给给ES,使使数数据据段段和和附附加加段段指指向向同同一一个个段地址:段地址:PUSH DSPOP ES又又如如在在程程序序中中要要用用到到某某一一寄寄存存器器,它它的的值值在在程程序序中中某某一一段段将将被被改改变变,而而后后面面又又要要用用到到它它,且且需需要要它它的的原原先先值值,可可采采用如下方法:用如下方法:PUSH AX ;将将AX值存入堆栈值存入堆栈 ;AX的的值值被被改改变变的的程程序序段段POP AX ;再取回再取回AX的原先值的原先值(3)PUSHF和和POPF指令指令PUSHF和和POPF是是将将标标志志寄寄存存器器内内容容入入栈栈和和出出栈栈,这这两两种种指指令令在在调调用用子子程程序序,保保存存标标志志寄寄存存器器内内容容时时常常用用到到,即即在在调调用用前前标标志志寄寄存存器器入入栈栈,返返回回主主程程序序时时,恢恢复复其其值值。另另外外,当当标标志志寄寄存存器器TF位位为为1时时,8086/8088在在每每执执行行一一条条指指令令后后,便便执执行行一一条条1型型中中断断指指令令,即即指指令令执执行行变变成成单单步步方方式式,这这在在调调试试程程序序时时可可用用到到,以以便便跟跟踪踪每每条条指指令令执执行行情情况况。由由于于没没有有任何一条指令能使任何一条指令能使TF变成变成1,但这可用下面的方法实现:,但这可用下面的方法实现:PUSHF ;标志进栈标志进栈POP AX ;标志值送标志值送AXOR AX,0100H ;使使TF位置位置1PUSH AX ;AX进栈进栈 POPF ;将将AX值送到标志寄存器值送到标志寄存器若若要要恢恢复复TF=0,则则可可将将OR AX,0100H换换成成AND AX,0FEFFH来清除来清除TF。3、交换指令具体的指令如下:具体的指令如下:XCHG AXXCHG AX,r ;AX rr ;AX r XCHG r,src ;r src XCHG r,src ;r src XCHG XCHG指令用于交换源操作数和目的操作数的内容,源和指令用于交换源操作数和目的操作数的内容,源和目的操作数可以在寄存器或单元中,但不能同为存储单元,目的操作数可以在寄存器或单元中,但不能同为存储单元,段寄存器也不能用作操作数。下面是寄存器交换段寄存器也不能用作操作数。下面是寄存器交换例如:例如:MOV AXMOV AX,50 50 MOV BX MOV BX,1010 XCHG AX XCHG AX,BX BX ;现在现在AX=10AX=10,BX=50BX=504标志寄存器传送指令LAHF和SAHFLAHF指指令令是是将将标标志志寄寄存存其其中中标标志志CF.PF.AF.ZF.和和SF分分别别送送到到AH的的0.2.4.6.7位位,而而SAHF指指令令却却相相反反,它它是是将将AH的相应位内容送到标志寄存器的的相应位内容送到标志寄存器的CF、PF、AF、ZF和和SF位。位。5.输入输出指令IN和OUTIN和和OUT指指令令用用来来读读写写I/O口口,8086/8088可可寻寻址址的的口口地地址址可可达达64K个个,口口地地址址可可用用DX或或立立即即数数表表示示,如如用用立立即即数数,则则仅能寻址仅能寻址0-FFH,读写的数据必须从读写的数据必须从AX中接收或传送中接收或传送,例如例如:IN AL,2FH ;从从2FH口输入一个字节到口输入一个字节到ALOUT 5,AL ;将将AL中的数送到中的数送到5口中去口中去MOV DX,3FCH ;3FCH口地址送口地址送DXIN AX,DX ;从从3FCH口读一个字到口读一个字到AX中中这这类类指指令令在在接接口口技技术术中中使使用用较较多多,当当读读写写一一个个字字时时,先先是是低低字字节节,然然后后是是高高字字节节(因因为为数数据据总总线线是是8位位,所所以以必必须须分分两两次次读读写写),如如从从3FCH口口读读一一个个字字时时,实实际际上上从从3FCH口口读读一一个个字字节到节到AL中去中去.然后从然后从3FCH口再读一个字节到口再读一个字节到AH中去。中去。6.地址-目标传送指令8086/8088有三条地址有三条地址-目标传送指令目标传送指令:LEA r,src LDS r,src LES r,src LEA指指令令将将一一个个储储储储器器中中数数据据的的偏偏移移地地址址送送到到任任一一个个通通用用寄存器寄存器.指针寄存器或变址寄存器指针寄存器或变址寄存器,例如例如:LEA BX,TABLEDI 将把将把TABLE+DI的偏移地址送到的偏移地址送到BX中中.LDS指指令令将将从从指指定定的的存存储储器器地地址址中中取取出出一一个个32位位的的双双倍倍字字,将其低将其低16位送到指定的字寄存器位送到指定的字寄存器,而将高而将高16位送到位送到DS,例如例如:LDS BX,ARRAY ARRAY假假如如为为一一个个双双倍倍字字长长的的字字,比比如如是是代代表表一一个个物物理理地地址址的的变变量量,执执行行此此指指令令后后将将ARRAY高高二二字字节节表表示示的的段段地地址址送送入入DS中中,而而将将其其低低二二字字节节表表示示的的偏偏移移地地址址送送入入BX中中,这这相相当当执行了三条指令执行了三条指令:MOV BX,ARRAY MOV AX,ARRAY+2 MOV DS,AX LES指令将段地址送入指令将段地址送入ES中中,其别的功能同其别的功能同LDS.7.查表转换指令XLATXLAT指指令令可可进进行行查查表表操操作作此此表表可可达达256个个字字节节.使使用用该该指指令令时时,将将表表的的起起始始地地址址送送入入BX中中,将将表表的的位位移移值值(即即要要查查表表的的位位置置)送送入入AL中中.。然然后后执执行行XLAT指指令令,则则将将查查到到的的值值存存入入AL中中.第三节算术运算指令8086/8088有有加加、减减、乘乘、除除四四种种基基本本的的运运算算指指令令,这这些些指指令令可可用用于于字字节节或或字字运运算算,可可用用于于带带字字号号数数与与无无符符号号数数的的运运算算。如如果果是是符符号号数数,则则用用补补码码表表示示。大大部部分分指指令令操操作作影影响标志寄存器响应位。算术运算指令如表响标志寄存器响应位。算术运算指令如表5.3.1所示所示8086/8088提提供供各各种种矫矫正正操操作作指指令令,这这些些矫矫枉枉正正操操令令与与二二进进制制算算术术运运算算指指令令配配合合使使用用,使使得得8086/8088也也能能进进行行十十进进制制算算术术运运算算。十十进进制制数数不不带带符符号号,可可用用压压缩缩十十进进制制数数(BCD),或或非非压压缩缩型型十十进进制制表表示示,前前者者每每个个字字可可包包含含两两个个用用场场4位位二二进进制制码码表表示示的的十十进进制制数数,即即十十进进制制数数的的范范围围为为0099;对对非非压压缩缩型型的的数数,则则一一个个字字节节仅仅表表示示一一个个十十进进制制数数即即09,字字节节的的高高4位位在在作作乘乘除除运运算算时时必必须须为为0,加加减减时时可可任意。任意。;1 1、加减法运算指令、加减法运算指令 、;2 2、比较指令、比较指令;3 3、INCINC、DNCDNC、NECNEC指令指令;4 4、乘法与除法指令、乘法与除法指令MULMUL、IMULIMUL、DIVDIV、IDIVIDIV;5 5、CBWCBW与与CWDCWD指令指令;6 6十进调整指令十进调整指令1、加减法运算指令 、A加法指令加法指令A带进位加法指令带进位加法指令A减法指令减法指令A带借位减法指令带借位减法指令()、加法指令 ,;,;,;,;()带进位加法指令 ,;,;A D C ,;A D C ,;其中为进位标志的现行值。其中为进位标志的现行值。()减法指令SUB ,;SUB ,;SUB ,;SUB ,;(4)带借位减法指令SBB r,src ;r r src cSBB a,im ;a a im c SBB dst,im ;dst dstimcSBB dst,r ;dst dstrc其中其中c为借位标志的现行值为借位标志的现行值、均均是是作作加加减减运运算算的的指指令令,其其功功能能是是源源操操作作数数与与目目的的操操作作数数进进行行相相加加或或相相减减,而而与与的的差差别别是是为为带带进进位位的的加加,同同样样是是带带借借位位的的减减,源源操操作作数数可可以以在在寄寄存存器器、存存储储器器中中或或立立即即数数,目目的的操操作作数数可可以以在在寄寄存存器器、存存储储器器中中。这这些些指指令令运运算算的的结结 突突目目的的操操作作数数中中。上上述述指指令令可可完完成成位位(字字节节)或或位运算超过位则需多条指令。位运算超过位则需多条指令。比如操作数长度大于位的加法,用下面的指令比如操作数长度大于位的加法,用下面的指令 ,;低位相加;低位相加 ,;带低位进位的高位相加;带低位进位的高位相加这这两两条条指指令令将将把把和和中中的的位位数数加加到到和和中中的的位位数数中中,县县后后面面的的一一条条指指令令,还还将将低低位位的的进进位位也也一一起起加加上上,结结果果在在和和中中。又又比比如如操操作作数数长长度度大大于位的减法,可用下面的指令于位的减法,可用下面的指令 ,;低位相减;低位相减 ,;带低位借位的高位相减;带低位借位的高位相减作减法时,不仅和相减,还要减去上条作减法时,不仅和相减,还要减去上条指令执行相减后的借位,最后的结果低位将在中,指令执行相减后的借位,最后的结果低位将在中,高位将在中。高位将在中。这类指令不能用于存储单元容的加减,也不能用立即数这类指令不能用于存储单元容的加减,也不能用立即数作为目的操作数。它们的运算结果均将影响标志寄存器的作为目的操作数。它们的运算结果均将影响标志寄存器的、和。、和。、比较指令比比较较指指令令完完成成两两个个操操作作数数加加减减,使使结结果果反反映映到到标标志志位位上上,并不送回相减的差值。指令格式如下:并不送回相减的差值。指令格式如下:CMP ,;CMP ,;CMP ,;CMP ,;指指令令是是比比较较指指令令,用用于于目目的的操操用用数数 与与源源操操用用数数 进进行行比比较较,即即相相减减,类类似似于于指指令令,但但不不同同的的是是,该该指指令令不不保保存存相相减减的的结结果果,因因而而不不变变操操作作数数 ,它它仅仅影影响响标标志志寄寄存器,表存器,表.示出了比较指令影响标志位的情况。示出了比较指令影响标志位的情况。一一般般在在使使用用指指令令时时,后后面面总总是是跟跟着着一一条条条条件件转转移移命命令令,跟跟据据比比较较结结果果标标志志位位的的情情况况决决定定程程序序的的执执行行方方向向,由由表表.可看出:可看出:两位比较要等用零标志位两位比较要等用零标志位ZFZF,若若ZFZF1 1则表示相等。则表示相等。不不带带符符号号数数比比较较大大小小时时,当当借借位位标标志志CFCF1 1时时,说说明明源源目的,否则目的源。目的,否则目的源。带带符符号号数数比比较较大大小小时时,用用符符号号标标志志SFSF与与溢溢出出OFOF半半加加(异异或或)来来判判断断,若若SFOFSFOF1 1,则则源源目目的的,否否则则源源目目的的。例如:例如:CMP AXCMP AX,8000H 8000H ;AX AX 与与80008000H H相比较相比较JL AGAIN JL AGAIN ;如如AXAX小于小于80008000H H则转则转AGAINAGAIN当当CMPCMP执执行行后后,若若SFOFSFOF时时,(即即SFCFSFCF1 1),即即源源目的,则转移。目的,则转移。3、INC、DNC、NEC指令INCINC和和DECDEC指指令令仅仅有有一一个个操操作作数数,其其操操作作可可以以是是位位或或位位的的通通用用寄寄存存器器值值,也也可可以以是是存存储储单单元元中中的的数数,将将执执行行操操作作数数加加的的操操作作,指指令令将将执执行行操操作作数数减减的的操操作作,结结果果仍仍送送回回操操作作的的位位置置中中去去。这这两两条条指指令令操操作作结结果果均均不不影响影响CFCF标标.。NECNEC指指令令为为求求补补指指令令,它它是是从从零零中中减减去去操操作作数数,形形成成2 2 的的补补,操操作作数数仅仅有有一一个个,可可以以是是寄寄存存器器的的破破除除储储存存单单元元的的数数。例如:例如:NEC DATANEC DATADATADATA存存储储单单元元内内设设有有数数为为0000010100000101,则则执执行行该该指指令令后后,其内容就变为其内容就变为1111101111111011。当从一个立却数中减去寄存器或存储器中的数时,不能当从一个立却数中减去寄存器或存储器中的数时,不能用用SUBSUB指令,但可以减数变补,然后再和其相加得到减的果,指令,但可以减数变补,然后再和其相加得到减的果,如立即数为如立即数为100100,则可用如下命令:,则可用如下命令:NEG ALNEG ALADD AL,100ADD AL,1004、乘法与除法指令MUL、IMUL、DIV、IDIV80888088提供乘法与除法指令,具体指令格式如下:提供乘法与除法指令,具体指令格式如下:MUL src ;AXAL*src(MUL src ;AXAL*src(无符号数无符号数)MUL src ;DXMUL src ;DX、AXAX*srcAXAX*src(无符号数)无符号数)IMUL src ;AXAL*srcIMUL src ;AXAL*src(符号数)符号数)IMUL src ;DX IMUL src ;DX、AXAX*srcAXAX*src(符号数)符号数)DIV src ;ALAX/src,AHDIV src ;ALAX/src,AH余数余数DIV src ;AXDX.AX/src,DXDIV src ;AXDX.AX/src,DX余数余数IDIV src ;ALAX/src,AHIDIV src ;ALAX/src,AH余数(符号数)余数(符号数)IDIV src ;AXDX IDIV src ;AXDX、AX/src,DX AX/src,DX余数(符号数)余数(符号数)MULMUL是是无无符符号号数数乘乘法法指指令令,IMULIMUL是是带带符符号号数数的的乘乘法法指指令令(整整数数乘乘法法),它它们们都都可可以以完完成成字字节节与与字字节节相相乘乘,字字与与字字的的相相乘乘,这这些些乘乘法法指指令令均均认认为为目目的的操操作作数数在在ALAL和和AXAX中中,源源操操作作数数由由指指令令指指出出,当当1616位位乘乘法法时时,3232位位的的乘乘积积规规定定高高1616位位在在DXDX中,低中,低1616位在位在AXAX中。中。在在8 8位位或或1616乘乘法法若若扩扩展展部部分分AHAH或或DXDX为为0 0则则CF=0CF=0,OF=0OF=0,反反之之CF=1CF=1。OF=1OF=1。IMULIMUL是是带带符符号号数数乘乘法法 ,执执行行情情况况同同MULMUL,不不过过在在1616位位或或3131位乘积中,包括一位符号位。位乘积中,包括一位符号位。DIVDIV是是无无符符号号除除法法指指令令,它它可可以以进进行行字字节节或或字字除除法法,DIVDIV规规定定:对对于于8 8位位除除法法,被被除除数数在在AX AX 中中,对对于于1616位位除除法法,被被除除数数则则在在DXDX与与AXAX中中,而而除除数数在在指指令令中中指指出出。除除完完的的结结果果,对对8 8位数除法,商与余数分别放在位数除法,商与余数分别放在AXAX与与DXDX中。中。IDIVIDIV是带符号是带符号 数除法,情况同数除法,情况同DIVDIV,除后余数符号和被除后余数符号和被除数相同除数相同 。这两条除法指令都不能用立即数作源操作,但。这两条除法指令都不能用立即数作源操作,但若需要时,可用如下指令来实现,例如:若需要时,可用如下指令来实现,例如:MOV BXMOV BX,1010 DIV BX DIV BX ;用用1010去除去除DXDX:AXAX5、CBW与CWD指令上上述述的的除除法法,被被除除数数均均是是除除数数的的双双倍倍字字长长,若若要要进进行行相相同同字字长长的的除除法法,则则需需将将被被除除数数扩扩展展为为双双倍倍字字长长,这这就就要要用用下下面两条指令:面两条指令:CBW是是将将字字节节扩扩展展为为字字指指令令,它它是是将将AL 中中的的符符号号扩扩展展到到AH的的所所有有位位去去,CWD是是扩扩展展为为双双字字指指令令,它它是是将将AX的的符符号号(第第15)扩扩展展到到DX的的所所有有位位去去,例例如如AL中中的的内内容容为为-2,执执行行CBW后后 AH AL 1111111111111110=-2下面是一个四则运算的例子:下面是一个四则运算的例子:设设BH=FB(即即-5)BL=FE(-2)CH=(-20)CL=05 计算计算(BH*BL)+(CH/CL)AX MOV AL,BH ;AX=FB IMUL BL ;AX=000A=-5(-2)MOV DX,AX ;暂时保存结果暂时保存结果 MOV AL,CH ;AX=00EC(