第3章 Pentium的指令系统.ppt

上传人:豆**** 文档编号:50476811 上传时间:2022-10-15 格式:PPT 页数:121 大小:4.79MB
返回 下载 相关 举报
第3章 Pentium的指令系统.ppt_第1页
第1页 / 共121页
第3章 Pentium的指令系统.ppt_第2页
第2页 / 共121页
点击查看更多>>
资源描述

《第3章 Pentium的指令系统.ppt》由会员分享,可在线阅读,更多相关《第3章 Pentium的指令系统.ppt(121页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第3章章 Pentium的指令的指令系统系统指令有单操作数、双操作数和无操作数之分。指令有单操作数、双操作数和无操作数之分。如果是双操作数指令,要用逗号将两个操作数分开,如果是双操作数指令,要用逗号将两个操作数分开,逗号右边的操作数称为逗号右边的操作数称为源操作数源操作数,逗号左边的为,逗号左边的为目目的操作数的操作数。MOV AX,BX源操作数源操作数操作码操作码目的操作数目的操作数两操作数用逗号隔开两操作数用逗号隔开MOV功能:将功能:将BX中的源操作数中的源操作数AX(目的)(目的)而象单操作数指令而象单操作数指令 INC AX 其中其中AX既是源操作数,又是目的操作数,其既是源操作数

2、,又是目的操作数,其功能是:功能是:AX+1AX。前面举的例子都是操作数在寄存器中,操作数前面举的例子都是操作数在寄存器中,操作数还可以在存储器或还可以在存储器或I/O端口中,也可以是立即数。端口中,也可以是立即数。3.1 Pentium的寻址方式的寻址方式l1立即数寻址立即数寻址l2寄存器寻址寄存器寻址l3输入输入/输出端口寻址输出端口寻址l4存储器寻址存储器寻址寻址方式:按什么方式方法找到操作数寻址方式:按什么方式方法找到操作数 所在地址所在地址一、立即数寻址方式一、立即数寻址方式 操作数直接包含在指令中,它是一个操作数直接包含在指令中,它是一个8位或位或16位位的常整数,也叫立即数。的常

3、整数,也叫立即数。例如例如 MOV AL,30H MOV AX,0FFFCH MOV EAX,10002000H注意:注意:1.常数以常数以AF开头时,应在其前加开头时,应在其前加0,以区别其,以区别其 它符号(如它符号(如0FFFCH)。)。2.立即数只能作源操作数,不能作目的操作数。立即数只能作源操作数,不能作目的操作数。(如(如MOV 23H,BL )操作码操作码二、寄存器寻址方式二、寄存器寻址方式 操作数包含在寄存器中。操作数包含在寄存器中。如如:MOV ECX,EAXINC CXROL AH,1注意:注意:源操作数的长度必须与目的操作数一致。源操作数的长度必须与目的操作数一致。对于对

4、于16位操作数,寄存器可以是位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP;对于;对于8位操作数,寄存器可以是位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL。CPU和外部设备都是通过和外部设备都是通过I/O端口来传输数据,涉端口来传输数据,涉及及直接寻址直接寻址和和间接寻址间接寻址两种方式。两种方式。1)I/O直接寻址直接寻址 I/O端口的地址直接在指令中提供端口的地址直接在指令中提供如:如:INAL,82H OUT80H,AXINEAX,80H三、输入三、输入/输出端口寻址输出端口寻址2)I/O间接寻址、间接寻址、先在先在DX中设置好中设置好I/O

5、端口的地址,端口的地址,I/O指令用指令用DX寄存器间接寻址寄存器间接寻址如:如:INAL,DXOUTDX,AXOUTDX,EAX注意:注意:1、I/O直接寻址范围:直接寻址范围:0-255,最大端口号,最大端口号FFH 2、I/O间接寻址范围:间接寻址范围:0-65533,最大端口号,最大端口号FFFFH,且只能用,且只能用DX寄存器。寄存器。四、直接寻址方式(存储器寻址)四、直接寻址方式(存储器寻址)EA=基址基址变址变址比例因子比例因子位移量位移量存储单元的地址由段基址和偏移量组成,段基址存储单元的地址由段基址和偏移量组成,段基址不许经常改变,所以寻址实际是确定偏移量,即不许经常改变,所

6、以寻址实际是确定偏移量,即有效地址有效地址EA有效地址的基础量,任何有效地址的基础量,任何通用寄存器都可作基址寄通用寄存器都可作基址寄存器,其内容为基址。存器,其内容为基址。常用的变址寄存器为常用的变址寄存器为DI,SI,EDI和和ESI;比例因;比例因子可为子可为1、2、4、8操作码后面的数,可以是操作码后面的数,可以是32位、位、16位或者位或者8位位l1)直接寻址)直接寻址l2)寄存器间接寻址)寄存器间接寻址l3)寄存器相对寻址)寄存器相对寻址l4)基址加变址的寻址方式)基址加变址的寻址方式 l5)相对的基址加变址的寻址方式)相对的基址加变址的寻址方式 l6)相对的带比例因子的变址寻址)

7、相对的带比例因子的变址寻址l7)基址加比例因子的变址寻址)基址加比例因子的变址寻址l8)相对的基址加比例因子的变址寻址)相对的基址加比例因子的变址寻址1、直接寻址、直接寻址lEA由指令直接指出,所以,直接寻址是由指令直接指出,所以,直接寻址是对存储器访问的最简单方式。对存储器访问的最简单方式。l如:如:MOV AX,1070HMOV EAX,ES:1000H将将DS段的段的1070H和和1071H两两单元的内容送单元的内容送AX50H30H2、寄存器间接寻址、寄存器间接寻址lEA由寄存器指出。由寄存器指出。(1)MOVAX,BX MOVEAX,EBX MOVEAX,BP(2)MOVCX,ES:

8、BX注:注:(1)SI、DI、ESI、EDI称为变址寄存器,通常称为变址寄存器,通常用于对数组元素操作及串操作指令。用于对数组元素操作及串操作指令。(2)BP、SP、EBP和和ESP的默认段为的默认段为SS,其它,其它寄存器的默认段为寄存器的默认段为DS(3)对非默认段寻址,必须在指令前用前缀指)对非默认段寻址,必须在指令前用前缀指出段寄存器名出段寄存器名BAH89H3、寄存器相对寻址、寄存器相对寻址EA为寄存器中内容和指令中给出的位移量的和。为寄存器中内容和指令中给出的位移量的和。寄存器相对寻址方式的寄存器相对寻址方式的EA计算计算例例 MOV BX,COUNTSIMOV BX,SI+COU

9、NT设设DS=3000H,SI=2000H,位移量,位移量COUNT=4000H,(,(36000H)=5678H则物理地址则物理地址=DS16+SI+COUNT=36000H 寄存器相对寻址方式也允许使用段超越前缀,寄存器相对寻址方式也允许使用段超越前缀,如如MOV BX,ES:COUNTDI则段地址为则段地址为ES,物,物理地址理地址=ES16+DI+COUNT。4、基址加变址的寻址方式、基址加变址的寻址方式EA是基址寄存器(是基址寄存器(BX、BP、EBX和和EBP)内容和)内容和变址寄存器(变址寄存器(SI、DI、ESI和和ESI)的内容之和。)的内容之和。若基址寄存器若基址寄存器BP

10、或或EBP时,默认段寄存器为时,默认段寄存器为SS,其它默认,其它默认DS基址变址寻址方式的基址变址寻址方式的EA计算计算注意:没有注意:没有例例 MOV AX,BXSI MOV AX,BX+SI设设DS=3000H,BX=1200H,SI=0500H,(31700H)=ABCDH则物理地址则物理地址=DS16+BX+SI =30000H+1200H+0500H =31700H指令执行后,指令执行后,AX=ABCDH5、相对的基址加变址的寻址方式、相对的基址加变址的寻址方式用基址加变址寻址时,加一个位移量即成为相对的用基址加变址寻址时,加一个位移量即成为相对的基址加变址寻址。基址加变址寻址。相

11、对基址变址寻址方式的相对基址变址寻址方式的EA计算计算例例 MOV AX,MASKBXSI MOV AX,MASKBX+SI MOV AX,MASK+BX+SI设设 DS=2000H,BX=1500H,SI=0300H,MASK=0200H,(,(21A00H)=1234H则物理地址则物理地址=DS16+BX+SI+MASK =20000H+1500H+0300H+0200H =21A00H指令执行后,指令执行后,AX=1234H补充习题补充习题l1.试指出下列指令中的源操作数与目的操作数寻址方试指出下列指令中的源操作数与目的操作数寻址方式:式:(1)MOV SI,100 (2)MOV BP,

12、AX (3)MOV SI,100H (4)MOV BP,SI (5)MOV BX100,DI (6)OUT DX,EAXl2.设有关寄存器和存储单元的内容为:设有关寄存器和存储单元的内容为:(DS)=2000H,(BX)=0100H,(SI)0002H,(20100H)12H,(20101H)34H,(20102H)56H,(20103H)78H,(21200H)2AH,(21201H)4CH,(21202H)0B7H,(21203H)65H。试说明下列指令执行后,试说明下列指令执行后,AX寄存器的内容?并指出源寄存器的内容?并指出源操作数的寻址方式。操作数的寻址方式。(1)MOV AX,12

13、00H (2)MOV AX,BX (3)MOV AX,1200H (4)MOV AX,BX (5)MOV AX,1100H BX (6)MOV AX,BXSI (7)MOV AX,1100H BXSI3.2 Pentium的指令系统的指令系统1 1、传送指令、传送指令2 2、算术运算指令、算术运算指令3 3、逻辑运算和移位指令、逻辑运算和移位指令4、串操作指令、串操作指令5 5、调用、调用/转移转移/循环控制循环控制/中断指令中断指令6 6、标志操作和处理器控制指令、标志操作和处理器控制指令7 7、条件测试和字节设置指令、条件测试和字节设置指令8 8、位处理指令、位处理指令9 9、系统管理指令

14、、系统管理指令1010、支持高级语言的指令、支持高级语言的指令3.2.1 传送指令传送指令1)1)通用传送指令通用传送指令 2 2)堆栈操作指令)堆栈操作指令3 3)交换指令)交换指令4 4)输入输出指令)输入输出指令5 5)换码指令)换码指令 6)6)地址传送指令地址传送指令 7)7)标志传送指令标志传送指令 返回返回1)1)通用传送指令通用传送指令(1)MOV(2)MOVZX(3)MOVSX若若(BL)=80H MOVZXEAX,BL 则则EAX=00000080H MOVSXEAX,BL 则则EAX=FFFFFF80H(1)MOV传送指令传送指令指令格式:指令格式:MOV 目的,源目的,

15、源指令功能:将源操作数(一个字节或一个字)传送指令功能:将源操作数(一个字节或一个字)传送到目的操作数。到目的操作数。MOV指令允许传送数据的途径指令允许传送数据的途径CPU内部寄存器内部寄存器之间的数据传送之间的数据传送MOV指令指令可实现:可实现:MOV AX,BXMOV BH,ALMOV AL,AHMOV指令允许传送数据的途径指令允许传送数据的途径寄存器与内存寄存器与内存之间的数据传送之间的数据传送MOV AX,1234HMOV BX,BXMOV BP,CXMOV指令允许传送数据的途径指令允许传送数据的途径将立即数将立即数寄存器寄存器 或内存单元或内存单元MOV AX,1234HMOV

16、WORD PTRDI,1000HMOV指令允许传送数据的途径指令允许传送数据的途径段寄存器与内存或寄存器段寄存器与内存或寄存器MOV DS,AXMOV DS,AXMOV ES,BX几点说明:几点说明:MOV 12H,AL MOV CS,1000H MOV IP,2000H MOV AX,IP 指令中,立即数不能作为目的操作数,指令中,立即数不能作为目的操作数,CS、IP和和EIP也不能作为目的操作数,即它们的值不能随也不能作为目的操作数,即它们的值不能随意修改。同时意修改。同时IP还不能作为源操作数。还不能作为源操作数。两个内存单元之间,以及两个段寄存器之间不两个内存单元之间,以及两个段寄存器

17、之间不能直接传送数据。能直接传送数据。MOV BX,1000HMOV DS,ES 立即数不能直接传送给段寄存器,必须通过寄存立即数不能直接传送给段寄存器,必须通过寄存器传送给段寄存器。器传送给段寄存器。MOV DS,2000H 要换成:要换成:MOV AX,2000HMOV DS,AX(其它寄存器也可)(其它寄存器也可)用用EBX、ESI、EDI、BX、SI和和DI间接寻址时,间接寻址时,默认段寄存器为默认段寄存器为DS,用,用EBP、ESP、BP和和SP间接寻间接寻址时,默认段寄存器为址时,默认段寄存器为SS。2 2)堆栈操作指令)堆栈操作指令l(1)PUSH/POPl(2)PUSHA/PO

18、PAl(3)PUSHAD/POPAD如:如:PUSHEAXPUSHBX+DIPUSHDWORD PTR EBX+ESIPUSHAPOPAPUAHADPOPADPUSH进栈指令进栈指令指令格式:指令格式:PUSH 源源指令功能:将源操作数压入堆栈。指令功能:将源操作数压入堆栈。源操作数可以是源操作数可以是16位通用寄存器、段寄存器或存位通用寄存器、段寄存器或存储器中的数据,但不能是立即数。储器中的数据,但不能是立即数。操作过程:先修改操作过程:先修改SP指针(指针(SP-2SP),然后把源操),然后把源操作数压入到作数压入到SP指向的位置,(低位字节指向的位置,(低位字节SP 高位字节高位字节S

19、P+1)1000H1002H旧旧SP新新SP例如例如 PUSH AX(假设,执行前(假设,执行前AX=1234H,SP=1002H)则执行后,堆栈内容如何变化?则执行后,堆栈内容如何变化?1234POP出栈指令出栈指令指令格式:指令格式:POP 目的目的指令功能:将当前指令功能:将当前SP和和SP+1所指向的单元内容所指向的单元内容目目的操作数。的操作数。源操作数可以是源操作数可以是16位通用寄存器、段寄存器或存位通用寄存器、段寄存器或存储器中的数据字,但储器中的数据字,但CS不能作为目的操作数。不能作为目的操作数。操作过程:先将操作过程:先将SP+1,SP中的内容送到目的操中的内容送到目的操

20、作数,(作数,(SP 目的低位字节目的低位字节 SP+1 目的高位字节目的高位字节)然后再修改然后再修改SP指针(指针(SP+2SP)。)。3 3)交换指令)交换指令l(1)字节、字和双字交换指令)字节、字和双字交换指令XCHGl(2)寄存器内部字节交换指令)寄存器内部字节交换指令BSWAP如:如:XCHG AL,BL XCHG BX,CX XCHG EAX,EDI XCHGESI,EBX若若EAX=0123 4567HlBSWAPEAX则则EAX=6745 2301H(1)XCHG交换指令交换指令指令格式:指令格式:XCHG 目的,目的,源源指令功能:把一个字或字节的源操作数和目的操作指令功

21、能:把一个字或字节的源操作数和目的操作数相交换。数相交换。几点说明:几点说明:段寄存器、段寄存器、IP、EIP、立即数不能作为操作数、立即数不能作为操作数XCHG AX,DSXCHG AX,1000HXCHG BX,IP 两个存储单元之间不能直接交换数据两个存储单元之间不能直接交换数据XCHG BX,1000HXCHG DI,BP目的和源操作数的长度必须一致目的和源操作数的长度必须一致XCHG BX,ALXCHG DL,CX4 4)输入输出指令)输入输出指令5 5)换码指令)换码指令 XLAT/XLATB XLAT/XLATBXLAT;AL (BX+AL)XLATB;AL (EBX+AL)00

22、011000000000110000010100001010+BX ALBX+0BX+1BX+AL指令格式:指令格式:XLAT 转换表转换表指令功能:将一个字节从一种代码转换成另一种代指令功能:将一个字节从一种代码转换成另一种代码。码。使用过程:使用过程:在内存中建立一个表格(这些数据就是转换以后在内存中建立一个表格(这些数据就是转换以后的代码)。的代码)。将表的首地址将表的首地址BX寄存器中(只能是寄存器中(只能是BX)在在AL中存放一个数据(就是需要转换的代码)中存放一个数据(就是需要转换的代码)执行执行XLAT指令,指令执行后,将转换后的代码指令,指令执行后,将转换后的代码(所查的字节内

23、容)就(所查的字节内容)就AL中。中。6)6)地址传送指令地址传送指令(1)LEALEAAX,3820LEABX,BP+SILEAESI,EBX+ECX+2008HLEAEDI,BX+2009H(2)LDS/LES/LSS/LFS/LGS LDSDI,2009HLESEDI,2009HLSSESP,EDX(1)LEA取有效地址指令取有效地址指令指令格式:指令格式:LEA 目的,源目的,源指令功能:取源操作数的偏移地址指令功能:取源操作数的偏移地址目的目的 即取存储器的有效地址送寄存器即取存储器的有效地址送寄存器要求:要求:源操作数必须是内存单元源操作数必须是内存单元 目的操作数必目的操作数必

24、须是一个须是一个16位的寄存器(段寄存器除外)位的寄存器(段寄存器除外)使用时,要注意与使用时,要注意与MOV指令的区别!指令的区别!51000H51002HDI=1000H1234例例3-35 设设DS=5000H,DI=1000H,(51000H)=1234H,则,则执行执行LEA AX,DI后,后,AX=1000H执行执行LEA BX,2000H后,后,BX=?执行执行MOV AX,DI后,后,AX=1234H与与OFFSET指令功能指令功能相同相同 7)7)标志传送指令标志传送指令(1)读取和设置低)读取和设置低8位标志指令位标志指令LAHF/SAHF(2)对标志寄存器的推入和弹出堆栈

25、指令)对标志寄存器的推入和弹出堆栈指令PUSHF/POPFPUSHFD/POPFD(1)LAHF,标志送到,标志送到AH指令指令指令格式:指令格式:LAHF指令功能:把标志寄存器的低指令功能:把标志寄存器的低8位位对应对应AHLAHF指令功能示意图指令功能示意图(2)SAHF,AH送到标志寄存器指令送到标志寄存器指令指令格式:指令格式:SAHF指令功能:把指令功能:把AH对应对应标志寄存器的低标志寄存器的低 8位,其高位,其高8位保持不变。位保持不变。SAHF指令功能示意图指令功能示意图(3)PUSHF,标志入栈指令标志入栈指令指令格式:指令格式:PUSHF指令功能:把整个标志寄存器的内容压入

26、堆栈,同指令功能:把整个标志寄存器的内容压入堆栈,同 时修改时修改SP(SP-2SP)(4)POPF,标志出栈指令标志出栈指令指令格式:指令格式:POPF指令功能:把当前堆栈指针指令功能:把当前堆栈指针SP所指的一个字,传送所指的一个字,传送 到标志寄存器,同时修改到标志寄存器,同时修改SP(SP+2SP)3.2.2 3.2.2 算术运算指令算术运算指令l1)加法类指令)加法类指令l2)减法类指令)减法类指令l3)乘法类指令)乘法类指令l4)除法类指令)除法类指令l5)类型转换指令)类型转换指令l6)BCD指令指令返回返回1.加法类指令加法类指令(1)ADD不带进位的加法指令不带进位的加法指令

27、 指令格式:指令格式:ADD 目的,源目的,源 指令功能:源指令功能:源+目的目的目的目的(2)ADC带进位的加法指令带进位的加法指令 指令格式:指令格式:ADC 目的,源目的,源 指令功能:源指令功能:源+目的目的+CF目的目的 源操作数:寄存器、存储器、立即数源操作数:寄存器、存储器、立即数 目的操作数:寄存器、存储器;目的操作数:寄存器、存储器;目的与源数据类型要一致;目的与源数据类型要一致;目的与源不能同时为存储器;目的与源不能同时为存储器;ADD AL,18H;AL+18HALADD DI,AL;AL+DS:DIDS:DI单元单元ADC CL,BL;BL+CL+CFCLADD AX,

28、BL ADC 2000H,BYTE PTRSI 加法指令影响标志位:加法指令影响标志位:CF,OF,PF,SF,ZF,AF例例3-41 求下列指令执行后,对标志位有何影响?求下列指令执行后,对标志位有何影响?MOV AL,5EH ADD AL,3CH指令执行后,指令执行后,ZF=0;AF=1;CF=0;SF=1;PF=1;OF=1;运算结果不为运算结果不为0,故零标志,故零标志ZF=0;低低4位向高位向高4位有进位,故辅助进位位有进位,故辅助进位AF=1;最高位最高位D7位没有向前产生进位,故位没有向前产生进位,故CF=0;因结果的最高位因结果的最高位D7位为位为1,故符号标志,故符号标志SF

29、=1;因结果中因结果中1的个数为偶数,故奇偶标志的个数为偶数,故奇偶标志PF=1;若把此两数当成是带符号数相加,由于是两正数相若把此两数当成是带符号数相加,由于是两正数相加,而结果却是负数(加,而结果却是负数(SF=1),出现这种情况的),出现这种情况的原因是原因是+94+(+60)=+154超过了超过了8位二进制符号数位二进制符号数的表示范围:的表示范围:-128+127,因此就产生了溢出错误,因此就产生了溢出错误,故故OF=1。(3 3)字交换加法指令)字交换加法指令)字交换加法指令)字交换加法指令XADDXADDlXADD DST,SRC功能功能:(DST)()(SRC)(DST)()(

30、DST)+(SRC)比如:比如:EAX=12345678H,而而2000H开始开始的内存单元处为的内存单元处为80000001H,执行指令执行指令XADD2000H,EAX则:则:EAX=80000001H2000H开始的内存单元处为开始的内存单元处为92345679H(4 4)增量指令)增量指令)增量指令)增量指令INCINClINCSRC 功能功能:(SRC)()(SRC)+1一般用在循环程序中修改指针和循环次数一般用在循环程序中修改指针和循环次数注意:注意:指令执行后影响指令执行后影响AF,OF,PF,SF和和ZF,但不影响但不影响CF。例例 INC BL;BL+1BL INC AX;A

31、X+1AX例例 INC BYTE PTRBX;内存字节内容增内存字节内容增1 INC WORD PTRBX;内存字内容增内存字内容增12.减法指令减法指令(1)SUB不带借位的减法指令不带借位的减法指令指令格式:指令格式:SUB 目的,源目的,源指令功能:目的指令功能:目的-源源目的目的(2)SBB带借位的减法指令带借位的减法指令指令格式:指令格式:SBB 目的,源目的,源指令功能:目的指令功能:目的-源源-CF目的目的 源操作数:寄存器、存储器、立即数源操作数:寄存器、存储器、立即数 目的操作数:寄存器、存储器;目的操作数:寄存器、存储器;目的与源数据类型要一致;目的与源数据类型要一致;目的

32、与源不能同时为存储器;目的与源不能同时为存储器;SUB AL,18H;AL-18HALSUB DI,AL;AL-DS:DIDS:DI单元单元SBB CL,BL;CL-BL-CFCLSUB AX,BL SBB 2000H,BYTE PTRSI 减法指令影响标志位:减法指令影响标志位:CF,OF,PF,SF,ZF,AF(3)DEC减量指令减量指令指令格式:指令格式:DEC 目的目的指令功能:目的指令功能:目的-1目的目的注意:注意:指令执行后影响指令执行后影响AF,OF,PF,SF和和ZF,但不影响但不影响CF。DEC AL假设指令执行前假设指令执行前AL=00H,则指令执行后,则指令执行后CF不

33、影响不影响例例3-50 DEC BL;BL-1BL DEC AX;AX-1AX(4)NEG取负指令(求补指令)取负指令(求补指令)指令格式:指令格式:NEG 目的目的指令功能:指令功能:0-目的目的目的目的(实际作用:求一个负数的补码形式。一个负数的(实际作用:求一个负数的补码形式。一个负数的补码补码=反码反码+1,指令,指令NEG的功能就相当于反码的功能就相当于反码+1;);)例例3-51 求求-5的的8位二进制数表示(即求其补码)位二进制数表示(即求其补码)解:解:按照补码定义求:补码按照补码定义求:补码=反码反码+1先求反码,即求先求反码,即求5的反码,而的反码,而5=0000 0101

34、B,所,所以以5的反码的反码=1111 1010B,所以,所以-5的补码的补码=1111 1010+1=1111 1011B,也就是说而把,也就是说而把1111 1011B当当成是一个成是一个8位有符号数,就代表位有符号数,就代表-5。利用利用NEG指令求指令求-5的补码:的补码:MOV AL,5 NEG AL;指令执行后;指令执行后AL=1111 1011B即就是即就是-5的补码。的补码。(5)CMP比较指令比较指令指令格式指令格式:CMP 目的,源目的,源指令功能指令功能:目的:目的-源,但结果不送回到目的操作数,源,但结果不送回到目的操作数,仅反映在标志位仅反映在标志位AF、CF、OF、

35、PF、SF和和ZF上。上。(6)比较并交换指令)比较并交换指令CMPXCHGCMPXCHG DST,SRC功能功能:比较比较 交换交换比如:比如:AL=11H,BL=24H,1000H=22H执行指令执行指令 CMPXCHG 1000H,BL则:则:AL=22H,BL=34H,1000H=22HZF=1ZF=0SRC DSTDST 累加器累加器(7)8字节比较指令字节比较指令CMPXCHG8BCMPXCHG8BDST功能功能:比较比较 交换交换比如:比如:EAX=1111 1111H,EBX=2222 2222H,ECX=3333 3333H,EDX=4444 4444H,设设DS段段1000

36、H所指单元开始的所指单元开始的8字节为字节为4444 4444 1111 1111H执行指令:执行指令:CMPXCHG8B 1000H比较结果比较结果ZF=1,1000H=3333 3333 2222 2222HZF=1ZF=0ECX:EBX DSTDST EDX:EAX3.乘法指令乘法指令(1)MUL无符号数乘法指令无符号数乘法指令指令格式:指令格式:MUL 源源指令功能:把源操作数和指令功能:把源操作数和累加器中的数累加器中的数都当成是无符都当成是无符号数,然后将两数相乘,源操作数可以是字节或字。号数,然后将两数相乘,源操作数可以是字节或字。指令功能细化:指令功能细化:若源操作数为字节类型

37、,则若源操作数为字节类型,则AL源源AX;若源操作数为字类型,则若源操作数为字类型,则 AX源源(DX,AX)例例3-56 MUL DL;ALDLAXMUL CX;AXCX(DX,AX)MUL BSI;AL字节单元内容字节单元内容AXMUL WBX;AX字单元内容字单元内容(DX,AX)其中,其中,B,W分别说明字节乘法和字乘法分别说明字节乘法和字乘法MUL指令指令执行后影响执行后影响CF和和OF标志,如果结果的高半部分(标志,如果结果的高半部分(AH或或DX)不为零,表明其内容上结果的有效位,则)不为零,表明其内容上结果的有效位,则CF和和OF均置均置1。否则,。否则,CF和和OF均清均清0

38、。其它状态不定。其它状态不定。例例3-57 设设AL=55H,BL=14H,计算它们的积。只要,计算它们的积。只要执行下面这条指令:执行下面这条指令:MUL BL结果,结果,AX=06A4H。由于。由于AH=06H0,高位部分有效,高位部分有效,所以置所以置CF=1,OF=1。如果要做带符号数的乘法,是否也能使用如果要做带符号数的乘法,是否也能使用MUL指令呢?下面看个例子。指令呢?下面看个例子。例例3-58 试计算试计算FFHFFH。用二进制表示成如下形式:。用二进制表示成如下形式:若把它们当成无符号数,相当于进行若把它们当成无符号数,相当于进行255255=65025的运算,结果正确。若把

39、它们看作带符号数,上面的的运算,结果正确。若把它们看作带符号数,上面的计算表示(计算表示(-1)(-1)=-511,显然结果不正确。,显然结果不正确。由此可见,如果用由此可见,如果用MUL指令作带符号数的乘法,指令作带符号数的乘法,会得到错误的结果,所以必须用下面介绍的会得到错误的结果,所以必须用下面介绍的IMUL指指令,才能使(令,才能使(-1)(-1)得到正确的结果)得到正确的结果0000 0000 0000 0001(2)IMUL有符号数乘法指令有符号数乘法指令指令功能细化:指令功能细化:若源操作数为字节类型,则若源操作数为字节类型,则AL源源AX;若源操作数为字类型,则若源操作数为字类

40、型,则AX源源(DX,AX)指令格式:指令格式:IMUL 源源指令功能:把源操作数和累加器中的数都当成是有符指令功能:把源操作数和累加器中的数都当成是有符号数,然后将两数相乘,源操作数可以是字节或字。号数,然后将两数相乘,源操作数可以是字节或字。执行执行IMUL指令后,如果乘积的高半部分不是低指令后,如果乘积的高半部分不是低半部分的符号扩展(不是全零或全半部分的符号扩展(不是全零或全1),则视为高位),则视为高位部分为有效位,表示它是积的一部分,于是置部分为有效位,表示它是积的一部分,于是置CF=1,OF=1。若结果的高半部分为全零或全。若结果的高半部分为全零或全1,表明它,表明它仅包含了符号

41、位,那么使仅包含了符号位,那么使CF=0,OF=0。例例3-59 设设AL=-28H,BL=59H,试计算它们的乘积。,试计算它们的乘积。这时,可使用下面指令:这时,可使用下面指令:IMUL BL结果,结果,AX=F98CH=-1652,CF=1,OF=1(3)AAM乘法的乘法的ASCII调整指令调整指令指令格式:指令格式:AAM指令功能:对已存在指令功能:对已存在AL中的两个非压缩十进制数相中的两个非压缩十进制数相乘的乘积进行十进制数的调整,使得在乘的乘积进行十进制数的调整,使得在AX中得到正中得到正确的非压缩十进制数的乘积,高位放在确的非压缩十进制数的乘积,高位放在AH中,低位中,低位放在

42、放在AL中。两个中。两个ASCII码数相乘之前,必须先屏蔽码数相乘之前,必须先屏蔽掉每个数字的高半字节,从而使每个字节包含一个非掉每个数字的高半字节,从而使每个字节包含一个非压缩十进制数,再用压缩十进制数,再用MUL指令相乘,乘积放到指令相乘,乘积放到AL寄寄存器中,然后用存器中,然后用AAM指令进行调整。指令进行调整。调整过程:调整过程:把把AL寄存器中的内容除以寄存器中的内容除以10,商放到,商放到AH中,中,余数在余数在AL中,即:中,即:AL/10所得的商所得的商AH AL/10所得的余数所得的余数AL指令执行后,将影响指令执行后,将影响ZF、SF、PF,但,但AF、CF、OF无定义。

43、无定义。例例3-60 求两个非压缩十进制数求两个非压缩十进制数09和和06之乘积,可用之乘积,可用如下指令实现:如下指令实现:MOV AL,09H MOV BL,06HMUL BL;09H06H=36HALAAM;调整为;调整为AH=05H,AL=04H,即,即54如果如果AL和和BL中分别存放中分别存放9和和6的的ASCII码码,求两数,求两数之积时要用以下指令实现:之积时要用以下指令实现:MOV AL,9;AL=9=39HMOV BL,6;BL=6=36HAND AL,0FH;屏蔽高半字节,变为;屏蔽高半字节,变为09HAND BL,0FH;屏蔽高半字节,变为;屏蔽高半字节,变为06HMU

44、L BLAAM4.除法指令除法指令(1)DIV无符号数除法指令无符号数除法指令指令格式:指令格式:DIV 源源指令功能:把源操作数和累加器中的数都当成是无符指令功能:把源操作数和累加器中的数都当成是无符号数,然后将两数相除,源操作数可以是字节或字。号数,然后将两数相除,源操作数可以是字节或字。指令功能细化:指令功能细化:若源操作数为字节类型,则若源操作数为字节类型,则 AX/源的商源的商AL;AX/源的余数源的余数AH;若源操作数为字类型,则若源操作数为字类型,则(DX,AX)/源的商源的商AX;(DX,AX)/源的余数源的余数DX;注意:注意:在使用时要注意以下两点:在使用时要注意以下两点:

45、若被除数和除数都是若被除数和除数都是8位,则将位,则将8位被除数放在位被除数放在AL中,并且使中,并且使AH=0。若被除数和除数都是若被除数和除数都是16位,则将位,则将16位被除数放在位被除数放在AX中,并且使中,并且使DX=0。(2)IDIV带符号数除法指令带符号数除法指令指令格式:指令格式:IDIV 源源指令功能:该指令执行的操作与指令功能:该指令执行的操作与DIV相同,但操作数相同,但操作数都必须是带符号数,商和余数也都是带符号数,而都必须是带符号数,商和余数也都是带符号数,而且规定余数的符号和被除数的符号相同。且规定余数的符号和被除数的符号相同。25/3 商商=-8,余数,余数=-1

46、(规定)(规定)商商=-9,余数,余数=+2中断类型号为中断类型号为0的除法中断(相当于执行除法为的除法中断(相当于执行除法为0的的运算):运算):无论是无论是DIV还是还是IDIV指令,在对两数进行除法指令,在对两数进行除法运算时:运算时:如果除数(源)是字节,则商也应该为字节(放在如果除数(源)是字节,则商也应该为字节(放在AL中),如果商不止为中),如果商不止为8位,则这时,由于位,则这时,由于AL放不放不下这个商,就会产生中断。例如无符号数下这个商,就会产生中断。例如无符号数8090H(AX),),80H(源)两数相除,结果就会产生(源)两数相除,结果就会产生中断,这是因为结果商已经中

47、断,这是因为结果商已经FFH,AL存不下这个商。存不下这个商。例如有符号数例如有符号数-1000(AX),),+2(源)两数相除,结(源)两数相除,结果也会产生中断,这是因为结果商已经果也会产生中断,这是因为结果商已经-128(80H),),AL存不下这个商。存不下这个商。如果除数(源)是字,则商也应该为字如果除数(源)是字,则商也应该为字(放在(放在AX中),如果商不止为中),如果商不止为16位,则这时,由于位,则这时,由于AX放不下这个商,就会产生中断。例如无符号数放不下这个商,就会产生中断。例如无符号数6070 8090H(DX,AX),),5080H(源)两数相除,(源)两数相除,结果

48、就会产生中断,这是因为结果商已经结果就会产生中断,这是因为结果商已经FFFFH,AX存不下这个商。存不下这个商。8位无符号数范围为:位无符号数范围为:0255(FFH)16位无符号数范围为:位无符号数范围为:065535(FFFFH)8位有符号数范围为:位有符号数范围为:-128(80H)+127(FFH)16位有符号数范围为:位有符号数范围为:-32768+32767 (8000H)()(7FFFH)注意注意:在使用时要注意以下两点:在使用时要注意以下两点:若被除数和除数都是若被除数和除数都是8位,则将位,则将8位被除数放在位被除数放在AL中,并且使中,并且使AH=0(AL中,中,SF=0)

49、或或AH=FFH(AL中,中,SF=1),即需进行符号扩展。),即需进行符号扩展。也就是说,要将也就是说,要将8位有符号数变成等值的位有符号数变成等值的16位有符位有符号数,例如号数,例如-128(80H)变成等值)变成等值16位有符号数为位有符号数为FF80H(-128);再如);再如+127(7FH)变成等值)变成等值16位有符号位有符号数为数为007FH(+127)注意注意:若被除数和除数都是若被除数和除数都是16位,则将位,则将16位被除数放在位被除数放在AX中,并且使中,并且使DX=0(AX中,中,SF=0)或或DX=FFFFH(AX中,中,SF=1),即需进行符号扩),即需进行符号

50、扩展。展。也就是说,要将也就是说,要将16位有符号数变成等值的位有符号数变成等值的32位有符号数位有符号数。因此对于这两种情况,不能向无符号数除法因此对于这两种情况,不能向无符号数除法指令指令DIV那样,简单地给高半部分补那样,简单地给高半部分补0,(AH=0,或,或DX=0),而需根据低半部分的符号位),而需根据低半部分的符号位进行相应的符号扩展,下面讲讲符号扩展指令。进行相应的符号扩展,下面讲讲符号扩展指令。(3)CBW把字节转换成字指令把字节转换成字指令指令格式:指令格式:CBW指令功能:把寄存器指令功能:把寄存器AL中字节的符号位扩充到中字节的符号位扩充到AH的所有位,这时的所有位,这

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

当前位置:首页 > pptx模板 > 企业培训

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

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