微机原理与接口技术的课件_第3章1.ppt
第第3 3章章 指令系统指令系统1主要内容:n指令系统的一般概念指令系统的一般概念n对操作数的寻址方式对操作数的寻址方式n六大类指令的操作原理:六大类指令的操作原理:操作码的含义操作码的含义指令对操作数的要求指令对操作数的要求指令执行的结果指令执行的结果23.13.1 概述3了解:n指令及指令系统;指令及指令系统;n指令的格式;指令的格式;n指令中的操作数类型;指令中的操作数类型;n指令字长与机器字长;指令字长与机器字长;n指令的执行时间指令的执行时间nCISCCISC和和RISCRISC指令系统指令系统4一、指令与指令系统指令:指令:控制计算机完成某种操作的命令控制计算机完成某种操作的命令指令系统:指令系统:处理器所能识别的所有指令的集合处理器所能识别的所有指令的集合指令的兼容性:指令的兼容性:同一系列机的指令都是兼容的。同一系列机的指令都是兼容的。5二、指令格式指令中应包含的信息:指令中应包含的信息:运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作6指令格式操作码操作码 操作数操作数,操作数操作数指令的功能指令的功能(即执行何种(即执行何种操作)操作)目标操作数目标操作数源操作数源操作数指令的操作对象,指明指令的操作对象,指明参加操作的数据或数据参加操作的数据或数据存放的地址存放的地址7指令格式:零操作数指令:零操作数指令:操作码操作码 单操作数指令:单操作数指令:操作码操作码 操作数操作数双操作数指令:双操作数指令:操作码操作码 操作数,操作数操作数,操作数多操作数指令:多操作数指令:三操作数及以上三操作数及以上8三、指令中的操作数类型立即数操作数立即数操作数寄存器操作数寄存器操作数存储器操作数存储器操作数表征参加操作的数据本身表征参加操作的数据本身表征数据存放的地址表征数据存放的地址9立即数操作数n立即数只能作为源操作数。立即数只能作为源操作数。其本身是参加操作其本身是参加操作的数据,可以是的数据,可以是8位或位或16位。位。例:例:MOV AX,1234H MOV BL,22Hn立即数无法作为目标操作数立即数无法作为目标操作数n立即数可以是无符号或带符号数,其数值应在立即数可以是无符号或带符号数,其数值应在可取值范围内。可取值范围内。10寄存器操作数:n参加运算的数存放在指令给出的寄存器中,参加运算的数存放在指令给出的寄存器中,可以是可以是16位或位或8位。位。n例:例:nMOV AX,BXn MOV DL,CH11存储器操作数n参加运算的数存放在存储器的某一个或某参加运算的数存放在存储器的某一个或某两个单元中。两个单元中。n表现形式:表现形式:立即数或寄存器立即数或寄存器12存储器操作数例n例:例:MOV AX,1200H MOV AL,1200H22H11H1200H偏移地址偏移地址AH AL 13四、指令字长与机器字长n指令字长:指令字长:n由操作码的长度、操作数地址长度、操作数个由操作码的长度、操作数地址长度、操作数个数决定;数决定;n机器字长:机器字长:n计算机能够直接处理的二进制数的位数。计算机能够直接处理的二进制数的位数。14五、指令的执行速度n指令的字长影响指令的执行速度。指令的字长影响指令的执行速度。(常用指令的执行时间见表(常用指令的执行时间见表3-4)n对不同的操作数,指令执行的时间不同:对不同的操作数,指令执行的时间不同:存储器存储器快!快!立即数立即数寄存器寄存器15六、CISC和RISC指令系统nCISC(复杂)指令系统(复杂)指令系统n指令的功能强,种类多,高级语言和机器语言间指令的功能强,种类多,高级语言和机器语言间的距离缩小;的距离缩小;n指令系统复杂,难使用。指令系统复杂,难使用。nRISC(精简)指令系统(精简)指令系统n指令功能较弱,种类少,格式简单;指令功能较弱,种类少,格式简单;n多数指令在一个计算机周期内完成;多数指令在一个计算机周期内完成;n对存储器的结构和存取速度要求较高。对存储器的结构和存取速度要求较高。163.2 寻址方式17寻址方式 寻找操作数所在地址的方法寻找操作数所在地址的方法 寻找转移地址的方法寻找转移地址的方法 本节本节18一、立即寻址n指令中的源操作数是立即数,即源操作数是参指令中的源操作数是立即数,即源操作数是参加操作的数据本身。加操作的数据本身。n主要用于给寄存器或存储单元赋初值。主要用于给寄存器或存储单元赋初值。n例:例:MOV AX,1200H12H00HAH ALMOV代代码码段段 19二、直接寻址n操作数在内存中,指令中直接操作数在内存中,指令中直接给出操作数的偏移地址。操作给出操作数的偏移地址。操作数一般在数一般在DS段(默认)。段(默认)。n例:例:MOV AX,1200H22H11H1200H偏移地址偏移地址 数数据据段段AH AL20直接寻址n直接寻址方式下,操作数的段地址默认为数据直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。段,但允许段重设,即由指令定义段。n例:例:MOV AX,ES:1200H21三、寄存器寻址n参加操作的操作数在参加操作的操作数在CPU的通用寄存器中。的通用寄存器中。n例:例:MOV AX,BX AX BX22四、寄存器间接寻址n参与操作的操作数存放在内存中,用参与操作的操作数存放在内存中,用寄存器的内容表示操作数的偏移地址。寄存器的内容表示操作数的偏移地址。23寄存器间接寻址n由寄存器间接给出操作数的偏移地址;由寄存器间接给出操作数的偏移地址;n存放偏移地址的寄存器称为间址寄存器,它们存放偏移地址的寄存器称为间址寄存器,它们是:是:BX,BP,SI,DIn操作数的段地址(数据处于哪个段)取决于选操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:择哪一个间址寄存器:BX,SI,DI BP默认在数据段默认在数据段默认在堆栈段默认在堆栈段24寄存器间接寻址例n例:例:MOV AX,BX 设设BX=1200H22H11H1200H偏移地址偏移地址AH AL 11 22数数据据段段代代码码段段MOV25寄存器间接寻址 寄存器寄存器间接寻址间接寻址基址寻址(间址基址寻址(间址寄存器为基址寄存寄存器为基址寄存 器器BX,BP)变址寻址(间址变址寻址(间址寄存器为变址寄存寄存器为变址寄存 器器SI,DI)26五、寄存器相对寻址n操作数的偏移地址为寄存器的内容加上一个位移操作数的偏移地址为寄存器的内容加上一个位移量。量。n例:例:nMOV AX,BX+DATA 设:设:DS=2000H,BX=0220H,DATA=05H n则:则:AX=20225H27六、基址、变址寻址n操作数的偏移地址为一个基址寄存器的内容加操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定。选择的基址寄存器决定。n例例 3-9(P103):):MOV AX,SI+BX28七、基址、变址、相对寻址n操作数的偏移地址为一个基址寄存器的内容加上操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。一个变址寄存器的内容,再加上一个位移量。n操作数的段地址由选择的基址寄存器决定。操作数的段地址由选择的基址寄存器决定。n例:例:3-10(P104)29八、隐含寻址n指令隐含了的一个或两个操作数的指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中。地址,即操作数在默认的地址中。n例:例:MUL BL 指令的执行:指令的执行:ALBLAX303.33.3 8086指令系统31掌握:n指令码的含义指令码的含义n指令对操作数的要求指令对操作数的要求n指令的对标志位的影响指令的对标志位的影响n指令的功能指令的功能328086指令系统从功能上包括六大类:从功能上包括六大类:数据传送数据传送算术运算算术运算逻辑运算和移位逻辑运算和移位串操作串操作程序控制程序控制处理器控制处理器控制33数据传送指令n通用数据传送通用数据传送n输入输出输入输出n地址传送地址传送n标志位操作标志位操作34一、通用数据传送一般数据传送指令一般数据传送指令堆栈操作指令堆栈操作指令交换指令交换指令查表转换指令查表转换指令字位扩展指令字位扩展指令特点:特点:该类指令的执行对标志位不产生影响该类指令的执行对标志位不产生影响 351.一般数据传送指令格式:格式:MOV DST,SRC 目的操作数目的操作数 源操作数源操作数功能:将源操作数传送至目的地址中,功能:将源操作数传送至目的地址中,源保持不变。源保持不变。(SRC)DSTn例:例:MOV AL,BL36一般数据传送指令注:注:n两操作数字长必须相同两操作数字长必须相同;n两操作数不允许同时为存储器操作数;两操作数不允许同时为存储器操作数;n两操作数不允许同时为段寄存器;两操作数不允许同时为段寄存器;n在源操作数是立即数时,目标操作数不能是段在源操作数是立即数时,目标操作数不能是段寄存器;寄存器;nIP和和CS不作为目标操作数,不作为目标操作数,FLAGS一般也不一般也不作为操作数在指令中出现。作为操作数在指令中出现。3738一般数据传送指令判断下列指令的正确性:判断下列指令的正确性:nMOV AL,BXnMOV AX,SI05HnMOV DS,1000HnMOV BXBP,BXnMOV CS,BXnMOV DX,09HnMOV 1200,SInMOV 2000H,AXX,类型不一致,类型不一致X,立即数不能送段寄存器,立即数不能送段寄存器X,CS不能做目的操作数不能做目的操作数X,不能同时为存储器操作数,不能同时为存储器操作数X,目的不能为立即操作数,目的不能为立即操作数392.堆栈操作指令掌握:掌握:n有关堆栈的概念有关堆栈的概念 栈顶、栈首、栈底栈顶、栈首、栈底n堆栈指令的操作原理堆栈指令的操作原理 执行过程,执行结果执行过程,执行结果40堆栈操作的原则n先进后出先进后出n以字为单位以字为单位41堆栈操作指令n压栈指令压栈指令 PUSH 格式格式:PUSH OPRDn出栈指令出栈指令 POP 格式格式:POP OPRD42进栈指令 PUSHn指令执行过程:指令执行过程:(SP (SP)(SPSP)-2-2 (SPSP)-1-1操作数高字节操作数高字节 (SPSP)-2-2操作数低字节操作数低字节过程:过程:SP-1SP-1,存源操作数的高,存源操作数的高8 8位;位;SP-2SP-2,存存源源操操作作数数的的低低8 8位位,完完成成进进栈栈操作。操作。SP堆堆栈栈段段SP高高8位位低低8位位43进栈指令的操作设设AX=1234H,SP=1200H执行执行 PUSH AX 指令后堆栈区的状态:指令后堆栈区的状态:1200H 堆堆栈栈段段 SP-2=11FEH12H34H1200H 堆堆栈栈段段12H 34HAX入栈后入栈后入栈前入栈前44出栈指令POPn指令执行过程:指令执行过程:将将SSSS:SPSP所所指指示示的的栈栈顶顶处处的的两两个个字字节的数据传送到目的操作数中。节的数据传送到目的操作数中。SP+2SP+2,指指示示当当前前栈栈顶顶位位置置,完完成成出出栈操作。栈操作。SPSP SP+1 SP+1 SP SP+2 SP SP+2操作数低字节操作数低字节操作数高字节操作数高字节 SP堆堆栈栈段段SP高高8位位低低8位位45出栈指令的操作执行执行 POP AX 12H34H11FEH 堆堆栈栈段段代代码码段段PUSH 12 34 AX SP+21200H 出栈后出栈后出栈前出栈前46堆栈操作指令说明n指令的操作数必须是指令的操作数必须是1616位的;位的;n操操作作数数可可以以是是寄寄存存器器或或存存储储器器两两单单元元,但但不不能能是立即数;是立即数;n不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCS;nPUSHPUSH和和POPPOP指令在程序中一般成对出现;指令在程序中一般成对出现;nPUSHPUSH指指令令的的操操作作方方向向是是从从高高地地址址向向低低地地址址,而而POPPOP指令的操作正好相反。指令的操作正好相反。47堆栈操作指令例nPUSH AXnPUSH BXnPOP AXnPOP BX 如此,会使如此,会使AX和和BX的内容互换的内容互换483.交换指令n格式:格式:XCHG XCHG REGREG,MEM/REGMEM/REG操作操作:(DST)(SRC)即源地址与目的地址中的内容互换即源地址与目的地址中的内容互换n注:注:n两操作数必须有一个是寄存器操作数两操作数必须有一个是寄存器操作数n不允许使用段寄存器不允许使用段寄存器。n例:例:nXCHGXCHGAXAX,BXBXnXCHGXCHG20002000,CLCL49例:例:XCHG AX,BX XCHG BH,BL XCHG AX,1122H XCHG DS,AX XCHG SI,BP XCHG SI,DI 504.查表指令n格式:格式:XLATn 操作:操作:(BX+AL)AL,即将即将BX为首址(偏移地址),为首址(偏移地址),AL为位移量的字节单元的内容为位移量的字节单元的内容AL 该指令常用于进行代码转换,转换时先建立相应表。表该指令常用于进行代码转换,转换时先建立相应表。表首址首址BX,与表有关的某个偏移值,与表有关的某个偏移值(一般为被传送的字一般为被传送的字节到表头地址的字节数节到表头地址的字节数)AL。该指令的操作数是隐含寻址,不带操作数或带表头地址。该指令的操作数是隐含寻址,不带操作数或带表头地址。n说明:说明:n用用BX的内容代表表格首地址,的内容代表表格首地址,AL内容为表内位移量,内容为表内位移量,BX+AL得到要查找元素的偏移地址得到要查找元素的偏移地址51查表指令例数据段中存放有一数据段中存放有一张张ASCIIASCII码转换表,码转换表,设首地址为设首地址为20002000H H,现欲查出表中第现欲查出表中第1111个代码的个代码的ASCIIASCII码码303132.394142.45462000H+02000H+110 129ABEF52查表指令例n n可用如下指令实现:可用如下指令实现:可用如下指令实现:可用如下指令实现:MOV BX MOV BX MOV BX MOV BX,2000H 2000H 2000H 2000H ;BXBXBXBX表首地址表首地址表首地址表首地址 MOV AL MOV AL MOV AL MOV AL,0BH 0BH 0BH 0BH ;ALALALAL序号序号序号序号 XALT XALT XALT XALT ;查表转换查表转换查表转换查表转换 执行后得到:执行后得到:执行后得到:执行后得到:AL=42HAL=42HAL=42HAL=42H53二、输入输出指令掌握:掌握:n指令的格式及操作指令的格式及操作n指令的两种寻址方式指令的两种寻址方式n指令对操作数的要求指令对操作数的要求54指令寻址方式n直接寻址直接寻址 直接给出直接给出8位端口地址,可寻址位端口地址,可寻址256个端口个端口n间接寻址间接寻址 16位端口地址由位端口地址由DX指定,可寻址指定,可寻址64K个端口个端口55输入输出指令n专门面向专门面向I/O端口操作的指令。端口操作的指令。输入指令:输入指令:IN acc(累加器(累加器AL或或AX),),PORT(端口(端口地址)地址)操作:从端口输入一个字节到操作:从端口输入一个字节到AL或输入一个字到或输入一个字到AX。指令格式为指令格式为指令格式为指令格式为:IN AL,nIN AL,nIN AX,nIN AX,nIN AL,DXIN AL,DXIN AX,DXIN AX,DX直接寻址输入指令(直接寻址输入指令(n为为8位端口地址)位端口地址)DX寄存器间接寻址输入指令(端口地址为寄存器间接寻址输入指令(端口地址为16位)位)56输入输出指令输出指令输出指令:OUT PORT(端口地址),(端口地址),acc(累加器(累加器AL或或AX)操作:将操作:将AL或或AX的内容输出到指定端口。的内容输出到指定端口。指令格式为指令格式为指令格式为指令格式为:OUT n,ALOUT n,ALOUT n,AXOUT n,AXOUT DX,ALOUT DX,ALOUT DX,AXOUT DX,AX直接寻址输出指令(直接寻址输出指令(n为为8位端口地址)位端口地址)DX寄存器间接寻址输出指令(端口地址为寄存器间接寻址输出指令(端口地址为16位)位)57三、三、地址传送指令取偏移地址指令取偏移地址指令LEA*LDS指令指令*LES指令指令58取偏移地址指令LEAn操作:操作:n将变量的将变量的1616位偏移地址取出送目标寄存器位偏移地址取出送目标寄存器n格式:格式:LEA REGLEA REG,MEMMEM n指令要求:指令要求:n源源操操作作数数必必须须是是一一个个存存储储器器操操作作数数,目目标标操操作作数数通常是间址寄存器。通常是间址寄存器。59LEA指令n比较下列指令:比较下列指令:MOV SI,DATA1 LEA SI,DATA1 MOV BX,BX LEA BX,BX DATA1符号符号地址地址12H34H1100H88H77HBX=1100H605.字位扩展指令 n将符号数的符号位扩展到高位;将符号数的符号位扩展到高位;n指令为零操作数指令,采用隐含寻址,隐含指令为零操作数指令,采用隐含寻址,隐含的操作数为的操作数为AX及及AX,DXn无符号数的扩展规则为在高位补无符号数的扩展规则为在高位补061字节到字的扩展指令n格式:格式:CBW(convert Byte to Word)n操作:将操作:将AL内容扩展到内容扩展到AXn规则:规则:n若最高位若最高位=1,则执行后,则执行后AH=FFHn若最高位若最高位=0,则执行后,则执行后AH=00H62字到双字的扩展指令n格式:格式:CWDn操作:将操作:将AX内容扩展到内容扩展到DX AXn规则:规则:n若最高位若最高位=1,则执行后,则执行后DX=FFFFHn若最高位若最高位=0,则执行后,则执行后DX=0000H63字位扩展指令例判断以下指令执行结果:判断以下指令执行结果:MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBWAX=0044HDX=FFFFHAX=0AFDEHAX=FF86H64四、标志位操作指令 LAHFSAHFPUSHFPOPF隐含操作数隐含操作数AH隐含操作数隐含操作数FLAGS651.LAHF,SAHFn指令格式:指令格式:LAHF n操作:将操作:将FLAGS的低的低8位装入位装入AHCFPFAFZFCF.AHFLAGSD15D0D7D0n SAHF执行与执行与LAHF相反的操作相反的操作662.PUSHF,POPFn针对针对FLAGS的堆栈操作指令的堆栈操作指令 将标志寄存器压栈或从堆栈弹出将标志寄存器压栈或从堆栈弹出67算术运算类指令68算术运算类指令n加法运算指令加法运算指令n减法运算指令减法运算指令n乘法指令乘法指令n除法指令除法指令算术运算指令的执行大多对状态标志位会产生影响算术运算指令的执行大多对状态标志位会产生影响69一、加法指令 普通加法指令普通加法指令ADD 带进位位的加法指令带进位位的加法指令ADC 加加1指令指令INC加法指令对操作数的要求与加法指令对操作数的要求与MOV指令相同指令相同701.ADD指令 格式:格式:ADD DST,SRC 操作:操作:(DST)+(SRC)DST 即将目的操作数与源操作数相加,结果存入目的地即将目的操作数与源操作数相加,结果存入目的地 地中,而源地址内容不变。地中,而源地址内容不变。目的目的Reg,Mem 源源Reg,Mem,Imm 两操作数的两操作数的类型相同,类型明确,不能同为存储器。类型相同,类型明确,不能同为存储器。ADD指令的执行对全部指令的执行对全部6个状态标志位都产生影响。个状态标志位都产生影响。71 例:判断正确与否:例:判断正确与否:ADD AL,BX ADD CL,CH ADD AX,BX ADD BX,28 ADD BX,SI ADD 1000H,AX ADD SI,BX ADD DS,BX 72ADD指令例 MOV AL,78H ADD AL,99H指令执行后指令执行后6个状态标志位的状态个状态标志位的状态73ADD指令例 01111000+10011001 000100011标志位状态:标志位状态:CF=SF=AF=ZF=PF=OF=101010742 带进位加法指令带进位加法指令ADC格式:格式:ADC DST,SRC操作:操作:(DST)+(SRC)+CFDST 该指令主要用于多字节运算,多字节运算时低位字节产生该指令主要用于多字节运算,多字节运算时低位字节产生的进位应加到高位。单字节表示一个数的范围小,精度的进位应加到高位。单字节表示一个数的范围小,精度低,为提高精度,可用多个字表示一个数。低,为提高精度,可用多个字表示一个数。一个字表示一个数一个字表示一个数单精度数单精度数(16位位),两个字表示一个两个字表示一个数数双精度双精度(32位位),多个字,多个字多倍精度等。多倍精度等。nADC指令多用于多字节数相加,使用前要先将指令多用于多字节数相加,使用前要先将CF清零。清零。n指令格式、对操作数的要求、对标志位的影响与指令格式、对操作数的要求、对标志位的影响与ADD指令指令完全一样。完全一样。CF为前面指令产生的为前面指令产生的CF75 例例:两个双精度数两个双精度数(32位位)相加相加。0123FAB5H+0ABC212AH=0BE01BDFH 0123 FAB5 MOV DX,0123H +0ABC 21 2A MOV AX,0FAB5H 0BE0 1BDF ADD AX,212AH ;先加低字先加低字 CF=1 AX=1BDFH ADC DX,0ABCH ;高字带进位加高字带进位加 CF=0 DX=0BE0H 76 3 加加1 指令指令INC格式:格式:INC DST操作:操作:(DST)+1DST 例:例:MOV BX,1 INC BX;BX=0002H 该指令不影响该指令不影响CF,而影响其它标志,规律同而影响其它标志,规律同ADD。单操作数指令,只能为寄存器,存储器,类型明确,不能出现单操作数指令,只能为寄存器,存储器,类型明确,不能出现二义性。二义性。例:例:INC CL INC DI INC 2000H 该指令常用于修改偏移地址和计数次数。该指令常用于修改偏移地址和计数次数。77二、减法指令普通减法指令普通减法指令SUB考虑借位的减法指令考虑借位的减法指令SBB减减1指令指令DEC比较指令比较指令CMP求补指令求补指令NEG减法指令对操作数的要求与对应的加法指令相同减法指令对操作数的要求与对应的加法指令相同78 2.减法指令减法指令 减法指令减法指令SUB 格式:格式:SUB DST,SRC 操作:操作:(DST)(SRC)DSTn 即将目的操作数与源操作数相减,结果存入目的地址中,源地即将目的操作数与源操作数相减,结果存入目的地址中,源地址内容不变,对源、目的操作数的要求同加法指令址内容不变,对源、目的操作数的要求同加法指令.带借位减指令带借位减指令SBB 格式:格式:SBB DST,SRC 操作:操作:(DST)(SRC)CF DST n 除两除两操作数相减以外,再减去前面指令的进位操作数相减以外,再减去前面指令的进位(借位借位),该指,该指令主要用于多倍精度数的运算,在进行高位字节令主要用于多倍精度数的运算,在进行高位字节(或字或字)运算时,运算时,一定要减去由于低位字节一定要减去由于低位字节(或字或字)数不够减而产生的借位数不够减而产生的借位CF。79 例:双精度数相减例:双精度数相减 5321A678H1234F000H=40ECB678H MOV AX,0A678H MOV DX,5321H 5321 A678 SUB AX,0F000H ;CF=1 1234 F000 SBB DX,1234H ;CF=0 30EC B678 减减 1(减量减量)指令指令DEC 格式:格式:DEC DST 操作:操作:(DST)1DST DEC不影响不影响CF,其余均影响标志,影响关系同其余均影响标志,影响关系同ADD指令。指令。n指令对操作数的要求与指令对操作数的要求与INC相同相同n指令常用于在程序中修改计数值指令常用于在程序中修改计数值80格式:格式:NEG OPRD操作:操作:0-OPRD OPRD用用0减去操作数减去操作数OPRD,结果送回该操作数所在地址。,结果送回该操作数所在地址。用用0减去操作数,相当于对该操作数求补码。减去操作数,相当于对该操作数求补码。即将操作数地址的内容求反加即将操作数地址的内容求反加1后(包括符号位)又送后(包括符号位)又送入原单元中入原单元中.4)求补指令NEG81例:例:MOV AX,1 ;AX=0001H (前前1)NEG AX ;AX=0FFFFH (后后1)例:例:MOV BL,0FFH ;BL=0FFH(前前1)NEG BL ;BL=01H (后后1)n区分,它是进行求补操作,而不是求补码指令。区分,它是进行求补操作,而不是求补码指令。它不管操作数是否带符号,是正是负,也不管是它不管操作数是否带符号,是正是负,也不管是原码补码。若将执行求码指令前后的数均视为补原码补码。若将执行求码指令前后的数均视为补码形式的符号数,求补指令则将该数变为绝对值码形式的符号数,求补指令则将该数变为绝对值相等符号相反的另一个数。若已知相等符号相反的另一个数。若已知AX中的一负数中的一负数的补码,则只要的补码,则只要NEG AX,则求其绝对值。则求其绝对值。82 格式:格式:CMP DST,SRC 操作操作:(DST)(SRC)比较后影响标志位,不回送结比较后影响标志位,不回送结果。源、目的不变。该指令主要用来判断比较两数的大果。源、目的不变。该指令主要用来判断比较两数的大小,与是否相等。小,与是否相等。5)比较指令CMP83CMP指令n用途:用途:用于比较两个数的大小,可作为条件转移指令用于比较两个数的大小,可作为条件转移指令转移的条件转移的条件n指令对操作数的要求及对标志位的影响与指令对操作数的要求及对标志位的影响与SUB指令相同指令相同84CMP指令n两个无符号数的比较:两个无符号数的比较:CMP AX,BX 若若 AX BX 若若 AX BX OF和和SF状态不同状态不同 AX BX86三、乘法指令无符号的乘法指令无符号的乘法指令MUL带符号的乘法指令带符号的乘法指令IMUL注:注:乘法指令采用隐含寻址,隐含的是存放被乘数的累加乘法指令采用隐含寻址,隐含的是存放被乘数的累加器器AL或或AX及存放结果的及存放结果的AX,DX;若运算结果的高位全为若运算结果的高位全为0或或1,表示其为无效数据,表示其为无效数据,OF=CF=0871.无符号数乘法指令n格式:格式:MUL OPRD 不能是立即数不能是立即数n操作:操作:OPRD为字节数为字节数 OPRD为为16位数位数 ALOPRDAXOPRDDXAXAX88无符号数乘法指令例nMUL BYTE PTRBX BXXXHAL XXHAX892.带符号数乘法指令n格式:格式:IMUL OPRDn说明:说明:nIMUL指令将指令将OPRD视为带符号数,运算时若操作视为带符号数,运算时若操作 数为负数,要先将操作数求补码,运算后再将结果数为负数,要先将操作数求补码,运算后再将结果 求补。求补。90两条乘法指令的比较n例:例:n设:设:AL=FEHAL=FEH,CL=11HCL=11H,求求ALAL与与CLCL的乘积。的乘积。n执行:执行:MUL CL MUL CL n结果:结果:AX=10DEHAX=10DEHn执行:执行:IMUL CLIMUL CLn结果:结果:AX=FFDEH=-34AX=FFDEH=-34。若设为无符号数若设为无符号数若将两操作数看作有符号数若将两操作数看作有符号数91四、除法指令无符号除法指令无符号除法指令n格式:格式:nDIV OPRD有符号除法指令有符号除法指令n格式:格式:nIDIV OPRD92除法指令的操作若若OPRD是字节数是字节数n执行:执行:AX/OPRD n结果:结果:nAL=商商 AH=余数余数若若OPRD是双字节数是双字节数n执行:执行:DXAX/OPRDn结果:结果:nAX=商商 DX=余数余数指指令令要要求求被被除除数数是是除除数数的的双双倍倍字字长长93五、BCD码调整指令n共共6条,均为隐含寻址方式,隐含的操作数是条,均为隐含寻址方式,隐含的操作数是 AL或或AL、AH;n不能单独使用,要紧跟在相应的算术运算指令不能单独使用,要紧跟在相应的算术运算指令 之后;之后;n执行结果为压缩执行结果为压缩BCD码或扩展码或扩展BCD码表示的十码表示的十进制数。进制数。94