好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

微机原理及应用第4章课件3.ppt

41页
  • 卖家[上传人]:新**
  • 文档编号:570592182
  • 上传时间:2024-08-05
  • 文档格式:PPT
  • 文档大小:2.13MB
  • / 41 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • §4.4.2 算术运算指令v加法指令ADD、ADC、INC、AAA、DAAv减法指令SUB、SBB、DEC、AAS、DAS、CMP、NEGv乘法指令MUL、IMUL、AAMv除法指令DIV、IDIV、AAD、CBW、CWDv小结 算术运算指令可完成加、减、乘、除运算以及在算术运算算术运算指令可完成加、减、乘、除运算以及在算术运算过程中进行进制及编码调整操作在进行这些操作时,可针过程中进行进制及编码调整操作在进行这些操作时,可针对字节或字运算,对字节或字运算, 也可对带符号数和无符号数进行运算也可对带符号数和无符号数进行运算 1 1、加法指令、加法指令ADDADD((AdditionAddition) 指令格式:指令格式: ADD OPRD1ADD OPRD1,, OPRD2OPRD2 指指令令功功能能::将将源源操操作作数数与与目目的的操操作作数数相相加加,,结结果果存存放放于于目的操作数目的操作数 即即OPRD1+OPRD2→OPRD1OPRD1+OPRD2→OPRD1。

      具体指令形式:具体指令形式:  ADD reg, reg ADD reg, reg ;; reg←reg+regreg←reg+reg ADD reg, mem ADD reg, mem ;; reg←reg+memreg←reg+mem ADD reg, imm ADD reg, imm ;; reg←reg+immreg←reg+imm ADD mem, reg ADD mem, reg ;; mem←mem+regmem←mem+reg ADD mem, imm ADD mem, imm ;; mem←mem+immmem←mem+imm 要求源操作数和目的操作数同时为带符号的数或要求源操作数和目的操作数同时为带符号的数或无符号数,且长度相等。

      无符号数,且长度相等 加法运算指令 2、 带进位加法指令带进位加法指令ADCADC((Add with carryAdd with carry) 指令格式:指令格式: ADC OPRD1ADC OPRD1,, OPRD2OPRD2 指指令令功功能能::将将源源操操作作数数与与目目的的操操作作数数以以及及进进位位标标志志位位CFCF的的 值值 相相 加加 ,, 并并 将将 结结 果果 存存 放放 于于 目目 的的 操操 作作 数数 ,, 即即OPRD1+OPRD2+CF→OPRD1OPRD1+OPRD2+CF→OPRD1  具体指令形式:具体指令形式:  ADC reg, reg ADC reg, reg ;; reg←reg+reg+CFreg←reg+reg+CF ADC reg, mem ADC reg, mem ;; reg←reg+mem+CFreg←reg+mem+CF ADC reg, imm ADC reg, imm ;; reg←reg+imm+CFreg←reg+imm+CF ADC mem, reg ADC mem, reg ;; mem←mem+reg+CFmem←mem+reg+CF ADC mem, imm ADC mem, imm ;; mem←mem+imm+CF mem←mem+imm+CF 加法运算指令 3 3、、 加加1 1指令指令INCINC((Increment destination by 1Increment destination by 1)。

       指令格式:指令格式: INC OPRDINC OPRD 指指令令功功能能::将将指指定定操操作作数数内内容容加加1 1INCINC指指令令不不影影响响进进位标志位标志CFCF  具体指令形式:具体指令形式: INC mem INC mem ;; mem←mem+1mem←mem+1 INC reg INC reg ;; reg←reg+1reg←reg+1 加法运算指令 加法运算指令1、加指令ADDv形式:ADD 目的操作数,源操作数v功能:目操作数内容+源操作数内容→目的操作数;执行之后影响所有状态标志SF、ZF、AF、PF、CF、OF v允许的操作数类型:目的操作数——通用寄存器、存储器;源操作数——通用寄存器、存储器、立即数2、带进位的加指令ADCv功能:目操作数内容+源操作数内容+CF→目操作数v其余与ADD指令相同!3、自加1指令INCv形式:INC 操作数 (通用寄存器或存储器)v功能:操作数内容+1 →操作数;执行之后影响标志位SF、ZF、AF、PF、OF ,但不影响CF !最常用的加法用于高字(字节)相加常用于修改地址指针 8位数符号数和无符号数的溢出情况 1.带符号数和无符号数都不溢出 二进制加法 看作无符号数 看作带符号数 0000 1100 13 +13 + 0010 1011 + 55 + (+55) 0011 0111 68 +68 CF=0 OF=0 2.无符号数溢出 二进制加法 看作无符号数 看作带符号数 0011 0101 53 +53 +1101 1010 + 218 + (-38) 1 0000 1111 271 +15 CF=1 OF=0 现为15,结果错 3.带符号数溢出 二进制加法 看作无符号数 看作带符号数 0001 0001 17 +17 + 0111 0011 + 115 + (+115) 1000 0100 132 +132 CF=0 OF= 1 现为-124,结果错。

      4.带符号数和无符号数都溢出 二进制加法 看作无符号数 看作带符号数 1010 0111 167 (-89) + 1001 1101 + 157 + (-99) 1 0100 0100 324 -188 CF= 1 OF= 1现为68,结果错 现为68,结果错 1 1、、 减法指令减法指令SUBSUB((SubtractSubtract) 指令格式:指令格式: SUB OPRD1SUB OPRD1,, OPRD2OPRD2 指指令令功功能能::将将目目的的操操作作数数减减去去源源操操作作数数,,结结果果存存放放于于目的操作数,即目的操作数,即OPRD1-OPRD2→OPRD1OPRD1-OPRD2→OPRD1。

       具体指令形式:具体指令形式:  SUB reg, reg SUB reg, reg ;; reg←reg-regreg←reg-reg SUB reg, mem SUB reg, mem ;; reg←reg-memreg←reg-mem SUB reg, imm SUB reg, imm ;; reg←reg-immreg←reg-imm SUB mem, reg SUB mem, reg ;; mem←mem-regmem←mem-reg SUB mem, imm SUB mem, imm ;; mem←mem-imm mem←mem-imm 减法运算指令 2 2、、 带借位减法指令带借位减法指令SBBSBB((Subtract with borrowSubtract with borrow)。

       指令格式:指令格式: SBB OPRD1SBB OPRD1,, OPRD2OPRD2 指指令令功功能能::将将目目的的操操作作数数减减去去源源操操作作数数,,再再减减去去借借位位CFCF的的值值,,结结果果存存放放于于目目的的操操作作数数即即OPRD1-OPRD2-OPRD1-OPRD2-CF→OPRD1CF→OPRD1  具体指令形式:具体指令形式:  SBB reg, reg SBB reg, reg ;; reg←reg-reg-CFreg←reg-reg-CF SBB reg, mem SBB reg, mem ;; reg←reg-mem-CFreg←reg-mem-CF SBB reg, imm SBB reg, imm ;; reg←reg-imm-CFreg←reg-imm-CF SBB mem, reg SBB mem, reg ;; mem←mem-reg-CFmem←mem-reg-CF SBB mem, imm SBB mem, imm ;; mem←mem-imm-CF mem←mem-imm-CF 减法运算指令 3 3、减、减1 1指令指令DECDEC((Decrement destination by 1Decrement destination by 1)。

       指令格式:指令格式: DEC OPRDDEC OPRD 指指令令功功能能:: 对对指指定定操操作作数数减减1 1 DECDEC指指令令不不影影响响进进位标志  具体指令形式:具体指令形式: DEC mem DEC mem ;; mem←mem-1mem←mem-1 DEC reg DEC reg ;; reg←reg-1reg←reg-1减法运算指令 减法运算指令1、减指令SUBv形式:SUB 目操作数,源操作数v功能:目操作数内容-源操作数内容→目操作数;执行之后影响所有状态标志SF、ZF、AF、PF、CF、OF v允许的操作数类型:目操作数——通用寄存器、存储器;源操作数——通用寄存器、存储器、立即数2、带借位的减指令SBBv功能:目操作数内容-源操作数内容-CF→目操作数v其余与SUB指令相同!3、自减1指令DECv形式:DEC 操作数 (通用寄存器或存储器)v功能:操作数内容-1 →操作数;执行之后影响标志位SF、ZF、AF、PF、OF ,但不影响CF !最常用的减法用于高字(字节)相减常用于修改地址指针 指令格式:指令格式: CMP OPRD1 CMP OPRD1,, OPRD2 OPRD2 指指令令功功能能::将将目目的的操操作作数数减减去去源源操操作作数数,,结结果果不不予予保保存存。

      只只是是根根据据结结果果的的状状态态设设置置条条件件标标志志位位,,设设置置状状态态标标志志位位与与SUBSUB指令含义相同指令含义相同 CMP reg, reg CMP reg, reg ;; reg-regreg-reg CMP reg, mem CMP reg, mem ;; reg-memreg-mem CMP reg, imm CMP reg, imm ;; reg-immreg-imm CMP mem, reg CMP mem, reg ;; mem-regmem-reg CMP mem, imm CMP mem, imm ;; mem-immmem-imm 比较指令CMP(Compare two operands) v比较指令通常用于比较两个操作数的大小。

      由受影响的标志位状态来判断两个操作数比较的结果不论是无符号数比较还是有符号数比较,若在比较指令后,(ZF)=1,则两者相等,否则不相等若两者不相等,则可在比较两个数之后,利用其他标志位的状态来确定两者中哪个大比较指令CMP 如如果果是是两两个个无无符符号号数数比比较较,, 则则可可根根据据进进位位标标志志CFCF的的状状态来判断:态来判断: 若若 (CF)=1(CF)=1,, 则则 OPRD1OPRD2OPRD1>OPRD2  如如果果是是两两个个有有符符号号数数比比较较,,则则要要根根据据SFSF和和OFOF两两个个标标志志的关系来判断:的关系来判断: 若若SFSF⊕⊕OF=0OF=0,,则则OPRD1>OPRD2OPRD1>OPRD2;;若若SFSF⊕⊕OF=1OF=1,,则则OPRD1

      操作之后的状态标志决定程序转移或不转移 比较指令CMP 比较指令CMPv使用方法与SUB、SBB相同v功能:目操作数-源操作数,同时影响状态标志SF、ZF、AF、PF、CF、OF vCMP通常用于比较两个数,其后一般紧跟着条件转移指令以实现不同情况下的分支处理v例: CMP AL,BL ;AL-BL,保持寄存器的值不变 JNZ EQUAL ;若(ZF)=0(不等),转EQUAL处 …… ;( ZF)=1(相等)情况下的处理不改变操作数本身的值! 指令格式:指令格式: NEG OPRDNEG OPRD 指指令令功功能能::对对指指定定操操作作数数求求补补运运算算在在机机器器内内部部,,对对操操作作数数的的求求补补操操作作是是对对操操作作数数进进行行求求反反后后末末位位加加1 1通通过过求求补补可可使使正正数数变变为为负负数数或或使使负负数数变变为为正正数数这这样样使使得得一一个个正正数数减减去去一一个个正正数数的的减减法法运运算算,,转转化化为为一一个个正正数数加加上上一一个个负数的加法运算。

      负数的加法运算  具体指令形式:具体指令形式:  NEG mem NEG mem ;; mem←0-memmem←0-mem NEG reg NEG reg ;; reg←0-regreg←0-reg取相反数指令NEG 取相反数指令NEGv形式:NEG 操作数v功能:0-操作数内容→操作数;影响所有状态标志SF、ZF、AF、PF、CF、OF v允许的操作数类型:通用寄存器、存储器实质上,NEG指令相当于将目操作数固定为0值的SUB指令;执行结果即取原数的相反数 乘法指令包括无符号数乘法、乘法指令包括无符号数乘法、 带符号数乘法两种带符号数乘法两种  1 1、、无无符符号号数数乘乘法法指指令令MULMUL((Multiply Multiply accumulator accumulator by by register -or-memoryregister -or-memory;;unsignedunsigned)。

       指令格式:指令格式: MUL OPRDMUL OPRD 指指令令功功能能::完完成成两两个个无无符符号号数数的的乘乘法法运运算算要要求求被被乘乘数数放放在在ALAL或或AXAX累累加加器器中中,,用用于于字字节节运运算算和和字字运运算算,,另另一一乘乘数数可可通通过过指指令令中中的的OPRDOPRD((除除立立即即数数方方式式以以外外的的寻寻址址方式)获得方式)获得  具体指令形式:具体指令形式:  MUL reg MUL reg ;; (AX)←(AL)×reg8(AX)←(AL)×reg8乘法运算指令或或(DX, AX)←(AX)×reg16(DX, AX)←(AX)×reg16 2、带符号数乘法 IMUL OPRD ;操作同上 IMUL 进行字节运算时,目的操作数必须是累加器AL,乘积在寄存器AX中;进行字运算时,目的操作数必须是累加器AX,乘积在寄存器DX,AX中。

      源操作数不允许使用立即数 乘法指令运算结果只影响状态标志CF、OF 例:MUL BX ;无符号数乘法,BX乘上AX乘法运算指令 具体指令形式:具体指令形式:  IMUL reg IMUL reg ;; (AX)←(AL)×reg8(AX)←(AL)×reg8 或或(DX, AX)←(AX)×reg16(DX, AX)←(AX)×reg16 IMUL mem IMUL mem ;; (AX)←(AL)×mem8(AX)←(AL)×mem8 或或(DX, AX)←(AX)×mem16(DX, AX)←(AX)×mem16 乘乘法法指指令令的的执执行行结结果果会会使使标标志志位位发发生生变变化化。

      只只有有进进位位标标志志CFCF、、溢溢出出标标志志OFOF有有意意义义,,其其它它标标志志位位无无定定义义CFCF、、OFOF定定义义如如下下::当当进进行行字字节节运运算算时时,,其其结结果果超超过过字字节节长长度度成成为字(为字((AH)≠0(AH)≠0)), , CFCF和和OF OF 置置 “ “1”1”;; 乘法运算指令 当当 进进 行行 字字 运运 算算 时时 ,, 其其 结结 果果 超超 过过 字字 长长 度度 成成 为为 双双 字字((( (DX)≠0DX)≠0)),,CF CF 和和OFOF置置“ “1”1”这这样样就就可可以以用用OFOF及及CFCF来来检检查查和和判判断断字字节节或或字字操操作作的的结结果果对对MULMUL指指令令,,当当进进行行字字节节操操作作时时,,乘乘积积结结果果的的高高一一半半为为0 0(((AH)=0(AH)=0)),,或或当当进进行行字字操操作作时时,,乘乘积积结结果果高高一一半半为为0 0(((DX)=0(DX)=0)),,CFCF和和OFOF均均为为0 0对对于于IMULIMUL指指令令,,如如果果乘乘积积结结果果的的高高一一半半为为低低一一半半的的符符号位的扩展,那么号位的扩展,那么CFCF和和OFOF均置均置“ “0”0”,, 否则置否则置“ “1”1”。

      乘乘法法指指令令为为乘乘积积保保留留了了两两倍倍于于原原来来操操作作数数的的存存储储空空间间,, 因而不会出现溢出现象因而不会出现溢出现象 乘法运算指令 乘法运算指令无符乘法指令:MUL 通用寄存器或存储器带符乘法指令:IMUL 通用寄存器或存储器乘积低字节→AL乘积高字节→AH乘积低位字→AX乘积高位字→DXuu影响标志影响标志CFCF、、OFOF :相乘后若高位:相乘后若高位((AHAH或或DXDX))≠ ≠0 0,则,则将将CFCF、、OFOF置置1 1,否则清,否则清0 0字节相乘:字节相乘:ALAL值值× ×操作数内容操作数内容(8(8位位) →) →字相乘:字相乘:AXAX值值× ×操作数内容操作数内容(16(16位位) →) → 除除法法指指令令包包括括无无符符号号数数除除法法指指令令DIVDIV,,带带符符号号数数除除法法指指令令IDIVIDIV,,以以及及在在除除法法运运算算中中辅辅助助DIVDIV、、IDIVIDIV指指令令的的字字节节转转换为字指令换为字指令CBWCBW和字转换为双字指令和字转换为双字指令CWBCWB。

       1 1、、 无符号数除法指令无符号数除法指令DIVDIV((DivisionDivision;;unsignedunsigned) 指令格式:指令格式: DIV OPRDDIV OPRD 指指令令功功能能::完完成成两两个个无无符符号号数数的的除除法法运运算算,,除除法法操操作作可可作作字字节节或或字字操操作作在在进进行行字字节节操操作作时时,,要要求求被被除除数数为为1616位位、、并并存存放放在在AXAX累累加加器器,,除除数数8 8位位由由指指令令中中的的源源操操作作数数指指定定,,结结果果的的8 8位位商商存存放放于于ALAL中中,,8 8位位余余数数存存放放于于AHAH中中在在进进行行字字操操作作时时,,要要求求被被除除数数为为3232位位,,存存放放在在DX,AXDX,AX寄寄存存器器中中,,1616位位除除数数由由指指令令中中源源操操作作数数指指定定,,结结果果的的1616位位商商存存放放于于AXAX中,中,1616位余数存放于位余数存放于DXDX中除法运算指令 2 2、、 带带符符号号数数除除法法指指令令IDIVIDIV((Integer Integer divisiondivision;;signedsigned))。

       指令格式:指令格式: IDIV IDIV 源操作数源操作数 指指令令功功能能::完完成成两两个个带带符符号号数数的的除除法法操操作作在在执执行行该该指指令令时时,,要要求求操操作作数数为为带带符符号号数数,,商商及及余余数数也也为为带带符符号号数数,, 余数与被除数的符号相同余数与被除数的符号相同  除法指令的使用需要说明:除法指令的使用需要说明:  ①① 源操作数不允许使用立即寻址方式源操作数不允许使用立即寻址方式  ②② 除法指令执行后,标志位无定义除法指令执行后,标志位无定义  ③③ 除数为零时,则产生一个除数为零时,则产生一个0 0类型中断类型中断  在除法运算中常常使用在除法运算中常常使用CBWCBW和和CWDCWD对除法所需操作数对除法所需操作数进行长度扩展进行长度扩展  除法运算指令 除法运算指令 除法指令:DIV 通用寄存器或存储器 除法指令:IDIV 通用寄存器或存储器商→AL余数→AH商→AX余数→DX字节除法:字节除法:AXAX值值÷ ÷操作数内容操作数内容(8(8位位)→)→字除法:字除法:DX:AXDX:AX值值÷ ÷操作数内容操作数内容(16(16位位)→)→uuIDIVIDIV之后,余数与被除数同号。

      之后,余数与被除数同号uu除数太小致使商超过规定的长度时,自动转入中断处理除数太小致使商超过规定的长度时,自动转入中断处理uu不影响任何标志不影响任何标志!! 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.