微机原理与接口技术(徐惠民)第3章.ppt

上传人:hyn****60 文档编号:70676181 上传时间:2023-01-24 格式:PPT 页数:91 大小:634.50KB
返回 下载 相关 举报
微机原理与接口技术(徐惠民)第3章.ppt_第1页
第1页 / 共91页
微机原理与接口技术(徐惠民)第3章.ppt_第2页
第2页 / 共91页
点击查看更多>>
资源描述

《微机原理与接口技术(徐惠民)第3章.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术(徐惠民)第3章.ppt(91页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、微机原理与接口技术微机原理与接口技术第三章第三章8088/8086的指令系统的指令系统 第三章 8088/8086的指令系统主要内容各种寻址方式各种寻址方式8086/8088的指令系统的指令系统指令系统:一台计算机所能识别和执行的全部指令系统:一台计算机所能识别和执行的全部指令的集合。指令的集合。指令的组成指令的组成:操作码操作码说明计算机要执行哪种操作,如传送、运算、说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部移位、跳转等操作,它是指令中不可缺少的组成部分。分。操作数操作数是指令执行的参与者,即各种操作的对象。是指令执行的参与者,即各种操作的对象。有些

2、指令不需要操作数,通常的指令都有一个或两有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有个操作数,也有个别指令有3个甚至个甚至4个操作数。个操作数。操作码操作码操作数操作数指令的表示:指令的表示:二进制代码二进制代码0000001011001111B(机器指令机器指令)助记符助记符ADDCL,BH(汇编指令汇编指令)3.18086/8088的寻址方式的寻址方式根据指令内容确定操作数地址的过程,称为根据指令内容确定操作数地址的过程,称为寻址寻址。根据寻址计算所得到的操作数地址叫做操作数的根据寻址计算所得到的操作数地址叫做操作数的有有效地址效地址(EA),也就是段内偏移地址。有

3、效地址还需也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是要与相应的段基地址组合才是20位的位的物理地址物理地址(PA),该工作由该工作由CPU完成。完成。操作数的来源:(操作数的来源:(1)直接包含在指令中;)直接包含在指令中;(2)在)在CPU的某寄存器中;的某寄存器中;(3)在内存中。)在内存中。3.18086/8088的寻址方式的寻址方式寻址方式有寻址方式有:1、立即寻址、立即寻址 这种寻址的操作数直接放在指令中。这种寻址的操作数直接放在指令中。不需要访问存储器。不需要访问存储器。例:例:MOVAL,34HMOVAX,1234H 需要注意在需要注意在16位操作时,两个位操作时

4、,两个字节字节数据的高低位存储位置。立即数只能数据的高低位存储位置。立即数只能是源操作数。立即寻址主要用来给寄是源操作数。立即寻址主要用来给寄存器或存储单元赋初值。存器或存储单元赋初值。AX12H34HAHAL注意:在注意:在8086/8088的汇编指令中,逗号前的操作数为目的汇编指令中,逗号前的操作数为目的操作数,逗号后的操作数为源操作数。的操作数,逗号后的操作数为源操作数。3.18086/8088的寻址方式的寻址方式2、寄存器寻址、寄存器寻址操作数就放在操作数就放在CPU的内部寄存器中,的内部寄存器中,AX、BX、CX、DX、DI、SI、SP、BP、DS、ES和和SS,不需要访问存储器。,

5、不需要访问存储器。例:例:INCCXMOVAX,BX若执行前若执行前AX=30A6H,BX=69EDH,CX=40D9H则执行后则执行后AX=69EDH,BX内容不变内容不变CX=40DAH3.18086/8088的寻址方式的寻址方式3、直接寻址、直接寻址有效地址(偏移地址有效地址(偏移地址EA)由指令直接给出,有效)由指令直接给出,有效地址只包含位移量地址只包含位移量。例:例:MOVAX,2000H默认的段寄存器是默认的段寄存器是DS,也可以在指令中使用也可以在指令中使用段超越前缀来指定段寄存器。段超越前缀来指定段寄存器。例:例:MOVAL,ES:2000H有效地址有效地址EA=2000H,

6、在指令中直接给出。在指令中直接给出。物理地址物理地址PA=(ES)10H+2000H3.18086/8088的寻址方式的寻址方式4、寄存器间接寻址、寄存器间接寻址操作数的地址在对应的寄存器中称为操作数的地址在对应的寄存器中称为寄存器间接寻址。寄存器间接寻址。EA取自取自基址寄存器基址寄存器BX,BP或或变址寄存器变址寄存器SI,DI 中的一个,操作数在有效地址对应的存储单元中。中的一个,操作数在有效地址对应的存储单元中。以以SI,DI,BX间接寻址间接寻址:默认默认操作数在操作数在数据段数据段DS中中以以BP间接寻址间接寻址:默认默认操作数在操作数在堆栈段堆栈段SS中中(可与可与DS等其他等其

7、他段寄存器形成段超越)段寄存器形成段超越)例例:MOVAX,BX若(若(DS)=1492H,(,(BX)=2000H则则EA=(BX)=2000H物理地址物理地址PA=14920H+2000H=16920H,执行(执行(AX)=(16920H)3.18086/8088的寻址方式的寻址方式5、变址寻址、变址寻址在寄存器间接寻址的基础上再加一个在寄存器间接寻址的基础上再加一个1616位的偏移量。位的偏移量。例:例:MOV AXMOV AX,SI+COUNT SI+COUNT 或或 MOV AX,COUNTSIMOV AX,COUNTSI若若COUNT=3000HCOUNT=3000H,(DSDS)

8、=3000H=3000H(SISI)=2000H=2000H,则物理地址则物理地址=35000H=35000HEA=3000H+2000H =5000HPA=30000H+5000H =35000H3.18086/8088的寻址方式的寻址方式、基址加、基址加变址寻址变址寻址EAEA=基址寄存器(基址寄存器(BXBX或或BPBP)变址寄存器(变址寄存器(SISI或或DIDI)1616位偏移量位偏移量若用若用BX:BX:默认操作数在数据段默认操作数在数据段DSDS中中 若用若用BP:BP:默认操作数在堆栈段默认操作数在堆栈段SSSS中中例:例:MOVAX,BX+DI+63.18086/8088的寻

9、址方式的寻址方式寻址方式的书写格式寻址方式的书写格式1、在方括号内部允许有一个或两个寄存器的名字,、在方括号内部允许有一个或两个寄存器的名字,如果一对方括号内部有基址寄存器和变址寄存器,如果一对方括号内部有基址寄存器和变址寄存器,使用使用“”作为连接。作为连接。2、在方括号内部允许有位移量,使用或、在方括号内部允许有位移量,使用或号作为号作为连接符号。连接符号。3、在方括号外部允许有位移量,可以在左边或右边。、在方括号外部允许有位移量,可以在左边或右边。MOVAX,BX+SI+6MOVAX,BX+SI6 MOVAX,6BX+SI MOVAX,BXSI6 MOVAX,BX+6SI3.28086/

10、8088的指令系统的指令系统Intel 8086/8088Intel 8086/8088指令系统共有指令系统共有117117条基本指条基本指令,可分成令,可分成6 6个功能组个功能组:数据传送类指令数据传送类指令 算术运算类指令算术运算类指令 逻辑运算类指令逻辑运算类指令 串操作类指令串操作类指令 控制转移类指令控制转移类指令 处理器控制类指令处理器控制类指令3.2.1数据传送指令数据传送指令1数据传送数据传送MOV指令指令一般格式一般格式:MOVOPRD1,OPRD2MOV是操作码,是操作码,OPRD1和和OPRD2分别是目的分别是目的操作数和源操作数。操作数和源操作数。功能:功能:完成数据

11、传送完成数据传送具体来说,一条具体来说,一条MOV数据传送指令能实现:数据传送指令能实现:CPU内部寄存器之间数据的任意传送内部寄存器之间数据的任意传送(除了代码除了代码段寄存器段寄存器CS和指令指针和指令指针IP以外以外)。MOVAL,BL;字节传送字节传送MOVCX,BX;字传送字传送MOVDS,BX3.2.1数据传送指令数据传送指令立即数传送至立即数传送至CPU内部的通用寄存器组内部的通用寄存器组(即即AX、BX、CX、DX、BP、SP、SI、DI),MOVCL,4MOVAX,03FFHMOVSI,057BHCPU内部寄存器内部寄存器(除了除了CS和和IP以外以外)与存储器与存储器(所有

12、寻址所有寻址方式方式)之间的数据传送。之间的数据传送。MOVAL,2000HMOVAX,SIMOVDI,CXMOVSI,BLOCKBPMOVDS,DATASI+BXMOVDESTBP+DI,ES3.2.1数据传送指令数据传送指令能实现用立即数给存储单元赋值能实现用立即数给存储单元赋值MOVBYTEPTR2000H,25HMOVWORDPTRSI,35H立即数立即数段寄存器段寄存器 DS ES SS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器3.2.1数据传送指令数据传送指令对于对于MOV 指令应注意几

13、个问题:指令应注意几个问题:MOVMOV传送指令中,不允许对传送指令中,不允许对CSCS和和IPIP进行操作;进行操作;两个存储器操作数之间不允许直接进行信息传送;两个存储器操作数之间不允许直接进行信息传送;如我们需要把地址如我们需要把地址(即段内的地址偏移量即段内的地址偏移量)为为2000H2000H的的存储单元的内容,传送至同一段内的地址为存储单元的内容,传送至同一段内的地址为3000H3000H的的存储单元中去,存储单元中去,MOVMOV指令不能直接完成这样的传送,指令不能直接完成这样的传送,但我们可以但我们可以CPUCPU内部寄存器为桥梁来完成这样的传送:内部寄存器为桥梁来完成这样的传

14、送:MOV ALMOV AL,2000H;2000H;MOV 3000H MOV 3000H,ALAL3.2.1数据传送指令数据传送指令 两个段寄存器之间不能直接传送信息,也不允两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;许用立即寻址方式为段寄存器赋初值;(X)(X)MOV DS,100H;MOV DS,100H;(X)(X)MOV DS,ES;MOV DS,ES;目的操作数,不能用立即寻址方式。目的操作数,不能用立即寻址方式。MOVMOV指令不影响标志位指令不影响标志位3.2.1数据传送指令数据传送指令2堆栈指令堆栈指令堆栈:就是一个按后进先出堆栈:就是一个按后

15、进先出(LIFO)的原则组的原则组织的一般内存区域即堆栈段。用织的一般内存区域即堆栈段。用SS指指示段地址。堆栈指针示段地址。堆栈指针SP总是指向栈总是指向栈顶(最后压入的数的地址)。顶(最后压入的数的地址)。SP的初的初值规定了所用堆栈的大小(堆栈的深值规定了所用堆栈的大小(堆栈的深度),一个度),一个 栈的深度最大为栈的深度最大为64kB。堆栈用途堆栈用途:临时存放数据临时存放数据传递参数传递参数保存和恢复寄存器保存和恢复寄存器LIFO3.2.1数据传送指令数据传送指令入栈指令入栈指令PUSH一般格式:一般格式:PUSHOPRD源操作数可以是源操作数可以是CPU内部的内部的16位通用寄存器

16、、段寄位通用寄存器、段寄存器(存器(CS除外)和内存操作数(所有寻址方式)。除外)和内存操作数(所有寻址方式)。入栈操作对象必须是入栈操作对象必须是16位数。位数。功能:功能:将数据压入堆栈将数据压入堆栈执行步骤为:执行步骤为:SP=SP-1;SP=操作数高操作数高8位;位;SP=SP-1;SP=操作数低操作数低8位位3.2.1数据传送指令数据传送指令例:例:PUSHBX执行过程为:执行过程为:SP=SP-1,SP=BH;SP=SP-1,SP=BL 3.2.1数据传送指令数据传送指令(2)出栈指令出栈指令POP一般格式:一般格式:POPOPRD目的操作数可以是目的操作数可以是CPU内部的内部的

17、16位通用寄存器、段位通用寄存器、段寄存器(寄存器(CS除外)和内存操作数(所有寻址方式)。除外)和内存操作数(所有寻址方式)。出栈操作对象必须是出栈操作对象必须是16位数。位数。功能:功能:将数据弹出堆栈将数据弹出堆栈执行步骤为:执行步骤为:操作数低操作数低8位位=SP;SP=SP1;操作数高操作数高8位位=SP;SP=SP+1;3.2.1数据传送指令数据传送指令3交换指令交换指令XCHG一般格式:一般格式:XCHGOPRD1,OPRD2功能:功能:完成数据交换。把一个字节或一个字的源操完成数据交换。把一个字节或一个字的源操作数与目作数与目的操作数相交换。交换能在的操作数相交换。交换能在通用

18、寄存器之通用寄存器之间、通用寄存器与存储器之间进行间、通用寄存器与存储器之间进行。但段寄存器和。但段寄存器和立即数不能作为一个操作数;立即数不能作为一个操作数;不能在存储器与存储不能在存储器与存储器之间对换数据器之间对换数据。例:例:XCHGAL,CLXCHGAX,DIXCHGBX,SIXCHGAX,2000HXCHGDATASI,DH3.2.1数据传送指令数据传送指令4累加器专用传送指令累加器专用传送指令 输入输出指令输入输出指令IN,OUTIN,OUTIN指令一般格式:指令一般格式:INAL,n;ALnINAX,n;AXn+1nINAL,DX;ALDXINAX,DX;AXDX+1DX功能:

19、功能:从从I/O端口输入数据至端口输入数据至AL或或AX.输入指令允许把一个字节或一个字输入指令允许把一个字节或一个字由一个输入端口传送到由一个输入端口传送到AL或或AX中。若端中。若端口地址超过口地址超过255时,则必须用时,则必须用DX保存端保存端口地址,这样用口地址,这样用DX作端口寻址最多可寻作端口寻址最多可寻找找64K个端口。个端口。80868086/8088/8088通过输通过输入输出指令与外设入输出指令与外设进行数据交换;呈进行数据交换;呈现给程序员的外设现给程序员的外设是端口(是端口(PortPort)即)即I/OI/O地址。地址。80888088的对外数据的对外数据线为线为8

20、 8位,只有字节位,只有字节传送指令传送指令。1616位位输入输出指输入输出指令中的端口地址只令中的端口地址只能取偶数能取偶数。3.2.1数据传送指令数据传送指令OUT指令一般格式:指令一般格式:OUTn,AL;ALnOUTn,AX;AXn+1nOUTDX,AL;ALDXOUTDX,AX;AXDX+1DX功能:功能:将将AL或或AX的内容输出至的内容输出至I/O端口。端口。该指令将该指令将AL或或AX中的内容传送到一个中的内容传送到一个输出端口。端口寻址方式与输出端口。端口寻址方式与IN指令相同。指令相同。3.2.1数据传送指令数据传送指令(2)查表转换指令)查表转换指令格式:格式:XLAT

21、XLAT 功能:功能:完成一个字节的查表转换:完成一个字节的查表转换:AL=AL=(DSDS)1616(BXBX)+(ALAL)要求:要求:寄存器寄存器ALAL的内容作为一个的内容作为一个256256字节的表的下标字节的表的下标;表的基地址在表的基地址在BXBX中,中,转换后的结果存放在转换后的结果存放在ALAL中。中。3.2.1数据传送指令数据传送指令例例:设设(DSDS)=A000H,=A000H,(BXBX)=0010H,=0010H,表表的的起起始始地地址址为为A0010HA0010H,表表中中放放数数字字0-90-9的的ASCIIASCII码码 MOVMOVBXBX,0010H001

22、0H MOV MOVALAL,06H06H XLAT XLAT 执行该程序后,(执行该程序后,(ALAL)=36H=36H本指令可用在数制转换、本指令可用在数制转换、函数表查表、函数表查表、代码转换等场合。代码转换等场合。A000A000:0010001030H30H31H31HA000A000:0016001636H36H3.2.1数据传送指令数据传送指令5地址传送指令(有三条地址传送指令)地址传送指令(有三条地址传送指令)LEA(Load Effective Address)LEA(Load Effective Address)一般格式:一般格式:LEA OPRD1LEA OPRD1,OP

23、RD2OPRD2功能:功能:把源操作数把源操作数OPRD2OPRD2的地址偏移量传送至目的的地址偏移量传送至目的 操作数操作数OPRD1OPRD1。要求:要求:源操作数必须是一个内存操作数,源操作数必须是一个内存操作数,目的操目的操作数必须是一个作数必须是一个1616位的通用寄存器。这条指令位的通用寄存器。这条指令通常用来建立串操作指令所须的寄存器指针。通常用来建立串操作指令所须的寄存器指针。例:例:LEA BXLEA BX,2000H2000H;把;把2000H2000H单元的偏移地址单元的偏移地址送到送到BX BX,即,即BX=2000HBX=2000H3.2.1数据传送指令数据传送指令L

24、DS(LoadpointerintoDS)一般格式:一般格式:LDSOPRD1,OPRD2功能:功能:完成一个地址指针的传送。地址指针完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。指令将段包括段地址部分和偏移量部分。指令将段地址送入地址送入DS,偏移量部分送入一个偏移量部分送入一个16位位的指针寄存器或变址寄存器。的指针寄存器或变址寄存器。要求:源操作数是一个内存操作数,目的操要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器或变址寄存器。作数是一个通用寄存器或变址寄存器。3.2.1数据传送指令数据传送指令例:例:LDSSI,BX;其中;其中(BX)=2000H;本指令将

25、把本指令将把BX所指的所指的32位地址指针位地址指针的段地址部分送入的段地址部分送入DS,偏移量部分送入偏移量部分送入SI。DS:200020200169200273200320DS=0B10H,执行执行LDSSI,BXSI=6920HDS=2073H3.2.1数据传送指令数据传送指令LES(LoadpointerintoES)一般格式:一般格式:LESOPRD1,OPRD2这条指令除将地址指针的段地址部分送入这条指令除将地址指针的段地址部分送入ES外,与外,与LDS类似。类似。例如:例如:LESDI,BX3.2.1数据传送指令数据传送指令6标志寄存器传送(有四条标志传送指令)标志寄存器传送(

26、有四条标志传送指令)LAHF(LOADAHWITHFLAG)将标志寄存器中的将标志寄存器中的S、Z、A、P和和C(即低(即低8位)传送至位)传送至AH寄存器的指定位,空位寄存器的指定位,空位没有定义。没有定义。SAHF(STOREAHWITHFLAG)将寄存器将寄存器AH的指定位,送至标志寄存器的的指定位,送至标志寄存器的S、Z、A、P和和C位。根据位。根据AH的内容,影的内容,影响上述标志位,对响上述标志位,对O、D和和I无影响。无影响。3.2.1数据传送指令数据传送指令PUSHF(PUSHFLAG)将标志寄存器压入堆栈顶部,同时修改堆栈将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志

27、位。指针,不影响标志位。POPF(POPFLAG)堆栈顶部的一个字,传送到标志寄存器,同堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。时修改堆栈指针,影响标志位。3.2.2算术运算指令算术运算指令80868088提供加、减、乘、除四种基本算术操提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。带符号数用补码表于带符号数与无符号数的运算。带符号数用补码表示。同时示。同时80868088也提供了各种校正操作,故也提供了各种校正操作,故可以进行十进制算术运算。可以进行十进制算术运算。

28、参与加、减运算的操作数可如下图所示:参与加、减运算的操作数可如下图所示:3.2.2算术运算指令算术运算指令1加法指令加法指令(Addition)一般形式:一般形式:ADDOPRD1,OPRD2;不带进位的加法不带进位的加法功能:功能:OPRD1OPRD1+OPRD2完成两个操作数相加,结果送至目的操作数完成两个操作数相加,结果送至目的操作数OPRD1。目的操目的操作数可以是累加器,任一通用寄存器以及存储器操作数。作数可以是累加器,任一通用寄存器以及存储器操作数。例:例:ADDAL,30;累加器与立即数相加;累加器与立即数相加ADDBX,3000H;通用寄存器与存储单元内容相加;通用寄存器与存储

29、单元内容相加ADDDI,CX;通用寄存器之间;通用寄存器之间ADDDX,DATABX+SI;通用寄存器与存储单元内容相加;通用寄存器与存储单元内容相加ADDBETASI,DX;存储器操作数与寄存器相加;存储器操作数与寄存器相加这些指令对标志位这些指令对标志位CF、OF、PF、SF、ZF和和AF有影响。有影响。3.2.2算术运算指令算术运算指令一般形式:一般形式:ADCOPRD1,OPRD2;带进位的加法带进位的加法功能:功能:OPRD1OPRD1+OPRD2+CF这条指令与上这条指令与上条指令类似,只是在两个操作数相加时,要条指令类似,只是在两个操作数相加时,要把进位标志把进位标志CF的现行值

30、加上去,结果送至目的操作数。的现行值加上去,结果送至目的操作数。ADC指令主要用于多字节运算中。指令主要用于多字节运算中。例:若有两个四字节的数,已分别放在自例:若有两个四字节的数,已分别放在自FIRST和和SECOND开开始的存储区中,每个数占四个存储单元。存放时,最低字节始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最低处,则可用以下程序段实现相加。在地址最低处,则可用以下程序段实现相加。MOVAX,FIRSTADDAX,SECOND;进行字运算进行字运算MOVTHIRD,AXMOVAX,FIRST+2ADCAX,SECOND+2MOVTHIRD+2,AX这条指令对标志位的影响

31、与这条指令对标志位的影响与ADD相同。相同。3.2.2算术运算指令算术运算指令一般形式一般形式:INCOPRD;增量指令增量指令功能功能:OPRDOPRD+1完成对指定的操作数完成对指定的操作数OPRD加加1,然后返回此,然后返回此操作数。此指令主要用于在循环程序中修改地操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。址指针和循环次数等。这条指令执行的结果影响标志位这条指令执行的结果影响标志位AF、OF、PF、SF和和ZF,而对进位标志而对进位标志CF没有影响。没有影响。如:INCAL INCBYTEPTRBX.2.2算术运算指令算术运算指令2减法指令减法指令(Subtractio

32、n)一般形式一般形式:SUBOPRD1,OPRD2;不考虑借位不考虑借位功能功能:OPRD1OPRD1-OPRD2完成两个操作数相减,即从完成两个操作数相减,即从OPRD1中减去中减去OPRD2,结果放在结果放在OPRD1中。中。例:例:SUBCX,BXSUBBP,CL指令对标志位指令对标志位AF、CF、OF、PF、SF和和ZF都有影响。都有影响。例例说明执行说明执行“MOVBX,4336H;SUBBX,0136H”后对标志位的影响。后对标志位的影响。解:解:4336H=0100001100110110;(-0136H)原原=1000000100110110;(-0136H)补补=111111

33、101100101001000011001101100100001100110110+1111111011001010-000000010011011001000010000000000100001000000000结果对比发现:两种计算结果值相同,标志位结果对比发现:两种计算结果值相同,标志位OF=ZF=SF=0,PF=1也相同,也相同,但但CF、AF却相反,标志却相反,标志CF=0,AF=0的值正确的;所以若采用补码求和的值正确的;所以若采用补码求和代替减法运算,要把代替减法运算,要把CF、AF的结果值求反后作为最终结果,而其他值保的结果值求反后作为最终结果,而其他值保持不变。持不变。3.

34、2.2算术运算指令算术运算指令一般形式一般形式:SBBOPRD1,OPRD2;考虑借位考虑借位功能功能:OPRD1OPRD1-OPRD2-CF这条指令与这条指令与SUB类似,只是在两个操作数相减时,还要减类似,只是在两个操作数相减时,还要减去借位标志去借位标志CF的现行值的现行值指令对标志位指令对标志位AF、CF、OF、PF、SF和和ZF都有影响。都有影响。同同ADC指令一样,本指令主要用于多字节操作数相减。指令一样,本指令主要用于多字节操作数相减。注意:若两个带符号数采用补码运算时,若注意:若两个带符号数采用补码运算时,若CS表示最高表示最高位(符号位)的进位(对加法)或借位(对减法)位(符

35、号位)的进位(对加法)或借位(对减法)(有进有进位或者借位时位或者借位时CS=1,否则为,否则为0);而);而CP表示数值部分最表示数值部分最高位的进位(对加法)或借位(对减法)(有进位或者借高位的进位(对加法)或借位(对减法)(有进位或者借位时位时CP=1,否则为,否则为0);当);当CS不等于不等于CP时,结果产生溢时,结果产生溢出出(OF=1),否则不产生溢出,否则不产生溢出(OF=0),即,即OFCSCP。3.2.2算术运算指令算术运算指令形式形式:DECOPRD;减量减量 功能功能:OPRDOPRD-1对指令的操作数减对指令的操作数减1,然后送回此操作数,在相,然后送回此操作数,在相

36、减时,把操作数作为一个无符号二进制数来对待。减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志指令执行的结果,影响标志AF、OF、PF、SF和和ZF但对但对CF标志不影响标志不影响(即保持此指令以前的即保持此指令以前的值值)。例:例:DECBYTEPTRSIDECCL3.2.2算术运算指令算术运算指令形式形式:NEGOPRD;求求补补 功能功能:(NEGDate)对操作数对操作数OPRD取补取补:相当于相当于用零减去操数,再把结果送回操作数。用零减去操数,再把结果送回操作数。(也就是已知负数的补码求负数原码的绝对值或已(也就是已知负数的补码求负数原码的绝对值或已知负数原码的绝

37、对值求其补码的运算。)知负数原码的绝对值求其补码的运算。)例:例:NEGAL若若AL00111100,则取补后为则取补后为11000100(即(即00000000011110011000100,也就是求绝对值,也就是求绝对值为为00111100的负数的补码)的负数的补码)若在字节操作时对若在字节操作时对-128-128,或在字操作时对,或在字操作时对-32768-32768取补,则操作数没变化,但标志取补,则操作数没变化,但标志OFOF置位。此指令影置位。此指令影响标志响标志AFAF、CFCF、OFOF、PFPF、SFSF和和ZFZF。此指令的结果一此指令的结果一般总是使标志般总是使标志CF=

38、1CF=1(总有借位),除非在操作数为总有借位),除非在操作数为零时,才使零时,才使CF=0CF=0。3.2.2算术运算指令算术运算指令形式形式:CMPOPRD1,OPRD2(比较指令)比较指令)功能功能:OPRD1-OPRD2比较指令完成两个操作数相减,比较指令完成两个操作数相减,使结果反映在标志位上,但并使结果反映在标志位上,但并不送回结果不送回结果(即不带回送的减法即不带回送的减法)。例:例:CMPAL,100CMPDX,DI比较指令主要用于比较两个数比较指令主要用于比较两个数之间的关系。在比较指令之后,之间的关系。在比较指令之后,根据根据ZF标志即可判断两者是否标志即可判断两者是否相等

39、。相等。相等的比较相等的比较:若两者相等,相减以后结若两者相等,相减以后结果为零,果为零,ZFZF标志为标志为1 1,否则,否则为为0 0。若两者不相等,则可在比若两者不相等,则可在比较指令之后利用其它标志位较指令之后利用其它标志位的状态来确定两者的大小。的状态来确定两者的大小。大小的比较大小的比较:如果是两个如果是两个无符号数无符号数(如(如CMPCMPAXAX,BXBX)进行比较,进行比较,则可以根据则可以根据CFCF标志的状态判标志的状态判断两数大小。若结果没有产断两数大小。若结果没有产生借位生借位(CF=0)(CF=0),显然显然AXBXAXBX;若产生了借位(即若产生了借位(即CFC

40、F1 1),则),则AXAXBXBX。3.2.2算术运算算术运算指令带符号数比较:带符号数比较:例:比较例:比较54与与24的大小的大小解:解:54-24=54+(-24)-24补补=11101000,54补补=0011011000110110+11101000100011110OF=0,SF=0,则被减数则被减数减数,即减数,即5424例:比较例:比较120与与-74的大小的大小解:解:120-(-74)=120+7401111000-01001010011000010OF=1,SF=1,则被减数则被减数减数,即减数,即120-74对有符号数对有符号数的比较操作,的比较操作,若与若与的值相同

41、,则的值相同,则被减数大于等被减数大于等于减数大,否于减数大,否则被减数小于则被减数小于减数小减数小.3.2.2算术运算算术运算指令例:比较例:比较24与与54的大小的大小解:解:24-54=24+(-54)0001100024的补码的补码+11001010-54的补码的补码11100010OF=0,SF=1,则被减数则被减数减数,即减数,即2454例:比较例:比较-24与与120的大小的大小解:解:-24-120=-24补补+-120补补11101000=-24补补+10001000=-120补补101110000OF=1,SF=0,则则被减数被减数减数,即减数,即-24)()JAE/JNB

42、OPRD高于等于或不低于转移高于等于或不低于转移(=)JB/JNAEOPRD小于或不大于等于转移小于或不大于等于转移()JBE/JNAOPRD小于等于或不大于转移小于等于或不大于转移()JGE/JNLOPRD高于等于或不低于转移高于等于或不低于转移(=)JL/JNGEOPRD小于或不大于等于转移小于或不大于等于转移()JLE/JNGOPRD小于等于或不大于转移小于等于或不大于转移(=)带符号数比较转移指令带符号数比较转移指令 3.2.5.1转移指令测试转移指令测试转移指令JCXZ OPRD :CX=0 时转移时转移 这一条指令主要与循环控制指令(这一条指令主要与循环控制指令(LOOP)混合使用

43、,以实现混合使用,以实现程序中的循环结构。程序中的循环结构。因为循环指令中使用因为循环指令中使用CX寄存器作为计数器实现计数循环,寄存器作为计数器实现计数循环,但但LOOP指令不允许指令不允许CX的初始值为零,所以往往使用此指令的初始值为零,所以往往使用此指令放在循环指令前。放在循环指令前。例:例:JCXZOUTJMPLOOP3.2.5.2子程序调用和返回指令子程序是完成特定功能子程序是完成特定功能的一段程序的一段程序当主程序(调用程序)当主程序(调用程序)需要执行这个功能时,需要执行这个功能时,采用采用CALL调用指令转调用指令转移到该子程序的起始处移到该子程序的起始处执行执行当运行完子程序

44、功能后,当运行完子程序功能后,采用采用RET返回指令回到返回指令回到主程序继续执行主程序继续执行CALLlabelRET主程序主程序子程序子程序3.2.5.2子程序调用和返回指令1.调用指令调用指令(1)(1)段内调用:段内调用:CALLNEARPTROPRD 操作:操作:SP=SP-2,(IP)(IP)(SP)+1),(),(SP),),IP=IP+16位位移量位位移量CALL指令首先将当前指令首先将当前IP内容压入堆栈内容压入堆栈,然后转入子程序。然后转入子程序。(2)段间调用:段间调用:CALLFARPTROPRD 操作:操作:SP=SP-2SP=SP-2,(,(SPSP)+1+1),(

45、),(SPSP)=CS=CS;SP=SP-2SP=SP-2,(,(SPSP)+1+1),(),(SPSP)=IP=IP;IP=(EA)IP=(EA);CS=(EA+2)CS=(EA+2)CALL CALL指令先把指令先把CSCS压入堆栈,再把压入堆栈,再把IPIP压入堆栈,压入堆栈,然后转入子程序。然后转入子程序。例:例:CALLNEARBX;段内调用段内调用CALLFAR1000;段间调用段间调用3.2.5.2子程序调用和返回指令2.返回返回指令指令(1)段内返回段内返回:RETIPSS:SP,SPSP2从栈顶弹出一个字送到从栈顶弹出一个字送到IP,栈顶指针栈顶指针SP+2(2)段间返回段间

46、返回:RET,RETFIPSS:SP,SPSP2CSSS:SP,SPSP2从栈顶弹出第一个字送到从栈顶弹出第一个字送到IP,SP+2,再弹出一个字送到再弹出一个字送到CS,SP+2(3)RETn与与RET相同,相同,SP+2(4)后,再使后,再使SP加上加上n3.2.5.3循环控制指令循环控制指令 对于需要重复进行的操作,微机系统可用循环程序结构来进行,对于需要重复进行的操作,微机系统可用循环程序结构来进行,8086/8088系统为了简化程序设计,设置了一组循环指令,系统为了简化程序设计,设置了一组循环指令,这组指令主要对这组指令主要对CX或标志位或标志位ZF进行测试,确定是否循环进行测试,确

47、定是否循环 指令格式指令格式执行操作执行操作LOOPOPRDCX=CX-1;若;若CX0,则循环则循环LOOPNZ/LOOPNEOPRDCX=CX-1,若若CX 0且且ZF=0,则则循环循环LOOPZ/LOOPEOPRDCX=CX-1,若若CX0且且ZF=1,则循则循环环3.2.5.3循环控制指令 例例:有一首地址为有一首地址为ARRAY的的M个字数组,试编写一段程序,个字数组,试编写一段程序,求出该数组的内容之和(不考虑溢出),并把结果存入求出该数组的内容之和(不考虑溢出),并把结果存入TOTAL中,程序段如下:中,程序段如下:MOVCX,M;设计数器初值设计数器初值MOVAX,0;累加器初

48、值为累加器初值为0MOVSI,AX;地址指针初值为地址指针初值为0START:ADDAX,ARRAYSIADDSI,2;修改指针值(字操作,因此加修改指针值(字操作,因此加2)LOOPSTART;重复重复MOVTOTAL,AX;存结果;存结果 3.2.5.4中断指令中中断断(Interrupt)是是又又一一种种改变程序执行顺序的方法改变程序执行顺序的方法.中断请求可以来自处理器外中断请求可以来自处理器外部的中断源,也可以由处理部的中断源,也可以由处理器执行指令引起例如执行器执行指令引起例如执行INT20H指令。指令。8086可以管理可以管理256个中断个中断.各各种种中中断断用用一一个个向向量

49、量编编号号来来区别区别.中中 断断 向向 量量 表表(0:00:3FFH)存存放放中中断断程程序序的的入入口地址。口地址。中断请求中断请求断点断点IRET主程序主程序中断服务程序中断服务程序3.2.5.4中断指令软件中断指令格式软件中断指令格式:INTn操作:操作:(1)标志寄存器压入堆栈;标志寄存器压入堆栈;(SP-2)(2)清中断允许标志清中断允许标志IF及单步跟踪及单步跟踪TF(3)将主程序下一条指令地址(断点地址)的段值及偏移量入将主程序下一条指令地址(断点地址)的段值及偏移量入栈栈;(SP-4)(4)将存放在地址为将存放在地址为0:(n*4)处的处的中断程序的入口地址从中断程序的入口

50、地址从中断向中断向量表中读出,并放入量表中读出,并放入IP及及CS,CPU转入转入中断服务程序。中断服务程序。软件中断返回格式软件中断返回格式:IRET操作:从堆栈恢复断点地址操作:从堆栈恢复断点地址;恢复标志寄存器内容恢复标志寄存器内容3.2.5.4中断指令软件中断有软件中断有:除法错中断除法错中断:执行除法指令,结果溢出产生的:执行除法指令,结果溢出产生的0号中断号中断(相当于相当于INT00H)。指令中断指令中断:执行中断调用指令:执行中断调用指令INTn产生的产生的n号中断。号中断。断点中断断点中断:用于断点调试(:用于断点调试(INT3)的的3号中断。号中断。溢出中断溢出中断:执行溢

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁