版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章8086/8088 指令系统C第一节指令格式和寻址方式第一节指令格式和寻址方式C第二节数据传送指令第二节数据传送指令C第三节算术运算指令第三节算术运算指令C第四节逻辑运算指令第四节逻辑运算指令C第五节控制转移指令第五节控制转移指令C第六节字符串指令第六节字符串指令第一节指令格式和寻址方式i一、指令格式一、指令格式i二、指令助记符二、指令助记符i三、寻址方式三、寻址方式i一指令地址的寻址方式一指令地址的寻址方式i二操作数地址寻地方式二操作数地址寻地方式一、指令格式指令是计算机用以控制各部件协调动作的命令指令是计算机用以控制各部件协调动作的命令指令字是一种二进制代码,它包括两个根本部分:操作
2、指令字是一种二进制代码,它包括两个根本部分:操作码和地址码。操作码提供的是操作控制信息,指明计算机应码和地址码。操作码提供的是操作控制信息,指明计算机应执行什么性质的操作,如进展执行什么性质的操作,如进展+、-、等;地址码提供等;地址码提供参与运算操作数据的存放地址即操作数地址。参与运算操作数据的存放地址即操作数地址。只提供一个操作数地址的指令,称为单操作数指令;提只提供一个操作数地址的指令,称为单操作数指令;提供二个操作数地址的指令,称为双操作数指令;不提供操作供二个操作数地址的指令,称为双操作数指令;不提供操作数地址的指令,称为无操作数指令。数地址的指令,称为无操作数指令。无操作数指令只需
3、操作码部分,它的格式为无操作数指令只需操作码部分,它的格式为 其中其中为操作码。为操作码。 这种指令表示只进展某种操作,无需操作数,如控制机这种指令表示只进展某种操作,无需操作数,如控制机器的运转形状,暂停器的运转形状,暂停HALTHALT等,就属于无操作数指令。等,就属于无操作数指令。单操作数指令格式为单操作数指令格式为 其中其中为操作码;为操作码;D D为目的操作数地址,简称目的地址。为目的操作数地址,简称目的地址。这种指令表示对目的地址这种指令表示对目的地址D D中的内容,按操作码中的内容,按操作码规定规定进展操作,结果送目的地址。进展操作,结果送目的地址。双操作数指令格式为双操作数指令
4、格式为 其中,其中,为操作码,为操作码,D D为目的地址,为目的地址,S S为源地址即作数为源地址即作数地址。地址。这种指令表示对源地址和目的地址中的内容,按操作码这种指令表示对源地址和目的地址中的内容,按操作码规定的操作进展操作,结果送目的地址,即规定的操作进展操作,结果送目的地址,即DDSDDS。 D D S在微型机中,普通采用可变字长指令。也就是说,不同在微型机中,普通采用可变字长指令。也就是说,不同的指令用不同长度来表示,但都是字节的整倍数。如一字节、的指令用不同长度来表示,但都是字节的整倍数。如一字节、二字节、三字节和四字节指令等。它们在存储器中分别占有二字节、三字节和四字节指令等。
5、它们在存储器中分别占有14个存储单元,其格式如下:个存储单元,其格式如下:单字节指令:单字节指令: 操作码操作码 7 6 5 4 3 2 1 0 双字节指令:双字节指令: 第一字节:第一字节: 操作码操作码 第二字节:第二字节: 操作数或地址操作数或地址 三字节指令:三字节指令: 第一字节:第一字节: 操作码操作码 第二字节:第二字节: 操作数或地址低位操作数或地址低位 第三字节:第三字节: 操作数或地址高位操作数或地址高位 或:或: 第一字节:第一字节: 操作码操作码 第二字节:第二字节: 操作码操作码 第三字节:第三字节: 操作数或地址操作数或地址 四字节指令:四字节指令: 第一字节:第一
6、字节: 操作码操作码 第二字节:第二字节: 操作码操作码 第三字节:第三字节: 操作数或地址位置操作数或地址位置 第四字节:第四字节: 操作数或地址高位操作数或地址高位 二、指令助记符机器指令是二进制代码,二进制代码不易辨识和记忆。机器指令是二进制代码,二进制代码不易辨识和记忆。因此,在引见机器指令时,除非必要情况下用二进制代码,因此,在引见机器指令时,除非必要情况下用二进制代码,普通情况下运用指令助记符。指令助记符由操作码和操作数普通情况下运用指令助记符。指令助记符由操作码和操作数的助记符号表示。通常操作码用英文单词或英文缩写单词来的助记符号表示。通常操作码用英文单词或英文缩写单词来表示如:
7、表示如:ADD,JPJump等。操作数用表示存放器存储等。操作数用表示存放器存储器地址的符号来表示。我们首先来学习操作数部分的符号,器地址的符号来表示。我们首先来学习操作数部分的符号,然后结合指令来学习表示操作码的符号。用助记符来表示的然后结合指令来学习表示操作码的符号。用助记符来表示的指令又称为指令的汇编格式。指令又称为指令的汇编格式。指令中要出现的符号引见如下:指令中要出现的符号引见如下:AX,BX,CX,DX 16位通用存位通用存放器放器AH,BH,CH,DH,AL,BL,CL,DL 8位通用存位通用存放器放器CS,DS,ES,SS 段存放器段存放器SP,BP ,IP 堆栈指针,基址指针
8、,指令指针堆栈指针,基址指针,指令指针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 有效地址有效地址三、寻址方式数据和程序在存储器数据和程序在存储器中的位置,称为地址。存中的位置,称为地址。存放指令的地址,称为指令放指令的地址,称为指令地址;存放数据的地
9、址,地址;存放数据的地址,称为操作数地址,简称操称为操作数地址,简称操作地址。作地址。寻觅指令地址和操作寻觅指令地址和操作数地址的方式,统称为寻数地址的方式,统称为寻址方式。构成指令地址和址方式。构成指令地址和操作数地址的过程,称为操作数地址的过程,称为寻址过程。寻址过程。一指令地址的寻址方式一指令地址的寻址方式二操作数地址寻地方式二操作数地址寻地方式一指令地址的寻址方式在微机中,指令地址的寻址方式比较简单,通常是在在微机中,指令地址的寻址方式比较简单,通常是在CPU中设置程序计数器中设置程序计数器PC,PC中的内容就是指令地址。中的内容就是指令地址。在普通情况下,程序是顺序执行的,程序在存储
10、器中也在普通情况下,程序是顺序执行的,程序在存储器中也是按顺序存放的。这时,只需将程序计数器中的内容自动递是按顺序存放的。这时,只需将程序计数器中的内容自动递增,就可以构成下一条指令地址。增,就可以构成下一条指令地址。当需求改动程序的执行顺序时,要运用转移指令,由转当需求改动程序的执行顺序时,要运用转移指令,由转移指令给出转移后指令字的起始地址。将此地址送到程序计移指令给出转移后指令字的起始地址。将此地址送到程序计数器,就构成了转移后的地址。然后,程序计数器中的内容数器,就构成了转移后的地址。然后,程序计数器中的内容又自动递增,直到再次发生转移为止。又自动递增,直到再次发生转移为止。二操作数地
11、址寻地方式微机在任务时,指令地址在程序执行过程中时自动构成微机在任务时,指令地址在程序执行过程中时自动构成的,但指令所需的操作数地址是随机的,要根据指令的规定的,但指令所需的操作数地址是随机的,要根据指令的规定求得,获得操作数地址的方式,称为操作数寻址方式,有时求得,获得操作数地址的方式,称为操作数寻址方式,有时也把它称为寻址方式。也把它称为寻址方式。在操作数寻址方式中,除了涉及在操作数寻址方式中,除了涉及BP的寻址方式外,普通的寻址方式外,普通寻址均在数据段内段地址由寻址均在数据段内段地址由DS提供,在涉及提供,在涉及BP时,那时,那么运用堆栈段段地址由么运用堆栈段段地址由SS提供,在执行串
12、操作时,运提供,在执行串操作时,运用附加段用附加段ES。在各种寻址方式中,以立刻数和存储器直接。在各种寻址方式中,以立刻数和存储器直接寻址方式,速度最快,由于此时寻址方式,速度最快,由于此时8086/8088的执行单元的执行单元EU可以立刻从存放器中或指令队列中取出操作数,而无须再由可以立刻从存放器中或指令队列中取出操作数,而无须再由总线执行单元计算出有效的总线执行单元计算出有效的20位地址,然后再去取操作数。位地址,然后再去取操作数。立刻数寻址在指令中直接给出一个常数作为操作数,如:在指令中直接给出一个常数作为操作数,如: MOV AX,200表示将常数表示将常数200送到存储器送到存储器A
13、X中,要留意的是在中,要留意的是在16位操位操作中,直接数的取值范围为作中,直接数的取值范围为327677FFFH到到-327688000H,当为无符号数时那么为,当为无符号数时那么为0-655350FFFFH,对对8位数应为位数应为0-255OFFH,符号数为,符号数为1277FH到到-12880H。2.存放器直接寻址指令中的存放器存放了操作数,如:指令中的存放器存放了操作数,如: ADD CX,BX表示将表示将BX中的值直接相加,然后送到中的值直接相加,然后送到CX中去。中去。3.存放器间接寻址在指令中,有操作数的地址,将该地址同左移在指令中,有操作数的地址,将该地址同左移4位后的位后的D
14、S值相加,即可得到值相加,即可得到20位物理地址,从该地址中取出操作位物理地址,从该地址中取出操作数进展指令所要求的操作,这种寻址方法称为直接寻址,通数进展指令所要求的操作,这种寻址方法称为直接寻址,通常该类指令中,操作数的地址用标号表示,例如:常该类指令中,操作数的地址用标号表示,例如:ADD AX、TABLE表示将表示将AX中的值和中的值和TABLE表示的地址中的内容相加,和表示的地址中的内容相加,和放在放在AX中。中。8086/8088按字存放内容时,低字节方在低地址中,按字存放内容时,低字节方在低地址中,高字节跟随其后,方在高地址中。高字节跟随其后,方在高地址中。5.变址寻址将指令中指
15、令的变址存放器的内容加上偏移值,即成为将指令中指令的变址存放器的内容加上偏移值,即成为操作的地址,例如:操作的地址,例如:MOV DI,4MOV AX,TABLEDI表示偏移值表示偏移值TABLE加加4DI的内容作为操作数地址,的内容作为操作数地址,取出操作数送取出操作数送AX。这种寻址方式通常用于读写表中的元素,如这种寻址方式通常用于读写表中的元素,如TABLE偏移偏移值表示的首址,加值表示的首址,加4表示将表中的第三个量表示将表中的第三个量16位送位送AX,读写数组元素也采用此法。读写数组元素也采用此法。6.基址寻址同变址类似,不过这种寻址中运用基址存放器同变址类似,不过这种寻址中运用基址
16、存放器BX、BP替代变址存放器替代变址存放器DI和和SI。它是将基址存放器的内容加上偏。它是将基址存放器的内容加上偏移量而作为操作数地址的,例如:移量而作为操作数地址的,例如:MOV AX,BX+6表示表示BX作为基址,距其偏移作为基址,距其偏移6字节的地址便是操作数地字节的地址便是操作数地址,在这种寻址中址,在这种寻址中BX基址对应的段地址在当前数据段中,基址对应的段地址在当前数据段中,假设基址是假设基址是BP,那么操做数在堆栈段内。,那么操做数在堆栈段内。IBM汇编允许用三种方式指定基址寻址,它们的效果是汇编允许用三种方式指定基址寻址,它们的效果是一样的,如:一样的,如:MOV AX,BX
17、+6 ;规范格式;规范格式MOV AX,6BX ;先写偏移值;先写偏移值MOV AX,BX+6 ;偏移值写在括号内;偏移值写在括号内7.基址变址寻址基址变址寻址时,操作数地址是由一个基址存放器的内基址变址寻址时,操作数地址是由一个基址存放器的内容,一个变址存放器的内容及偏移值是任选项,也可不用容,一个变址存放器的内容及偏移值是任选项,也可不用相加和,例如:相加和,例如:MOV AX,6BPSI表示距栈顶表示距栈顶6个字节处作为基址,然后以个字节处作为基址,然后以SI内容为相对内容为相对基址的偏移作为操作地址,这种寻址方式在访问堆栈数组时基址的偏移作为操作地址,这种寻址方式在访问堆栈数组时很有用
18、,如基址为栈顶,那么变址存放器中的值表示堆栈中很有用,如基址为栈顶,那么变址存放器中的值表示堆栈中的相应元素。的相应元素。这种寻址方式也多用于对二维数组的访问,如用这种寻址方式也多用于对二维数组的访问,如用BX作为作为数组的首地址,变址存放器及偏移值作为数组行和列的值,数组的首地址,变址存放器及偏移值作为数组行和列的值,依次寻址,就可找到某个二维数组元素。依次寻址,就可找到某个二维数组元素。第二节数据传送指令第二节数据传送指令8086/8088有有92条指令,按其功能可分为条指令,按其功能可分为6个功能组:个功能组: 1.数据才传送数据才传送2.算术运算算术运算 3.逻辑运算逻辑运算 4.串串
19、操作操作 5.控制传送控制传送 6.处置器控制处置器控制 数据传送指令又可分为以下七种:数据传送指令又可分为以下七种: (1)通用数据传送指令通用数据传送指令MOV (2)堆栈操作指令堆栈操作指令 (3)交换指令交换指令 (4)标志存放器传送指令标志存放器传送指令 (5)输入输出指令输入输出指令 (6) 地址目的传送指令地址目的传送指令 (7)查表转换指令查表转换指令 这类指令用来在存放器和存储单元或输入这类指令用来在存放器和存储单元或输入/输出端口输出端口传送数据或地址,表传送数据或地址,表5.2.1列出这列出这7种指令种指令:汇编格式汇编格式 操作操作MOV dest,source 传送一
20、个字节或字传送一个字节或字PUSH source 压一个字进栈压一个字进栈POP dest 弹一个字进栈弹一个字进栈PUSHF 压标志存放器进栈压标志存放器进栈POPF 弹标志存放器出栈弹标志存放器出栈XCHG op1,op2 交换两个字节或字交换两个字节或字LAHF 将标志存放器内容装入将标志存放器内容装入AH中装右字节中装右字节SAHF 将将AH存放器内容存到标志存放器右字节存放器内容存到标志存放器右字节IN acc,port 从端口输入字节或字到累加器从端口输入字节或字到累加器OUT port,acc 从累加器输出一个字节或字到端口从累加器输出一个字节或字到端口LEA dest,sour
21、ce 装入有效地址,即将存储器操作数偏装入有效地址,即将存储器操作数偏 移地址送目的存放器移地址送目的存放器LDS dest,source 将段地址装入将段地址装入DS中,偏移地址装入中,偏移地址装入 目的存放器目的存放器LES dest,source 将段地址装入将段地址装入ES中,偏移地址装入目中,偏移地址装入目 的存放器的存放器 XLAT 查表转换查表转换、MOV指令MOV指令是最根本的通用传送指令,它把一个字节或一指令是最根本的通用传送指令,它把一个字节或一个字从源传送到目的。这条指令可实现下述操作:个字从源传送到目的。这条指令可实现下述操作:MOV nn,a ;(nn) aMOV a
22、,nn ;annMOV 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 ;指定段存放器到;指定段存放器
23、到ES,而不,而不用用DSMOV DS,AX ;存放器间;存放器间16位数传送位数传送MOV DL,AL ;8位存放器间传送位存放器间传送MOV CL,30 ;常数送存放器;常数送存放器MOV TABLE,05H ;常数送存储单元;常数送存储单元2、堆栈操作指令目前,微计算机普通都是把内存的一个区域作为堆栈。目前,微计算机普通都是把内存的一个区域作为堆栈。这个堆栈按照后进先出的原那么组织一段内存区域,由堆栈这个堆栈按照后进先出的原那么组织一段内存区域,由堆栈指针指出它在存储器中的位置。指针指出它在存储器中的位置。8086/8088用段存放器用段存放器SS和堆栈指针和堆栈指针SP指示堆栈在内存的
24、位置,这个堆栈长度为指示堆栈在内存的位置,这个堆栈长度为64KB,因此,因此SP为为16位指针的单元。位指针的单元。8086/8088规定规定SP一一直指向堆栈的顶部,即一直指向最后压入堆栈的信息所在的直指向堆栈的顶部,即一直指向最后压入堆栈的信息所在的单元。单元。8086/8088的堆栈是下推式,即随着压入堆栈的内的堆栈是下推式,即随着压入堆栈的内容的添加,容的添加,SP的值减小。的值减小。SP的初值可由的初值可由MOV SP,im指令指令来设定。来设定。堆栈操作指令包括入栈指令和出栈指令。堆栈操作指令包括入栈指令和出栈指令。1入栈指令入栈指令 PUSH oprd 入栈指令完成将入栈指令完成
25、将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入栈时,把一个字从上述操作数传送到已由入栈时,把一个字从上述操作数传送到已由
26、SP指向的堆指向的堆栈顶部,同时修正栈顶部,同时修正SP的值,使的值,使SP指向新的栈项单元。指向新的栈项单元。出栈时,把堆栈顶部的一个字,传送到指定的目的操作出栈时,把堆栈顶部的一个字,传送到指定的目的操作数,同时修正数,同时修正SP的值,使的值,使SP指向新的栈顶单元。指向新的栈顶单元。PUSH和和POP指令提供一个先进后出的堆栈构造,它们用指令提供一个先进后出的堆栈构造,它们用SS栈存放器来指向栈的段地址,用栈存放器来指向栈的段地址,用SP堆栈指针来指向栈顶堆栈指针来指向栈顶位置,当执行位置,当执行PUSH指令时,指令时,SP减减2后,将源操作数一个后,将源操作数一个字压入栈内,相反字压
27、入栈内,相反POP指令那么将当时指令那么将当时SP所指定的堆栈中所指定的堆栈中的字取出到目的操作数,然后的字取出到目的操作数,然后SP加加2。PUSH和和POP指令提供了一种存储的技巧,例如可用于数指令提供了一种存储的技巧,例如可用于数据交换,将据交换,将DS的值传给的值传给ES,使数据段和附加段指向同一个,使数据段和附加段指向同一个段地址:段地址:PUSH DSPOP ES又如在程序中要用到某一存放器,它的值在程序中某一又如在程序中要用到某一存放器,它的值在程序中某一段将被改动,而后面又要用到它,且需求它的原先值,可采段将被改动,而后面又要用到它,且需求它的原先值,可采用如下方法:用如下方法
28、:PUSH AX ;将;将AX值存入堆栈值存入堆栈 ;AX的值被改动的程序段的值被改动的程序段POP AX ;再取回;再取回AX的原先值的原先值3PUSHF和和POPF指令指令PUSHF和和POPF是将标志存放器内容入栈和出栈,这两是将标志存放器内容入栈和出栈,这两种指令在调用子程序,保管标志存放器内容时常用到,即在种指令在调用子程序,保管标志存放器内容时常用到,即在调用前标志存放器入栈,前往主程序时,恢复其值。另外,调用前标志存放器入栈,前往主程序时,恢复其值。另外,当标志存放器当标志存放器TF位为位为1时,时,8086/8088在每执行一条指令在每执行一条指令后,便执行一条后,便执行一条1
29、型中断指令,即指令执行变成单步方式,型中断指令,即指令执行变成单步方式,这在调试程序时可用到,以便跟踪每条指令执行情况。由于这在调试程序时可用到,以便跟踪每条指令执行情况。由于没有任何一条指令能使没有任何一条指令能使TF变成变成1,但这可用下面的方法实现:,但这可用下面的方法实现:PUSHF ;标志进栈;标志进栈POP AX ;标志值送;标志值送AXOR AX ,0100H ;使;使TF位置位置1PUSH AX ;AX进栈进栈 POPF ;将;将AX值送到标志存放器值送到标志存放器假设要恢复假设要恢复TF=0,那么可将,那么可将OR AX,0100H换成换成AND AX,0FEFFH来去除来去
30、除TF。3、交换指令详细的指令如下:详细的指令如下: XCHG AX XCHG AX,r ;AX rr ;AX r XCHG r,src ;r src XCHG r,src ;r src XCHG XCHG指令用于交换源操作数和目的操作数的内容,源和指令用于交换源操作数和目的操作数的内容,源和目的操作数可以在存放器或单元中,但不能同为存储单元,目的操作数可以在存放器或单元中,但不能同为存储单元,段存放器也不能用作操作数。下面是存放器交换段存放器也不能用作操作数。下面是存放器交换例如:例如: MOV AX MOV AX, 50 50 MOV BX MOV BX,1010 XCHG AX XCHG
31、 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或立刻数表示或立刻数表示,如用立刻数如
32、用立刻数,那么仅能寻址那么仅能寻址0-FFH,读写的数据必需从读写的数据必需从AX中接纳或传送中接纳或传送,例如例如:IN AL,2FH ; 从从2FH口输入一个字节到口输入一个字节到ALOUT 5,AL ; 将将AL中的数送到中的数送到5口中去口中去MOV DX,3FCH ;3FCH口地址送口地址送DXIN AX,DX ; 从从3FCH口读一个字到口读一个字到AX中中这类指令在接口技术中运用较多这类指令在接口技术中运用较多,当读写一个字时当读写一个字时,先是先是低字节低字节,然后是高字节然后是高字节(由于数据总线是由于数据总线是8位位,所以必需分两所以必需分两次读写次读写),如从如从3FCH
33、口读一个字时口读一个字时,实践上从实践上从3FCH口读一个口读一个字节到字节到AL中去中去.然后从然后从3FCH口再读一个字节到口再读一个字节到AH中去。中去。6.地址-目的传送指令8086/8088有三条地址有三条地址-目的传送指令目的传送指令: LEA r,src LDS r,src LES r,src LEA指令将一个储储器中数据的偏移地址送到任一个通用指令将一个储储器中数据的偏移地址送到任一个通用存放器存放器.指针存放器或变址存放器指针存放器或变址存放器,例如例如: LEA BX,TABLEDI 将把将把TABLE+DI的偏移地址送到的偏移地址送到BX中中. LDS指令将从指定的存储器
34、地址中取出一个指令将从指定的存储器地址中取出一个32位的双倍位的双倍字字,将其低将其低16位送到指定的字存放器位送到指定的字存放器,而将高而将高16位送到位送到DS,例如例如: LDS BX,ARRAY ARRAY假设为一个双倍字长的字假设为一个双倍字长的字,比如是代表一个物理地比如是代表一个物理地址的变量址的变量,执行此指令后将执行此指令后将ARRAY高二字节表示的段地址送高二字节表示的段地址送入入DS中中,而将其低二字节表示的偏移地址送入而将其低二字节表示的偏移地址送入BX中中,这相当这相当执行了三条指令执行了三条指令: MOV BX,ARRAY MOV AX,ARRAY+2 MOV DS
35、,AX LES指令将段地址送入指令将段地址送入ES中中,其别的功能同其别的功能同LDS.7.查表转换指令XLATXLAT指令可进展查表操作此表可达指令可进展查表操作此表可达256个字节个字节.运用该运用该指令时指令时,将表的起始地址送入将表的起始地址送入BX中中,将表的位移值将表的位移值(即要查表即要查表的位置的位置)送入送入AL中中.。然后执行。然后执行XLAT指令指令,那么将查到的值那么将查到的值存入存入AL中中.第三节算术运算指令8086/8088有加、减、乘、除四种根本的运算指令,有加、减、乘、除四种根本的运算指令,这些指令可用于字节或字运算,可用于带字号数与无符号数这些指令可用于字节
36、或字运算,可用于带字号数与无符号数的运算。假设是符号数,那么用补码表示。大部分指令操作的运算。假设是符号数,那么用补码表示。大部分指令操作影响标志存放器呼应位。算术运算指令如表影响标志存放器呼应位。算术运算指令如表5.3.1所示所示8086/8088提供各种矫正操作指令,这些矫枉正操令提供各种矫正操作指令,这些矫枉正操令与二进制算术运算指令配合运用,使得与二进制算术运算指令配合运用,使得8086/8088也能进也能进展十进制算术运算。十进制数不带符号,可用紧缩十进制数展十进制算术运算。十进制数不带符号,可用紧缩十进制数BCD,或非紧缩型十进制表示,前者每个字可包含两个,或非紧缩型十进制表示,前
37、者每个字可包含两个用场用场4位二进制码表示的十进制数,即十进制数的范围为位二进制码表示的十进制数,即十进制数的范围为0099;对非紧缩型的数,那么一个字节仅表示一个十进制;对非紧缩型的数,那么一个字节仅表示一个十进制数即数即09,字节的高,字节的高4位在作乘除运算时必需为位在作乘除运算时必需为0 ,加减时,加减时可恣意。可恣意。; 1 1、加减法运算指令、加减法运算指令 、; 2 2、比较指令、比较指令; 3 3、INCINC、DNCDNC、NECNEC指令指令; 4 4、乘法与除法指令、乘法与除法指令MULMUL、IMULIMUL、DIVDIV、IDIVIDIV; 5 5、CBWCBW与与C
38、WDCWD指令指令; 6 6十进调整指令十进调整指令汇汇 编编 格格 式式操操 作作ADD dest,sourceADC dest, sourceSUB dest, sourceSBB dest, sourceINC destDEC destNEG destCMP dest, sourceMUL sourceIMUL sourceDIV sourceIDIV sourceCBWCWD加加字字或或字字节节带带进进位位的的字字节节或或字字的的加加法法字字节节或或字字的的减减法法带带借借位位的的字字节节字字的的减减法法字字节节或或字字加加 1字字节节或或字字减减 1对对目目的的操操作作数数取取补补目
39、目的的操操作作数数与与源源操操作作数数比比较较无无符符号号数数字字节节或或字字乘乘法法整整数数(带带符符号号)乘乘法法无无符符号号数数字字节节或或字字乘乘法法整整数数(带带符符号号)除除法法把把字字节节转转换换为为字字把把字字转转换换为为双双字字汇汇 编编 格格 式式操操 作作DAADASAAAAASAAMAAD加加法法十十进进制制调调整整减减法法十十进进制制调调整整加加法法 ASCII 码码调调整整减减法法 ASCII 码码调调整整乘乘法法 ASCII 码码调调整整除除法法 ASCII 码码调调整整1、加减法运算指令 、A加法指令加法指令A带进位加法指令带进位加法指令A减法指令减法指令A带借
40、位减法指令带借位减法指令、加法指令 , ; , ; , ; , ;带进位加法指令 , ; , ;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为借位标志的现行值为借位标志的现行值、均是作加减运算的指、均是作加减运算的指令,其功能是源操作数与目的操作数进展相加或相减,而令,其功能是源操作数与
41、目的操作数进展相加或相减,而与的差别是为带进位的加,同样是与的差别是为带进位的加,同样是带借位的减,源操作数可以在存放器、存储器中或立刻数,带借位的减,源操作数可以在存放器、存储器中或立刻数,目的操作数可以在存放器、存储器中。这些指令运算的结目的操作数可以在存放器、存储器中。这些指令运算的结突目的操作数中。上述指令可完成位字节或位突目的操作数中。上述指令可完成位字节或位运算超越位那么需多条指令。运算超越位那么需多条指令。比如操作数长度大于位的加法,用下面的指令比如操作数长度大于位的加法,用下面的指令 , ;低位相加;低位相加 , ;带低位进位的高位相加;带低位进位的高位相加这两条指令将把和中的
42、位数加到和这两条指令将把和中的位数加到和中的位数中,县后面的一条指令,还将低位的进中的位数中,县后面的一条指令,还将低位的进位也一同加上,结果在和中。又比如操作数长度大位也一同加上,结果在和中。又比如操作数长度大于位的减法,可用下面的指令于位的减法,可用下面的指令 , ;低位相减;低位相减 , ;带低位借位的高位相减;带低位借位的高位相减作减法时,不仅和相减,还要减去上条指令作减法时,不仅和相减,还要减去上条指令执行相减后的借位,最后的结果低位将在中,高位执行相减后的借位,最后的结果低位将在中,高位将在中。将在中。这类指令不能用于存储单元容的加减,也不能用立刻数作为这类指令不能用于存储单元容的
43、加减,也不能用立刻数作为目的操作数。它们的运算结果均将影响标志存放器的、目的操作数。它们的运算结果均将影响标志存放器的、和。、和。、比较指令比较指令完成两个操作数加减,使结果反映到标志位上,比较指令完成两个操作数加减,使结果反映到标志位上,并不送回相减的差值。指令格式如下:并不送回相减的差值。指令格式如下:CMP , ;CMP , ; CMP , ;CMP , ;指令是比较指令,用于目的操用数指令是比较指令,用于目的操用数 与源操用数与源操用数 进展比较,即相减,类似于指令,但不同的是,该指进展比较,即相减,类似于指令,但不同的是,该指令不保管相减的结果,因此不变操作数令不保管相减的结果,因此
44、不变操作数 ,它仅影响标志,它仅影响标志存放器,表存放器,表.示出了比较指令影响标志位的情况。示出了比较指令影响标志位的情况。目目的的操操作作数数与与源源操操作作数数比比较较CFZFSFOF源源目目的的-00/10/1源源目目的的0100带带符符号号操操作作数数源源目目的的-00/10/1源源目目的的00-源源目目的的01-无无符符号号操操作作数数源源目目的的10-普通在运用指令时,后面总是跟着一条条件转移普通在运用指令时,后面总是跟着一条条件转移命令,跟据比较结果标志位的情况决议程序的执行方向,由命令,跟据比较结果标志位的情况决议程序的执行方向,由表表. . .可看出:可看出:两位比较要等用
45、零标志位两位比较要等用零标志位ZFZF,假设,假设ZFZF1 1那么表示相等。那么表示相等。不带符号数比较大小时,当借位标志不带符号数比较大小时,当借位标志CFCF1 1时,阐明源时,阐明源目的,否那么目的源。目的,否那么目的源。带符号数比较大小时,用符号标志带符号数比较大小时,用符号标志SFSF与溢出与溢出OFOF半加异半加异或来判别,假设或来判别,假设SFOFSFOF1 1,那么源目的,否那么源,那么源目的,否那么源目的。例如:目的。例如:CMP AXCMP AX,8000H 8000H ;AX AX 与与8000H8000H相比较相比较JL AGAIN JL AGAIN ;如;如AXAX
46、小于小于8000H8000H那么转那么转AGAINAGAIN当当CMPCMP执行后,假设执行后,假设SFOFSFOF时,即时,即SFCFSFCF1 1,即源,即源目的,那么转移。目的,那么转移。3、INC、DNC、NEC指令INCINC和和DECDEC指令仅有一个操作数,其操作可以是位或指令仅有一个操作数,其操作可以是位或位的通用存放器值,也可以是存储单元中的数,将位的通用存放器值,也可以是存储单元中的数,将执行操作数加的操作,指令将执行操作数减的操执行操作数加的操作,指令将执行操作数减的操作,结果仍送回操作的位置中去。这两条指令操作结果均不作,结果仍送回操作的位置中去。这两条指令操作结果均不
47、影响影响CFCF标标. .。NECNEC指令为求补指令,它是从零中减去操作数,构成指令为求补指令,它是从零中减去操作数,构成2 2 的补的补, ,操作数仅有一个,可以是存放器的废除储存单元的数。操作数仅有一个,可以是存放器的废除储存单元的数。例如:例如:NEC DATANEC DATADATADATA存储单元内设有数为存储单元内设有数为0000010100000101,那么执行该指令后,那么执行该指令后,其内容就变为其内容就变为1111101111111011。当从一个立却数中减去存放器或存储器中的数时,不能当从一个立却数中减去存放器或存储器中的数时,不能用用SUBSUB指令,但可以减数变补,
48、然后再和其相加得到减的果,指令,但可以减数变补,然后再和其相加得到减的果,如立刻数为如立刻数为100100,那么可用如下命令:,那么可用如下命令:NEG ALNEG ALADD AL,100ADD AL,1004、乘法与除法指令MUL、IMUL、DIV、IDIV80888088提供乘法与除法指令,详细指令格式如下:提供乘法与除法指令,详细指令格式如下:MUL src ; AXALMUL src ; AXAL* *src(src(无符号数无符号数) )MUL src ; DXMUL src ; DX、AXAXAXAX* *srcsrc无符号数无符号数IMUL src ; AXALIMUL src
49、 ; AXAL* *srcsrc符号数符号数IMUL src ; DX IMUL src ; DX 、AXAXAXAX* *srcsrc符号数符号数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是
50、无符号数乘法指令,是无符号数乘法指令,IMULIMUL是带符号数的乘法指令是带符号数的乘法指令整数乘法,它们都可以完成字节与字节相乘,字与字的整数乘法,它们都可以完成字节与字节相乘,字与字的相乘,这些乘法指令均以为目的操作数在相乘,这些乘法指令均以为目的操作数在ALAL和和AXAX中,源操作中,源操作数由指令指出,当数由指令指出,当1616位乘法时,位乘法时,3232位的乘积规定高位的乘积规定高1616位在位在DXDX中,低中,低1616位在位在AXAX中。中。在在8 8位或位或1616乘法假设扩展部分乘法假设扩展部分AHAH或或DXDX为为0 0那么那么CF=0CF=0,OF=0OF=0,反
51、之反之CF=1CF=1。OF=1OF=1。IMULIMUL是带符号数乘法是带符号数乘法 ,执行情况同,执行情况同MULMUL,不过在,不过在1616位或位或3131位乘积中,包括一位符号位。位乘积中,包括一位符号位。DIVDIV是无符号除法指令,它可以进展字节或字除法,是无符号除法指令,它可以进展字节或字除法,DIVDIV规定:对于规定:对于8 8位除法,被除数在位除法,被除数在AX AX 中,对于中,对于1616位除法,被除位除法,被除数那么在数那么在DXDX与与AXAX中,而除数在指令中指出。除完的结果,对中,而除数在指令中指出。除完的结果,对8 8位数除法,商与余数分别放在位数除法,商与
52、余数分别放在AXAX与与DXDX中。中。IDIVIDIV是带符号是带符号 数除法,情况同数除法,情况同DIVDIV,除后余数符号和被,除后余数符号和被除数一样除数一样 。这两条除法指令都不能用立刻数作源操作,但。这两条除法指令都不能用立刻数作源操作,但假设需求时,可用如下指令来实现,例如:假设需求时,可用如下指令来实现,例如: MOV BX MOV BX,1010 DIV BX DIV BX ;用;用1010去除去除DXDX:AXAX5、CBW与CWD指令上述的除法,被除数均是除数的双倍字长,假设要进展上述的除法,被除数均是除数的双倍字长,假设要进展一样字长的除法,那么需将被除数扩展为双倍字长
53、,这就要一样字长的除法,那么需将被除数扩展为双倍字长,这就要用下面两条指令:用下面两条指令: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 A
54、X MOV AL, BH ; AX=FB IMUL BL ; AX=000A=-5(-2) MOV DX,AX ; 暂时保管结果暂时保管结果 MOV AL,CH ; AX=00EC(-20) CBW ;AX=FFEC,扩展为双扩展为双 字节字节 IDIV CL ; AX=00FC(-4) CBW ; AX=FFFC ADD AX、DX ; AX=0006=+6 6十进调整指令/1 1DAADAA指令指令/2 2AAAAAA指令指令/3 3DASDAS和和AAS AAS 指令指令/4 4AAMAAM与与AADAAD指令指令1DAA指令当当BCD码的十进制运算用二进制进展时,有两种情况需码的十进制
55、运算用二进制进展时,有两种情况需求进展调整:求进展调整:1、运算的结果出现非法的、运算的结果出现非法的BCD码即大于的码即大于的数数;2、运算产生半字节间的进位。调整的方法是加、运算产生半字节间的进位。调整的方法是加6进展进展修正。修正。DAA指令就是按上述原那么进展十进制调整的,它是一指令就是按上述原那么进展十进制调整的,它是一条无操作数指令,与条无操作数指令,与ADD指令配合实现紧缩型十进制加法。指令配合实现紧缩型十进制加法。2AAA指令AAAAAA是非紧缩型十进制加法调整指令,它的作用是将是非紧缩型十进制加法调整指令,它的作用是将ALAL中的数换成一个非紧缩型十进制数,即中的数换成一个非
56、紧缩型十进制数,即AAAAAA指令执行时,检指令执行时,检查查ALAL的低的低4 4位,假设是一个合法的位,假设是一个合法的BCDBCD码,那么去除码,那么去除ALAL的高的高4 4位,否那么按上述修正原那么进展低位,否那么按上述修正原那么进展低4 4位修正,并将位修正,并将ALAL的高的高4 4位清零。例如位清零。例如ALAL中的内容为中的内容为00001001=900001001=9,CLCL的内容为的内容为00001000=800001000=8,执行如下指令:,执行如下指令:ADD AL,CLADD AL,CLAAAAAA执行执行ADDADD后,后,ALAL中的内容为中的内容为0001
57、000100010001,因,因AF=1AF=1,故,故AAAAAA指指令进展调整,将令进展调整,将ALAL中的低中的低4 4位加位加6 6,即变成,即变成0001011100010111,然后高,然后高4 4位清零成为位清零成为0000011100000111,并且,并且AHAH加加1 1,因此,因此AHAH中为中为0000000100000001,ALAL中为中为0000011100000111,得到两个非紧缩型十进制数。,得到两个非紧缩型十进制数。(3)DAS和AAS 指令DASDAS是紧缩型十进制数减法调整指令,是紧缩型十进制数减法调整指令,AASAAS是非紧缩型十是非紧缩型十进制数减
58、法调整指令,它们同进制数减法调整指令,它们同ADDADD和和AAAAAA指令一样,不要操作指令一样,不要操作数,且假定要调整的数在数,且假定要调整的数在ALAL中。中。DASDAS的调整过程是:假设的调整过程是:假设ALAL的低的低4 4位大于位大于9 9或或AF=1AF=1,那么,那么从从AFAF中减去中减去6 6,并置,并置AF=1AF=1,假设,假设ALAL的高的高4 4位大于位大于9 9,或,或CF=1CF=1,那么从那么从ALAL中高中高4 4位减去位减去6 6,并置,并置CF=1CF=1,如用下述指令:,如用下述指令:SUB ALSUB AL,BL BL ;ALAL中的数紧缩的中的
59、数紧缩的BCDBCD码减去码减去BLBL紧缩的紧缩的BCDBCD码码DAS DAS ;调整结果,;调整结果,ALAL中为正确的码。中为正确的码。 AASAAS指令将指令将ALAL中的内容调整成非紧缩型十进制码,即假中的内容调整成非紧缩型十进制码,即假设设ALAL低低4 4位大于位大于9 9,或,或AF=1AF=1,那么减去,那么减去6 6,AHAH减减1 1,并置,并置AF=1AF=1,CF=1CF=1,并去除,并去除ALAL高高4 4位。位。4AAM与AAD指令AAM是非紧缩型十进制乘法调整指令,它与指令配合运是非紧缩型十进制乘法调整指令,它与指令配合运用,把中的两个非紧缩型十进制数相乘所得
60、结果加以校正。用,把中的两个非紧缩型十进制数相乘所得结果加以校正。AAM指令必需跟在指令必需跟在MUL指令后。指令后。AAD是非紧缩型十进制除法调整指令,它要在执行除法是非紧缩型十进制除法调整指令,它要在执行除法之前运用,它是将非紧缩十进制表示的被除数换成第二进制之前运用,它是将非紧缩十进制表示的被除数换成第二进制值送到值送到AL中,即中,即AAD将被除数高位将被除数高位AH乘乘10,然后加到,然后加到低位低位AL上,并将上,并将AH清零,清零,ADD用法如下所示:用法如下所示: AAD ;将非紧缩型十进制数调整;将非紧缩型十进制数调整 DIV BL ; 完成除法。完成除法。第四节逻辑运算指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 42842.3-2026微细气泡技术清洗应用第3部分:硬地面清洗的试验方法
- 极端高温对建筑工人皮肤损伤的诊疗进展
- 极端气候下远程医疗医保政策的优化建议
- 极端天气事件对慢性病患者急性发作的影响
- 26年基因检测可及性提升要点
- 肾穿刺术后出血预防与观察
- Unit 2说课稿2025年小学英语三年级下册外研版(一起)
- 初中2025阅读活动策划说课稿
- 医学26年:胆道疾病诊疗进展 查房课件
- 医学26年:心血管疾病戒烟指导 心内科查房
- 污水站安全操作应急处置培训考试题及答案
- 2024年下半年成都铁路文化传媒有限责任公司校招笔试题带答案
- 2025年重庆红色旅游市场调研报告
- CJ/T 288-2008预制双层不锈钢烟道及烟囱
- 东航总部劳务派遣合同6篇
- 外厂人员驻厂安全协议书
- 加油站资产价值评估报告
- 企业民法典宣讲课件
- 北师大版五年级数学下册 第八单元 1复式条形统计图 同步练习(含答案)
- DB37T 5069-2016 太阳能热水系统安装及验收技术规程
- 2025年江苏省南通市中考生物试卷(含答案解析)
评论
0/150
提交评论