




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机所能执行的全部命令的集合即为该计算机的指令系统指令系统。按功能分类:数据传送类指令;例MOV算术运算类指令;例ADD逻辑运算与移位类指令;AND;SHL串操作类指令;MOVSB控制转移类指令;JMP处理器控制类指令;CLD;STD3.3 8086CPU3.3 8086CPU的指令系统的指令系统数据传送类指令共有数据传送类指令共有1414条,条,根据传送的内容可根据传送的内容可分成以分成以下下4 4组组:(1 1)通用数据传送指令;)通用数据传送指令;(2 2)累加器专用传送指令;)累加器专用传送指令;(3 3)地址传送指令;)地址传送指令;(4 4)标志寄存器传送指令。)标志寄存器传送
2、指令。 数据传送类指令数据传送类指令(1 1)通用数据传送指令;)通用数据传送指令;基本传送指令基本传送指令MOVMOV数据交换指令数据交换指令XCHGXCHG堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP查表转换指令查表转换指令XLATXLAT基本传送指令基本传送指令MOVMOV【指令格式指令格式】MOV dst,src【说明说明】指令中的指令中的dstdst表示目标操作数表示目标操作数,src,src表示源操作数表示源操作数. .这这种双操作数指令在汇编语言中的表示方法种双操作数指令在汇编语言中的表示方法, ,总是将目标操作总是将目标操作数写在前面数写在前面, ,源操作数写在后面
3、源操作数写在后面, ,两者之间用一个逗号隔开两者之间用一个逗号隔开. .【指令功能指令功能】将源操作数将源操作数srcsrc传送到目标操作数传送到目标操作数dst.dst.这种传这种传送实际上是进行数据的送实际上是进行数据的”复制复制”, ,将源操作数复制到目标操将源操作数复制到目标操作数中去作数中去, ,源操作数本身不变源操作数本身不变. .【指令特点指令特点】既可传送字节操作数既可传送字节操作数(8(8位位),),也可以传送字操也可以传送字操作数作数(16(16位位).). 可使用各种寻址方式可使用各种寻址方式. . 可实现以下各种传送可实现以下各种传送: :寄存器与寄存器寄存器与寄存器/
4、 /存储存储器之间器之间, ,立即数至寄存器或存储器立即数至寄存器或存储器, ,寄存器寄存器/ /存储器与段寄存存储器与段寄存器之间器之间. .基本传送指令基本传送指令MOVMOV【注意注意】源操作数和目的操作数类型必须匹配源操作数和目的操作数类型必须匹配, ,不能一个不能一个是字是字, ,另一个是字节另一个是字节. . 源操作数和目的操作数不能同时为存储器操作数源操作数和目的操作数不能同时为存储器操作数, ,即存储单元之间不能用即存储单元之间不能用MOVMOV指令直接传送指令直接传送. . 代码段寄存器代码段寄存器CSCS和指令指针寄存器和指令指针寄存器IPIP不能作为目不能作为目的操作数的
5、操作数, ,但但CSCS可以作为源操作数可以作为源操作数. . 立即数不能作为目的操作数立即数不能作为目的操作数. . 不能用立即寻址方式给段寄存器传数不能用立即寻址方式给段寄存器传数. . 段寄存器之间不能用段寄存器之间不能用MOVMOV指令直接传送指令直接传送. . 在传送字单元时在传送字单元时, ,遵循遵循“高字节在高地址,低字高字节在高地址,低字节在低地址节在低地址”的原则。的原则。通用寄存器(AX、BX、CX、DX、SI、DI、BP、SP)存储器立即数段寄存器(CS、DS、SS、ES) 数据交换指令数据交换指令XCHGXCHG【指令格式指令格式】XCHG dst,src【指令功能指令
6、功能】交换指令交换指令XCHGXCHG的操作是使源操作数的操作是使源操作数srcsrc与目标与目标操作数操作数dstdst进行互换进行互换. .即不仅将源操作数传送到目标操作数,即不仅将源操作数传送到目标操作数,而且,同时将目标操作数传送到源操作数。交换的内容可以而且,同时将目标操作数传送到源操作数。交换的内容可以是一个字节(是一个字节(8 8位),也可以是一个字(位),也可以是一个字(1616位)。位)。【注意注意】交换指令的源操作数和目标操作数各自均可以是交换指令的源操作数和目标操作数各自均可以是寄存器或存储器,但不能两者同时为存储器。寄存器或存储器,但不能两者同时为存储器。 段寄存器不能
7、参加交换段寄存器不能参加交换 例:例:XCHG CH,AL XCHG CH,AL 字节操作字节操作 XCHG BX,SI XCHG BX,SI 字操作字操作 XCHG SI,CX XCHG SI,CX 存储器与寄存器之间交换存储器与寄存器之间交换【例例】判断下例指令是否正确判断下例指令是否正确MOV SI,DIMOV SI,DIMOV AH,BXMOV AH,BXMOV BL,1000MOV BL,1000MOV DX,1MOV DX,1MOV CS,CXMOV CS,CXMOV ES,1000HMOV ES,1000HMOV DS,ESMOV DS,ESMOV 1000H,BXMOV 100
8、0H,BX计算计算MOV AX,1000HMOV AX,1000H指令执行完毕后指令执行完毕后AXAX的内容的内容若执行前,(若执行前,(DSDS)=1000H,(11000H)=34H,(11001H)=12H.=1000H,(11000H)=34H,(11001H)=12H.堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP 堆栈就是在存储器中指定的一个特定的存储区域。在这个堆栈就是在存储器中指定的一个特定的存储区域。在这个区域中,信息的存入与取出的原则是按照先进后出(区域中,信息的存入与取出的原则是按照先进后出(first in first in last out,FILOlast
9、 out,FILO)或后进先出()或后进先出(last in first out,LIFOlast in first out,LIFO)的原)的原则进行存取,称该存储区为堆栈。此时,信息的存入称为推入,则进行存取,称该存储区为堆栈。此时,信息的存入称为推入,信息的取出称为弹出。信息的取出称为弹出。 可以把堆栈想像成一个开口向上的容器。堆栈的一端是固可以把堆栈想像成一个开口向上的容器。堆栈的一端是固定的,另一端是浮动的。堆栈的固定端是堆栈的底部,称为栈定的,另一端是浮动的。堆栈的固定端是堆栈的底部,称为栈底。堆栈的浮动端可以推入或弹出数据,称为栈顶。向堆栈推底。堆栈的浮动端可以推入或弹出数据,称
10、为栈顶。向堆栈推入数据时,新推入数据堆放在以前推入数据的上面,而最先推入数据时,新推入数据堆放在以前推入数据的上面,而最先推入的数据被推至堆栈底部,最后推入的数据堆放在堆栈顶部。入的数据被推至堆栈底部,最后推入的数据堆放在堆栈顶部。从堆栈弹出数据时,堆栈顶部的数据最先弹出,而最先推入的从堆栈弹出数据时,堆栈顶部的数据最先弹出,而最先推入的数据则是最后弹出。数据则是最后弹出。堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP 由于堆栈顶部是浮动的,为了指示现在堆栈中存放数据的由于堆栈顶部是浮动的,为了指示现在堆栈中存放数据的位置,通常设置一个指针,即堆栈指针位置,通常设置一个指针,即堆栈指
11、针SPSP,始终指向堆栈的顶,始终指向堆栈的顶部。这样,堆栈中数据的进出取决于部。这样,堆栈中数据的进出取决于SPSP。当将数据(。当将数据(1 1个字节)个字节)推入堆栈时,推入堆栈时,SPSP自动减自动减1 1,向上浮动而指向新的栈顶;当将数据,向上浮动而指向新的栈顶;当将数据从堆栈弹出时,从堆栈弹出时,SPSP自动加自动加1 1,向下浮动而指向新的栈顶。,向下浮动而指向新的栈顶。堆栈有建栈、进栈和出栈堆栈有建栈、进栈和出栈3 3种基本操作。种基本操作。建栈建栈 建立堆栈就是规定堆栈底部在存储器中的位置,可以通过数建立堆栈就是规定堆栈底部在存储器中的位置,可以通过数据传送指令将堆栈底部的地
12、址设置在堆栈指针据传送指令将堆栈底部的地址设置在堆栈指针SPSP和堆栈段寄存和堆栈段寄存器器SSSS中。这时,栈中无数据,堆栈底部与顶部重叠,是一个空中。这时,栈中无数据,堆栈底部与顶部重叠,是一个空栈。栈。例:例:MOV AXMOV AX,3000H3000H MOV SS MOV SS,AXAX MOV SP MOV SP,2000H2000H堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP进栈进栈PUSHPUSH 进栈进栈PUSHPUSH就是把数据推入堆栈的操作。在就是把数据推入堆栈的操作。在80868086中,进栈或中,进栈或出栈操作都是以字为单位的,即每次在堆栈中存取数据均是
13、两出栈操作都是以字为单位的,即每次在堆栈中存取数据均是两个字节(先存入高字节,再存入低字节,仍然遵循个字节(先存入高字节,再存入低字节,仍然遵循“高字节在高字节在高地址,低字节在低地址高地址,低字节在低地址”的原则)。的原则)。【指令格式指令格式】PUSH oprPUSH opr【指令功能指令功能】PUSHPUSH指令将指令将1616位的源操作数推入堆栈,而目标地位的源操作数推入堆栈,而目标地址为当前栈顶,即由址为当前栈顶,即由SPSP指示的单元。指示的单元。PUSHPUSH指令操作如下:指令操作如下:(SPSP)(SPSP)-2-2(SPSP)+1+1: (SPSP) ) opropr堆栈操
14、作指令堆栈操作指令PUSHPUSH和和POPPOP出栈出栈POPPOP 出栈出栈POPPOP就是从堆栈顶部弹出一个字送到通用寄存器、段寄就是从堆栈顶部弹出一个字送到通用寄存器、段寄存器或字存储单元中。存器或字存储单元中。【指令格式指令格式】POP oprPOP opr【指令功能指令功能】POPPOP指令将指令将SPSP指示的栈顶的两字节数据传送到目指示的栈顶的两字节数据传送到目的操作数的操作数opropr中。中。POPPOP指令的目的操作数可以是通用寄存器、段指令的目的操作数可以是通用寄存器、段寄存器(寄存器(CSCS除外)以及存储器字单元。除外)以及存储器字单元。POPPOP指令操作如下:指
15、令操作如下: opr opr (SPSP)+1+1: (SPSP) ) (SPSP)(SPSP)+2+2堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP【注意注意】 堆栈操作总是按字进行的,没有字节操作指令。堆栈操作总是按字进行的,没有字节操作指令。 代码段寄存器代码段寄存器CSCS的值可推入堆栈,但却不能从堆栈中弹出一的值可推入堆栈,但却不能从堆栈中弹出一个字到个字到CSCS中。中。堆栈操作指令中,有一个操作数是隐含的,这个操作数就是堆栈操作指令中,有一个操作数是隐含的,这个操作数就是(SPSP)指示的栈顶单元。)指示的栈顶单元。【注意注意】 堆栈主要用于暂存数据和在过程调用或处理中
16、断时暂存断点堆栈主要用于暂存数据和在过程调用或处理中断时暂存断点信息。信息。 有时在程序中需要对某些寄存器内容进行保护以便后面使用,有时在程序中需要对某些寄存器内容进行保护以便后面使用,就常用堆栈先保护起来,用到时再恢复。就常用堆栈先保护起来,用到时再恢复。【例例】CSCSPUSH AXPUSH AXPUSH BXPUSH BXPUSH CXPUSH CXPUSH DXPUSH DX 这段省略的程序需要用到这段省略的程序需要用到AX,BX,CXAX,BX,CX和和DXDXPOP DXPOP DXPOP CXPOP CXPOP BXPOP BXPOP AXPOP AX查表转换指令查表转换指令XL
17、ATXLAT【指令格式指令格式】XLATXLAT【指令功能指令功能】XLATXLAT指令是字节的查表转换指令,可以根据指令是字节的查表转换指令,可以根据表中元素的序号查出表中相应元素的内容。具体操作为:表中元素的序号查出表中相应元素的内容。具体操作为:AL AL (BXBX)+ + (ALAL) ) 为了实现查表转换,预先应将表的首地址(偏移地址)为了实现查表转换,预先应将表的首地址(偏移地址)传送到传送到BXBX寄存器,元素的序号送寄存器,元素的序号送ALAL。表中第一个元素的序。表中第一个元素的序号为号为0 0,然后依次是,然后依次是1 1,2 2,3 3,执行执行XLATXLAT指令后,
18、表中指指令后,表中指定序号的元素存于定序号的元素存于ALAL中。中。MOV BXMOV BX,OFFSET TABOFFSET TABMOV ALMOV AL,1010XLAT TAB ;XLAT TAB ;写操作数写操作数XLAT ;XLAT ;不写操作数不写操作数XLAT ESXLAT ES:TAB;TAB;重设段寄存器为重设段寄存器为ESES输入输出指令输入输出指令【指令格式指令格式】IN AXIN AX(ALAL),),port; OUT port,AX(AL)port; OUT port,AX(AL)【指令功能指令功能】输入指令从一个端口输入一个字节或一个字输入指令从一个端口输入一个
19、字节或一个字到累加器。输入端口地址可以用一个到累加器。输入端口地址可以用一个8 8位立即数表示,此位立即数表示,此时最多允许寻址时最多允许寻址256256个端口。同时,端口地址也可以放在个端口。同时,端口地址也可以放在1616位寄存器位寄存器DXDX中,则端口总数最多可达中,则端口总数最多可达64K.64K.当当ININ指令的目标操作数为指令的目标操作数为ALAL时,从端口输入一个字节;如时,从端口输入一个字节;如果目标操作数为果目标操作数为AXAX,则从两个连续端口,则从两个连续端口portport和和port+1port+1输入输入两个字节(两个字节(1 1个字),其中个字),其中port
20、port端口内容送端口内容送ALAL, port+1port+1端端口内容送口内容送AHAH。输入指令的具体形式有以下四种:。输入指令的具体形式有以下四种:IN ALIN AL,data8 ;data8 ;端口地址端口地址8 8位,输入一个字节位,输入一个字节IN AXIN AX,data8 ;data8 ;端口地址端口地址8 8位,将位,将data8 data8 , data8data81 1端端口的内容分别送口的内容分别送ALAL、AHAHIN ALIN AL,DX DX ;端口地址;端口地址1616位,输入位,输入1 1个字节个字节IN AXIN AX,DX DX ;端口地址;端口地址1
21、616位,将(位,将(DXDX),(),(DXDX)1 1端口的内容分别送端口的内容分别送ALAL、AHAH输入输出指令输入输出指令输出指令的具体形式有以下四种:输出指令的具体形式有以下四种:OUT data8 OUT data8 , AL ;AL ;端口地址端口地址8 8位,输出一个字节位,输出一个字节OUT data8 OUT data8 , AX ;AX ;端口地址端口地址8 8位,将位,将ALAL、AH AH 的内容分别的内容分别送送data8 data8 , data8data81 1端口端口OUT DX OUT DX , AL AL ;端口地址;端口地址1616位,输出位,输出1
22、1个字节个字节OUT DX OUT DX , AX AX ;端口地址;端口地址1616位,将位,将ALAL、AH AH 的内容分别送的内容分别送(DXDX),(),(DXDX)1 1端口端口【注意注意】无论接收到的数据或准备发送的数据都必须放无论接收到的数据或准备发送的数据都必须放在累加器在累加器AXAX(字)或(字)或ALAL(字节)中,所以这是两条累加器(字节)中,所以这是两条累加器专用指令。专用指令。运行有运行有I/OI/O指令的程序时,若无硬件端口的支持,计算指令的程序时,若无硬件端口的支持,计算机将有可能出现死机。机将有可能出现死机。在使用间接端口寻址时,应先将端口地址赋给在使用间接
23、端口寻址时,应先将端口地址赋给DXDX寄存器,寄存器,而且只能赋给而且只能赋给DXDX。3.3.2 3.3.2 算术运算类指令算术运算类指令 8086 8086算术运算类指令包括加、减、乘、除算术运算类指令包括加、减、乘、除4 4种基种基本运算指令,以及对本运算指令,以及对BCDBCD码表示的十进制数进行算术码表示的十进制数进行算术运算的结果进行调整的指令,和符号扩展指令。运算的结果进行调整的指令,和符号扩展指令。(1 1)加法指令)加法指令:ADD:ADD;ADCADC;INCINC;(2 2)减法指令)减法指令:SUB:SUB;SBBSBB;DECDEC;NEGNEG;CMPCMP;(3
24、3)乘法运算指令)乘法运算指令:MUL:MUL;IMULIMUL;(4 4)除法运算指令)除法运算指令:DIV:DIV;IDIVIDIV;(5 5)符号扩展指令)符号扩展指令:CBW:CBW;CWDCWD;(6 6)十进制调整指令:)十进制调整指令:DAADAA;DASDAS;AAAAAA;AASAAS; 算术运算指令除加算术运算指令除加1指令指令INC不影响不影响CF标志外,其标志外,其余指令对余指令对CF、OF、ZF、SF、PF、AF等等6个标志位均个标志位均可产生影响,其规则如下:可产生影响,其规则如下:无符号数运算时,加法运算最高位向前产生进位或减 法运算最高位向前有借位,则表示出现溢
25、出,CF1带符号数采用补码运算时,符号位也参与运算,出现 溢出则表示运算结果发生了错误,OF1运算结果为0时,ZF1当运算结果为负数时,SF1当运算结果中有偶数个1时,PF1当操作数为BCD码,低4位出现进位1时,AF13.3.2 3.3.2 算术运算类指令算术运算类指令(1 1)不带进位加法指令)不带进位加法指令ADDADD【指令格式指令格式】ADD dst,src【指令功能指令功能】(dstdst) (dstdst)()(srcsrc) ADDADD指令完成目标操作数与源操作数相加指令完成目标操作数与源操作数相加, ,并将结果送回目标并将结果送回目标操作数,并根据相加结果设置标志寄存器中的
26、操作数,并根据相加结果设置标志寄存器中的CFCF、PFPF、AFAF、ZFZF、SFSF和和OFOF。 目标操作数可以是寄存器或存储器,源操作数可以是立目标操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器。但是目标操作数和源操作数不能同即数、寄存器或存储器。但是目标操作数和源操作数不能同时是存储器。另外,不能对段寄存器进行加法运算(段寄存时是存储器。另外,不能对段寄存器进行加法运算(段寄存器也不能参加减法、乘法和除法运算)。加法指令的操作数器也不能参加减法、乘法和除法运算)。加法指令的操作数可以是可以是8 8位数,也可以是位数,也可以是1616位数,但类型必须匹配。位数,但类型
27、必须匹配。3.3.2 3.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(1 1)不带进位加法指令)不带进位加法指令ADDADD【例例1 1】判断下列指令是否正确?判断下列指令是否正确?ADD BXADD BX,CHCHADD ESADD ES,AXAXADD ADD DIDI,BXBX【例例2 2】设(设(CLCL)87H87H,(,(AHAH)F8HF8H,问执行指令,问执行指令ADD AHADD AH,CLCL后的结果如何?后的结果如何?【例例3 3】试编写一程序,将存储器试编写一程序,将存储器23450H23450H单元和单元和23451H23451H单元单元的数相加,结果存
28、入的数相加,结果存入23452H23452H单元中。单元中。3.3.2 3.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(2 2)带进位加法指令)带进位加法指令ADCADC【指令格式指令格式】ADC dst,src【指令功能指令功能】(dstdst) (dstdst)()(srcsrc)+(CF)+(CF) ADCADC指令在格式和功能上都与指令在格式和功能上都与ADDADD指令类似,只是相加时要把指令类似,只是相加时要把进位标志进位标志CFCF的当前值加到和中,结果送到目的操作数中。的当前值加到和中,结果送到目的操作数中。【用途用途】ADCADC指令主要用于多字节加法运算。指令主
29、要用于多字节加法运算。例如,有两个例如,有两个4 4字节的无符号数相加,由于字节的无符号数相加,由于80868086加法指令最加法指令最多只能进行多只能进行1616位的加法运算,我们可将加法分两次进行,先位的加法运算,我们可将加法分两次进行,先进行低进行低1616位相加,然后再进行高位相加,然后再进行高1616位相加,在完成高位相加,在完成高1616位相位相加时,注意要把低加时,注意要把低1616位相加时可能出现的进位位加进去。位相加时可能出现的进位位加进去。3.3.2 3.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(2 2)带进位加法指令)带进位加法指令ADCADC【例例1】试
30、编写程序,完成下面两个双字长数的加法运算:试编写程序,完成下面两个双字长数的加法运算:12345678H789ABCDEH3.3.2 3.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(3 3)加)加1 1指令指令INCINC【指令格式指令格式】INC dst【指令功能指令功能】(dstdst) (dstdst)1 1INCINC指令只有一个操作数,它将指定的操作数的内容加指令只有一个操作数,它将指定的操作数的内容加1 1,再,再将结果送回到该操作数。将结果送回到该操作数。INCINC指令将影响指令将影响SFSF、ZFZF、AFAF、PFPF、OFOF标志位,但不影响标志位,但不影响
31、CFCF。INCINC指令中操作数类型可以是通用寄存器或存储单元,但不能指令中操作数类型可以是通用寄存器或存储单元,但不能是段寄存器。字节操作或字操作均可。对于存储单元,需要是段寄存器。字节操作或字操作均可。对于存储单元,需要在指令中说明操作数类型(字节还是字)。在指令中说明操作数类型(字节还是字)。3.3.2 3.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(3 3)加)加1 1指令指令INCINC【例例1】下列指令为合法的下列指令为合法的INCINC指令。指令。 INC CLINC CL INC DX INC DX INC BYTE PTR INC BYTE PTRBXBXDI
32、DI INC WORD PTRINC WORD PTRSISI【用途用途】INCINC指令一般用在循环程序中,修改地址指针及循指令一般用在循环程序中,修改地址指针及循环次数等。环次数等。指令中的指令中的BYTE PTR BYTE PTR 和和 WORD PTR WORD PTR 分别指定随后的存储器操分别指定随后的存储器操作数类型是字节和字。作数类型是字节和字。3.3.2 3.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(1 1)不带借位减法指令)不带借位减法指令SUBSUB【指令格式指令格式】SUB dst,src【指令功能指令功能】(dstdst) (dstdst)()(src
33、src) 目的操作数减去源操作数,结果放在目的操作数中。源操作数目的操作数减去源操作数,结果放在目的操作数中。源操作数原有内容不变,并根据运算结果置标志位原有内容不变,并根据运算结果置标志位CFCF、PFPF、AFAF、ZFZF、SFSF和和OFOF。 SUBSUB指令可以进行字节或字的减法运算,源操作数与目的操指令可以进行字节或字的减法运算,源操作数与目的操作数的约定与作数的约定与ADDADD相同。相同。 操作数的类型可以根据程序员的要求约定为带符号数或无操作数的类型可以根据程序员的要求约定为带符号数或无符号数。当无符号数的较小数减较大数时,因不够减而产生借符号数。当无符号数的较小数减较大数
34、时,因不够减而产生借位,此时进位标志位,此时进位标志CFCF置置1.1.当带符号数的较小数减较大数时,将当带符号数的较小数减较大数时,将得到负的结果,则符号标志位得到负的结果,则符号标志位SFSF置置1.1.带符号数相减,结果如果带符号数相减,结果如果溢出,则溢出,则OFOF置置1.1.3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令(1 1)不带借位减法指令)不带借位减法指令SUBSUB【例例1】SUB BL,CL设(设(BL)23H,(,(CL)78H,则执行指令后,(,则执行指令后,(BL)?3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令
35、(2 2)带借位减法指令)带借位减法指令SBBSBB【指令格式指令格式】SBB dst,src【指令功能指令功能】(dstdst) (dstdst)()(srcsrc) (CF)SBBSBB指令将目标操作数减源操作数,然后再减进位标志指令将目标操作数减源操作数,然后再减进位标志CFCF,并将结果送回目标操作数。并将结果送回目标操作数。SBBSBB指令对标志位的影响与指令对标志位的影响与SUBSUB指指令相同。令相同。3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令(2 2)带借位减法指令)带借位减法指令SBBSBB【例例1】SBB BX,256SBB AX,DXSBB
36、BH,DATADISBB TABLEBX,CLSBB SI+2000H,66H【用途用途】带借位减指令主要用于多字节的减法。带借位减指令主要用于多字节的减法。3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令(3 3)减)减1 1指令指令DECDEC【指令格式指令格式】DEC dst【指令功能指令功能】(dstdst) (dstdst)1 1DECDEC指令将目的操作数减指令将目的操作数减1.1.指令对标志位指令对标志位SFSF、ZFZF、AFAF、PFPF和和OFOF有影响,但不影响标志位有影响,但不影响标志位CFCF。DECDEC指令中操作数类型可以是通用寄存器或存储
37、单元,但不指令中操作数类型可以是通用寄存器或存储单元,但不能是段寄存器。字节操作或字操作均可。对于存储单元,需能是段寄存器。字节操作或字操作均可。对于存储单元,需要在指令中说明操作数类型(字节还是字)。要在指令中说明操作数类型(字节还是字)。【例例】 DEC BYTE PTRBXDI DEC WORD PTRSI3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令(4 4)求补指令)求补指令NEGNEG【指令格式指令格式】NEG dst【指令功能指令功能】(dstdst) 0 0 (dstdst)NEGNEG指令相当于指令相当于dstdst的内容按位取反后,未位加的内容按位
38、取反后,未位加1.1.NEGNEG指令将影响指令将影响CF CF 、SFSF、ZFZF、AFAF、PFPF、OFOF标志位。标志位。3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令(5 5)比较指令)比较指令CMPCMP【指令格式指令格式】CMP dst【指令功能指令功能】(dstdst)()(srcsrc)CMPCMP指令的操作是将目的操作数减去源操作数,但结果不送回指令的操作是将目的操作数减去源操作数,但结果不送回到目的操作数。因此,执行比较指令到目的操作数。因此,执行比较指令CMPCMP以后,被比较的两个以后,被比较的两个操作数内容均保持不变,而比较结果反映在标志
39、位上。这是操作数内容均保持不变,而比较结果反映在标志位上。这是CMPCMP指令与指令与SUBSUB指令的区别。指令的区别。 CMPCMP指令的目的操作数可以是寄存器或存储器,源操作数指令的目的操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,但不允许两个操作数同时为可以是立即数、寄存器或存储器,但不允许两个操作数同时为存储器操作数。可以是字节比较,也可以是字比较。存储器操作数。可以是字节比较,也可以是字比较。 CMPCMP指令对六个标志位指令对六个标志位ZFZF、SFSF、CFCF、AFAF、OFOF、PFPF均有影响。均有影响。3.3.2 3.3.2 算术运算类指令算术运算类
40、指令2.减法指令减法指令(5 5)比较指令)比较指令CMPCMP【用途用途】比较两个数谁大然后送比较两个数谁大然后送MAX MOV AL,NUM1 CMP AL,NUM2 JA NEXT MOV AL,NUM2NEXT:MOV MAX,AL HLT3.3.2 3.3.2 算术运算类指令算术运算类指令2.减法指令减法指令(1 1)无符号数的乘法指令)无符号数的乘法指令MULMUL【指令格式指令格式】MUL src【指令功能指令功能】字节乘法字节乘法 (AX)(AX)(src) src) (AL)(AL) 字乘法字乘法 (DX:AX)(DX:AX)(src) src) (AX)(AX)MULMUL
41、指令执行指令执行8 8位或位或1616位无符号数的乘法。一个操作数(乘数)位无符号数的乘法。一个操作数(乘数)在累加器中(在累加器中(8 8位乘法的乘数在位乘法的乘数在ALAL中,中,1616位乘法的乘数在位乘法的乘数在AXAX),),这个寄存器操作数是隐含的。另一个操作数这个寄存器操作数是隐含的。另一个操作数srcsrc(被乘数)必(被乘数)必须在寄存器或存储单元中。两个操作数均按无符号数处理。须在寄存器或存储单元中。两个操作数均按无符号数处理。【例例1】 【注意注意】源操作数不能为立即数源操作数不能为立即数MUL AL MUL 25H MUL DXMUL BYTE PTR DI6MUL W
42、ORD PTR COUNT(直接寻址中的符号地址)(直接寻址中的符号地址)3.3.2 3.3.2 算术运算类指令算术运算类指令3.乘法指令乘法指令(1 1)无符号数的乘法指令)无符号数的乘法指令MULMUL【注意注意】MULMUL指令对标志位指令对标志位CFCF和和OFOF有影响,但有影响,但SFAFZFPFSFAFZFPF不不确定。如果运算结果的高半部分(确定。如果运算结果的高半部分(AHDX)AHDX)中为中为0 0,则,则CFCF和和OFOF置置0 0,否则置,否则置1.1.3.3.2 3.3.2 算术运算类指令算术运算类指令3.乘法指令乘法指令(2 2)带符号数的乘法指令)带符号数的乘
43、法指令IMULIMUL【指令格式指令格式】IMUL src【指令功能指令功能】字节乘法字节乘法 (AX)(AX)(src) src) (AL)(AL) 字乘法字乘法 (DX:AX)(DX:AX)(src) src) (AX)(AX)IMULIMUL指令执行指令执行8 8位或位或1616位带符号数的乘法。一个操作数(乘数)位带符号数的乘法。一个操作数(乘数)在累加器中(在累加器中(8 8位乘法的乘数在位乘法的乘数在ALAL中,中,1616位乘法的乘数在位乘法的乘数在AXAX),),这个寄存器操作数是隐含的。另一个操作数这个寄存器操作数是隐含的。另一个操作数srcsrc(被乘数)必(被乘数)必须在
44、寄存器或存储单元中。两个操作数均按带符号数处理。须在寄存器或存储单元中。两个操作数均按带符号数处理。3.3.2 3.3.2 算术运算类指令算术运算类指令3.乘法指令乘法指令【注意注意】IMULMUL指令对标志位指令对标志位CFCF和和OFOF有影响,但有影响,但SFAFZFPFSFAFZFPF不不确定。如果运算结果的高半部分(确定。如果运算结果的高半部分(AHDX)AHDX)中包含乘积的有效中包含乘积的有效数字而不只是符号的扩展部分,则数字而不只是符号的扩展部分,则CFCF和和OFOF置置1 1,否则置,否则置0.0.(1 1)无符号数的除法指令)无符号数的除法指令DIVDIV【指令格式指令格
45、式】DIV src【指令功能指令功能】字节除法字节除法 (AL)(AL)(AX)/ (AX)/ (src) (AH)src) (AH)(AX)%(AX)%(src) src) 字除法字除法 (AX)(AX)(DX:AX)/ (DX:AX)/ (src) (DX)src) (DX)(DX:AX)%(DX:AX)%(src) src) 执行执行DIVDIV指令时,如果除数为指令时,如果除数为0 0,或字节除法时,或字节除法时ALAL寄存器中的寄存器中的商大于商大于FFH,FFH,或字除法时或字除法时AXAX寄存器中的商大于寄存器中的商大于FFFFHFFFFH,则,则CPUCPU立立即自动产生一个类
46、型号为即自动产生一个类型号为0 0的内部中断,即除法溢出中断,此的内部中断,即除法溢出中断,此时商和余数是不定值时商和余数是不定值 。【注意注意】被除数和除数的位长:被除数和除数的位长:1616位除位除8 8位;位;3232位除位除1616位位AHAH和和DXDX的扩展(清的扩展(清0 0)3.3.2 3.3.2 算术运算类指令算术运算类指令4.除法指令除法指令(2 2)带符号数的除法指令)带符号数的除法指令IDIVIDIV【指令格式指令格式】IDIV src【指令功能指令功能】字节除法字节除法 (AL)(AL)(AX)/ (AX)/ (src) (AH)src) (AH)(AX)%(AX)%
47、(src) src) 字除法字除法 (AX)(AX)(DX:AX)/ (DX:AX)/ (src) (DX)src) (DX)(DX:AX)%(DX:AX)%(src) src) 执行执行IDIVIDIV指令时,如果除数为指令时,如果除数为0 0,或字节除法时,或字节除法时ALAL寄存器中的寄存器中的商超出商超出-128-128+127+127的范围的范围,或字除法时或字除法时AXAX寄存器中的商超出寄存器中的商超出- -3276832768+32767+32767的范围,则的范围,则CPUCPU立即自动产生一个类型号为立即自动产生一个类型号为0 0的的内部中断,即除法溢出中断,此时商和余数是
48、不定值内部中断,即除法溢出中断,此时商和余数是不定值 。【注意注意】被除数和除数的字长被除数和除数的字长AHAH和和DXDX的扩展的扩展( (低位字节或低位字的符号扩展,低位字节或低位字的符号扩展,ALAL最高位最高位AH,AXAH,AX最高位最高位DX)DX)3.3.2 3.3.2 算术运算类指令算术运算类指令4.除法指令除法指令3.3.2 3.3.2 算术运算类指令算术运算类指令两个除法指令使两个除法指令使6 6个状态标志位的值不确定,个状态标志位的值不确定,即或为即或为0 0,或为,或为1 1,但没有意义,但没有意义。4.除法指令除法指令(1 1)将字节扩展成字的指令)将字节扩展成字的指
49、令CBWCBWALAL符号位为符号位为0 0,则(,则(AHAH)0 0ALAL符号位为符号位为1 1,则(,则(AHAH)FFHFFH(2 2)将字扩展成双字的指令)将字扩展成双字的指令CWDCWDAXAX符号位为符号位为0 0,则(,则(DXDX)0 0AXAX符号位为符号位为1 1,则(,则(DXDX)FFFFHFFFFH【例例1】MOV AL ,8BHCBWIMUL BX3.3.2 3.3.2 算术运算类指令算术运算类指令5.符号扩展指令(带符号数的符号扩展指令)符号扩展指令(带符号数的符号扩展指令)(1 1)压缩(组合)压缩(组合)BCDBCD码加法十进制调整指令码加法十进制调整指令
50、DAADAA【指令格式指令格式】DAADAA【指令功能指令功能】DAADAA指令对两个组合指令对两个组合BCDBCD码相加后的结果码相加后的结果(必须在(必须在ALAL中)进行调整,产生一个正确的组合中)进行调整,产生一个正确的组合BCDBCD码。码。指令的操作为:如果指令的操作为:如果ALAL的低的低4 4位位09H09H,或者标志位,或者标志位AFAF1 1,则进行(,则进行(ALAL)(ALAL)06H06H修正,同时修正,同时AF 1AF 1;如果如果ALAL的高的高4 4位位09H09H,或者标志位,或者标志位CFCF1 1,则进行,则进行(ALAL)(ALAL)60H60H修正,同
51、时修正,同时CF 1CF 1;【例例】MOV AL,28H ADD AL,47H DAA3.3.2 3.3.2 算术运算类指令算术运算类指令6.十进制调整指令十进制调整指令(2 2)压缩(组合)压缩(组合)BCDBCD码减法十进制调整指令码减法十进制调整指令DASDAS【指令格式指令格式】DASDAS【指令功能指令功能】DASDAS指令对两个组合指令对两个组合BCDBCD码相减后的结果码相减后的结果(必须在(必须在ALAL中)进行调整,产生一个正确的组合中)进行调整,产生一个正确的组合BCDBCD码。码。指令的操作为:如果指令的操作为:如果ALAL的低的低4 4位位09H09H,或者标志位,或
52、者标志位AFAF1 1,则进行(,则进行(ALAL)(ALAL)06H06H修正,同时修正,同时AF 1AF 1;如果如果ALAL的高的高4 4位位09H09H,或者标志位,或者标志位CFCF1 1,则进行,则进行(ALAL)(ALAL)60H60H修正,同时修正,同时CF 1CF 1;【例例】MOV AX,3997H SUB AL,AH DAS3.3.2 3.3.2 算术运算类指令算术运算类指令6.十进制调整指令十进制调整指令(3 3)非压缩(未组合)非压缩(未组合)BCDBCD码减法十进制调整指令码减法十进制调整指令AASAAS【指令格式指令格式】AAS AAS 操作数隐含在操作数隐含在A
53、LAL和和AHAH中中【指令功能指令功能】AASAAS指令对两个未组合指令对两个未组合BCDBCD码相减后的结果码相减后的结果(必须在(必须在ALAL中)进行调整,产生一个正确的未组合中)进行调整,产生一个正确的未组合BCDBCD码。码。指令的操作为:如果指令的操作为:如果ALAL的低的低4 4位位09H09H,或者标志位,或者标志位AFAF1 1,则进行(,则进行(ALAL)(ALAL)06H06H修正,同时(修正,同时(AHAH)(AHAH)1 1, ALAL的高的高4 4位清位清0 0,(,(AFAF)()(CFCF)1 1【例例】127?3.3.2 3.3.2 算术运算类指令算术运算类
54、指令6.十进制调整指令十进制调整指令(4 4)非压缩(未组合)非压缩(未组合)BCDBCD码加法十进制调整指令码加法十进制调整指令AAAAAA【指令格式指令格式】AAAAAA【指令功能指令功能】AAAAAA指令对两个未组合指令对两个未组合BCDBCD码相加后的结果码相加后的结果(必须在(必须在ALAL中)进行调整,产生一个正确的未组合中)进行调整,产生一个正确的未组合BCDBCD码。码。指令的操作为:如果指令的操作为:如果ALAL的低的低4 4位位09H09H,或者标志位,或者标志位AFAF1 1,则进行(,则进行(ALAL)(ALAL)06H06H修正,同时(修正,同时(AHAH)(AHAH
55、)1 1, ALAL的高的高4 4位清位清0 0,(,(AFAF)()(CFCF)1 1【例例】MOV AH,00H MOV AL,06H ADD AL,07H AAA3.3.2 3.3.2 算术运算类指令算术运算类指令6.十进制调整指令十进制调整指令(5 5)非压缩(未组合)非压缩(未组合)BCDBCD码乘法十进制调整指令码乘法十进制调整指令AAMAAM【指令格式指令格式】AAMAAM【指令功能指令功能】AAMAAM指令后不带操作数,操作数隐含在指令后不带操作数,操作数隐含在ALAL和和AHAH中。先用中。先用MULMUL指令将两个未组合指令将两个未组合BCDBCD码相乘,结果放码相乘,结果
56、放在在ALAL中,然后用中,然后用AAMAAM调整,于是在调整,于是在AXAX中即可得到结果,中即可得到结果,乘积高位在乘积高位在AH,AH,乘积低位在乘积低位在ALAL。AAMAAM指令改变指令改变SFSF、ZFZF、PFPF,使使AFAF、CFCF、OFOF不确定不确定指令的操作为:指令的操作为:AH (AL)/0AH AH (AL)/0AH 商送商送AH AH AL (AL) AL (AL)0AH 0AH 余数送余数送ALAL【注意注意】AAM指令通常紧跟在指令通常紧跟在MUL之后。之后。【例例】97?6.十进制调整指令十进制调整指令(6 6)非压缩(未组合)非压缩(未组合)BCDBCD
57、码除法十进制调整指令码除法十进制调整指令AADAAD【指令格式指令格式】AADAAD【指令功能指令功能】AADAAD指令后不带操作数,操作数隐含在指令后不带操作数,操作数隐含在ALAL和和AHAH中。中。AADAAD指令不是在除法之后,而是在除法之前进指令不是在除法之后,而是在除法之前进行调整,然后用行调整,然后用DIVDIV指令进行除法,所得之商还需用指令进行除法,所得之商还需用AAMAAM指令调整。指令调整。AADAAD指令改变指令改变SFSF、ZFZF、PFPF,使,使AFAF、CFCF、OFOF不不确定确定指令的操作为:指令的操作为:AL (AH)AL (AH)0AH +AL 0AH
58、+AL AH 0 AH 0 【例例】732?6.十进制调整指令十进制调整指令非压缩(未组合)非压缩(未组合)BCDBCD码除法十进制调整指令码除法十进制调整指令AADAAD非压缩(未组合)非压缩(未组合)BCDBCD码乘法十进制调整指令码乘法十进制调整指令AAMAAM【例例】732? MOV AX,0703H MOV BL,02H AAD DIV BL AAM AADAAD AL (AH) AL (AH)0AH +AL 0AH +AL AH 0 AH 0 AAM AAM AH (AL)/0AH AH (AL)/0AH 商送商送AH AH AL (AL) AL (AL)0AH 0AH 余数送余数
59、送ALAL3.3.3 3.3.3 逻辑运算与移位类指令逻辑运算与移位类指令1.1.逻辑运算指令逻辑运算指令 有以下有以下5 5条逻辑运算指令条逻辑运算指令, ,它们可对它们可对8 8位或位或1616位位操作数按位进行逻辑运算操作数按位进行逻辑运算, ,位与位之间无进位或借位位与位之间无进位或借位, ,没有数的正负与数的数值大小没有数的正负与数的数值大小. .(1 1)逻辑与指令)逻辑与指令:AND dst,src:AND dst,src(2 2)逻辑或指令)逻辑或指令:OR dst,src:OR dst,src(3 3)逻辑异或指令)逻辑异或指令:XOR dst,src:XOR dst,src
60、(4 4)逻辑非指令)逻辑非指令:NOT dst:NOT dst(5 5)测试指令)测试指令:TEST dst,src:TEST dst,src除了除了NOTNOT指令的执行结果对标志位无影响外指令的执行结果对标志位无影响外, ,其他指令其他指令执行后执行后, ,总是使总是使OF=CF=0,SF,ZFOF=CF=0,SF,ZF和和PFPF根据运算结果置位根据运算结果置位或复位或复位, ,以反映操作结果的特征以反映操作结果的特征, ,而而AFAF状态不定状态不定. .返回返回逻辑与指令逻辑与指令ANDAND【指令格式指令格式】AND dst,src【指令功能指令功能】dst dst (dstdst)& &(s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海南省海口市本年度(2025)小学一年级数学统编版期末考试((上下)学期)试卷及答案
- 2025-2030年中国数控锯床行业发展监测及投资形势预测研究报告
- 船舶建造标准与法规遵循考核试卷
- 残疾人座车燃油经济性分析考核试卷
- 电工仪表的模块化生产考核试卷
- 纺织品的印染与花纹设计考核试卷
- 稀土金属冶炼的政府采购考核试卷
- 玻璃保温容器生产过程监测与故障诊断技术实践探索分析考核试卷
- 美容仪器原理与应用考核试卷
- 编织品的结构设计原理考核试卷
- DB14-T2551-2022公路隧道缺陷与病害处治及验收技术规范
- 文化产业示范基地创建验收标准
- 医学美容美学设计师培训
- GB/T 44569.1-2024土工合成材料内部节点强度的测定第1部分:土工格室
- 《智能网联汽车智能传感器测试与装调》电子教案
- 阿米巴管理模式培训
- DB3501T 006-2022 工业(产业)化工园区环境综合管理导则
- 《居民参与社区治理问题及对策探究:以L街道为例》
- 2024年事业单位考试模拟300题(含答案)
- HY/T 0273.2-2023海洋灾害风险评估和区划技术导则第2部分:海浪
- 高空作业施工方案四篇
评论
0/150
提交评论