




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算术运算类指令微机原理与接口技术2009年6月2日星期二2
算术运算类指令加法减法乘法除扩展指令外,指令的执行结果都影响状态标志位指令名称指令书写格式状态标志位OFSFZFAFPFCF加法加法带进位加法加1交换加(486)ADDreg/mem,reg/mem/immADCreg/mem,reg/mem/immINCreg/memXADDreg/mem,regYYYYYYYYYYYYYYYYYYYYYYNY减法减法带借位减法减1取负比较比较交换(486)8字节比较交换(奔腾)SUBreg/mem,reg/mem/immSBBreg/mem,reg/mem/immDECreg/memNEGreg/memCMPreg/mem,reg/mem/immCMPXCHGreg/mem,regCMPXCHG8Bmem64YYYYYYYYYYYYYYYYYNYYYYY1YYYYYYYYYYYYNNYNNN除法扩展十进制调整2009年6月2日星期二3一.加减法类指令(1)加减法指令ADD/SUB指令格式:
ADDreg/mem,reg/mem/immSUBreg/mem,reg/mem/imm功能:
ADD完成两个操作数的加运算,结果送入第一个操作数;
SUB完成第一个操作数减去第二个操作数,差送回到第一个操作数。0110010110100000+)101101111001111010001110100111110结果非零:ZF=0无进位:AF=0低8位为偶数个1:PF=0最高位有进位:CF=1最高位为0:SF=0OF=最高位进位1⊕次高位进位1,则OF=0【例】设AX=65A0H,BX=B79EH,指令ADDBX,AX的执行情况如下:BX=1D3EH,CF=1,SF=0,OF=0,AF=0,PF=0,ZF=0。2009年6月2日星期二4(2)带进位、借位的加减法指令ADC/SBB指令格式:ADC OPRD1,OPRD2SBB OPRD1,OPRD2指令功能:常用于长度为两个字或两个字以上的操作数的运算,加法操作时在最低位加上进位位CF,或减法操作时减去借位位CF。例如:如果有一个64位数据已存放在EAX(高32位)和EBX(低32位)中,现要加上一个常数123456789ABCDEF0H,这时可用下面两条指令实现:
ADDEBX,9ABCDEF0HADCEAX,12345678H2009年6月2日星期二5(3)增量和减量指令INC/DEC指令格式:INCMEM/REGDECMEM/REG功能:是单操作数指令,完成对指定的操作数加1/减1(1是隐含的),然后返回此操作数。注意:指令执行的结果影响标志位AF、OF、PF、SF和ZF,而不影响进位标志CF。例:INCCX;CX寄存器中的内容加1DECWORDPTR[EAX];把EAX指向的字存储单元内容减1在64位方式下,大多数INC/DEC指令都是可以使用的。但是单字节编码的INC/DEC指令因为与16个REX前缀代码相同,所以不能使用。2009年6月2日星期二6(4)求补指令NEG指令格式:NEG REG/MEM功能:用零减去操作数,再把结果送回操作数。该指令执行的效果是改变操作数的符号,将正数变成负数或将负数变成正数,但绝对值不变,所以又称为取负指令。注意:NEG指令影响所有状态标志:若操作数不是0,则总是使CF=1,否则置0;若在字节操作时对-128、或在字操作时对-32768求补、或在32位操作时对-232求补则操作数没变化,但溢出标志OF=1。例:NEGEBX;对EBX求补,即EBX←0-EBXNEGBYTEPTR[SI];对8位内存操作数求相反数NEGAL;AL←0-ALADDAL,200;以上两条指令实现AL←(200-AL)的运算NEGRAX;RAX←0-RAXNEGQWORDPTR[EAX];对64位内存操作数求相反数2009年6月2日星期二7(5)比较指令CMP指令格式:CMPOPRD1,OPRD2功能:将OPRD1-OPRD2,运算结果不送回OPRD1,执行后不改变源操作数和目标操作数,仅仅影响标志位,其它方面和SUB指令相同。讨论:1)如果是两个无符号数比较,可根据CF来判断:若CF=1,则OPRD1<OPRD2;若CF=0,则OPRD1>OPRD2。2)如果是两个有符号数比较,要根据SF和OF来判断:若SF⊕OF=0,则OPRD1>OPRD2;若SF⊕OF=1,则OPRD1<OPRD2。3)不管操作数有无符号,若ZF=1则两者相等,否则不等.2009年6月2日星期二8(6)交换加法指令XADD指令格式:XADDREG/MEM,REG功能:首先将两个操作数的内容交换,然后两个操作数的值相加,结果送入第一个操作数。(7)比较并交换指令CMPXCHG指令格式:CMPXCHGREG/MEM,REG功能:将目标操作数与AL、AX或EAX的内容进行比较:如果相等则ZF=1,并将源操作数送入目标操作数;否则ZF=0,并将REG/MEM送到相应的累加器。例如:CMPXCHGECX,EDX
若ECX=EAX,则ECX←EDX,且ZF=1;
否则,EAX←ECX,且ZF=0。2009年6月2日星期二9(8)8字节比较并交换指令CMPXCHG8B指令格式:CMPXCHG8BMEM64功能:将EDX(高32位):EAX(低32位)的值与内存单元MEM64中的64位数进行比较,若相等,则置ZF=1,并将ECX:EBX的值传送到MEM64指定的内存地址;否则,置ZF=0,将MEM64的8字节内容传送到EDX:EAX。
该指令只影响ZF标志。2009年6月2日星期二10二.乘除法指令指令名称指令书写格式状态标志位OFSFZFAFPFCF乘法不带符号乘法带符号整数乘法双操作数乘三操作数乘MULreg/memIMULreg/memIMULreg,mem/immIMULreg,reg/mem,immYYYY****************YYYY除法不带符号除法带符号整数除法DIVreg/memIDIVreg/mem************(1)乘法指令MUL/IMUL指令格式:MULREG/MEMIMULREG/MEM功能:分别用于实现无符号数的乘法和有符号数的乘法运算。它们都只有一个源操作数,可以是寄存器或存储器,而目标操作数隐含规定在累加器中。2009年6月2日星期二11(32位乘积)(16位乘积)╳(8位源操作数)ALsrcAX字节乘法AX(16位源操作数)src╳DXAX字乘法(64位乘积)╳(32位源操作数)EAXsrcEDXEAX32位乘法(128位乘积)╳(64位源操作数)RAXsrcRDXRAX64位乘法当乘积的高半部分(字节相乘时为AH、字相乘时为DX、双字相乘时为EDX、64位相乘时为RDX)不为0,则标志CF=OF=1,表示在AH(或DX、EDX、RDX)中存有结果的有效数字;否则CF=OF=02009年6月2日星期二12(2)除法指令DIV/IDIV指令格式:DIV REG/MEMIDIV REG/MEM功能:分别用于无符号数的除法和带符号数的除法运算。指令中对操作数的规定同乘法指令,除法指令执行后,所有的状态标志都不确定。商余数余数商32位被除数16位被除数AX8位ALAHDXAX16位AXDX余数商64位被除数EDXEAX32位EAXEDX余数商128位被除数RDXRAX64位RAXRDX若商超过存放它的寄存器的容量(分别为8位、16位、32位或64位)则引起0型中断(即除法出错中断),商和余数的值不能确定。2009年6月2日星期二13(3)有符号多操作数乘法指令指令格式一:
IMULreg16,reg16/mem16/imm16/imm8IMULreg32,reg32/mem32/imm32/imm8IMULreg64,reg64/reg32/mem64/imm32/imm8功能:用第一个操作数乘以第二个操作数,返回的积存放在操作数1指定的寄存器中。指令格式二:
IMULreg16,reg16/mem16,imm16/imm8IMULreg32,reg32/mem32,imm32/imm8IMULreg64,reg64/mem64,imm32/imm8功能:用第二个操作数乘以第三个操作数,返回的积存放在操作数1指定的寄存器中。两种形式中,对乘积都限制其长度与第一个操作数的要一致(为16位、32位或64位有符号数),如果溢出,则溢出部分丢掉,并置CF=OF=1,否则CF=OF=0,其余标志位无定义。2009年6月2日星期二14【例3.28】
IMULBX,CX;BX←BX×CXIMULBX,100;BX←BX×100IMULAX,[BX+DI],1342H
;AX←1342H×DS:[BX+DI]IMULAX,BX,30;AX←30×BXIMULEAX,EBX,123456H
;EAX←EAX×EBX×123456HIMULRAX,RBX,12345678H
;RAX←RAX×RBX×12345678H2009年6月2日星期二15三.符号扩展指令1.基本符号扩展指令CBW/CWDE/CDQE指令格式:CBWCWDECDQE功能:操作数隐含规定在累加器中。
CBW将AL中的字节符号数的符号扩展到AX中;
CWDE将AX中的字有符号数的符号扩展到EAX中;
CDQE将EAX中的字有符号数的符号扩展到RAX中,只能在64位方式下使用。扩展规则如下:①若AL<80H,则AH←0
若AL≥80H,则AH←0FFH②若AX<8000H,则EAX高16位←0
若AX≥8000H,则EAX高16位←0FFFFH③若EAX<80000000H,则RAX高32位←0
若EAX≥80000000H,则RAX高32位←0FFFFFFFFH这3条指令都不影响任何标志。2009年6月2日星期二162.双寄存器符号扩展指令CWD/CDQ/CQO指令格式:CWDCDQCQO功能:CWD功能为将AX寄存器的内容符号扩展到DX中;
CDQ指令的功能为将EAX寄存器的内容符号扩展到EDX中;
CQO指令的功能为将RAX寄存器的内容符号扩展到RDX中,只能在64位方式下使用。它们都不影响标志位。一般来说符号扩展指令大都与除法指令相结合,为达到被除数的位数要求而扩展。【例3.29】求0ABCH÷0200H(带符号数相除)由于除数为字,则必须将原来的被除数进行符号扩展后才能相除。MOV AX,0ABCHCWD ;被除数扩展为DX:AX=00000ABCHMOV BX,0200HIDIV BX ;AX←商0AH,DX←余数E5H2009年6月2日星期二173.扩展传送指令MOVSX/MOVZX指令格式:MOVSXREG16/REG32/REG64,REG8/MEM8/REG16/MEM16MOVZXREG16/REG32/REG64,REG8/MEM8/REG16/MEM16源操作数的长度小于目标操作数的长度;若目标操作数是64位寄存器,则该指令只能用在64位方式下。MOVSX用于传送有符号数,并将符号位扩展到目标操作数的所有位;MOVZX用于传送无符号数,将0扩展到目标操作数的所有位。常用于作除法时对被除数位数的扩展。
【例3.30】
MOVZXEAX,CX;将CX中16位数零扩展为32位送入EAXMOVSXRCX,AL;将AL内容符号扩展为64位送入RCX。2009年6月2日星期二18四.BCD算术运算指令(1)非压缩BCD码加/减法调整指令AAA/AAS指令格式:加法调整指令AAA
减法调整指令AAS功能:若(AL&0FH)>9或标志AF=1,则AL←AL±6AH←AH±1AF←1CF←AFAL←AL&0FH指令名称指令书写格式状态标志位OFSFZFAFPFCF加法的ASCII码调整加法的十进制调整减法的ASCII码调整减法的十进制调整乘法的ASCII码调整除法的ASCII码调整AAADAAAASDASAAMAAD***Y***Y*YYY*Y*YYYYYYY*N*Y*YYY1YYY**0000011000010010(AL&0FH>9)∧00001111(AL与0FH)0000011000000010(62的BCD码)0000001000000111(27的BCD码)+0000001100000101(35的B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际贸易合同样书一年
- 楼面天棚保温施工方案
- 五方通话对讲布线施工方案
- 嘉定区卫生间施工方案
- 矿场塌陷区改造方案
- 建筑工程清包合同范本-@-1
- 空心薄壁墩施工方案
- 壁炉施工方案
- 年再制造1万台康明斯发动机环评
- 2025年人力资源制度:04-【实习合同】-01-实习协议书
- 小学数学六年级下册《鸽巢问题》作业设计
- 2024年安徽水利水电职业技术学院高职单招(英语/数学/语文)笔试题库含答案解析
- 人教版五年级数学下册第六单元分层作业设计
- 电路分析课程思政报告
- 千分尺课件(公开课用)
- 绿色饭店培训课件
- 珍爱生命远离毒品禁毒教育宣传
- BI软件工程师个人年终工作总结
- 口腔执业医师考试
- 人工智能在电力行业的应用
- 军事理论课(野外生存)-课件
评论
0/150
提交评论