![计算机软硬件设计与实践:32算术运算_第1页](http://file4.renrendoc.com/view/76f8955733534aa3461ae7df32289e5c/76f8955733534aa3461ae7df32289e5c1.gif)
![计算机软硬件设计与实践:32算术运算_第2页](http://file4.renrendoc.com/view/76f8955733534aa3461ae7df32289e5c/76f8955733534aa3461ae7df32289e5c2.gif)
![计算机软硬件设计与实践:32算术运算_第3页](http://file4.renrendoc.com/view/76f8955733534aa3461ae7df32289e5c/76f8955733534aa3461ae7df32289e5c3.gif)
![计算机软硬件设计与实践:32算术运算_第4页](http://file4.renrendoc.com/view/76f8955733534aa3461ae7df32289e5c/76f8955733534aa3461ae7df32289e5c4.gif)
![计算机软硬件设计与实践:32算术运算_第5页](http://file4.renrendoc.com/view/76f8955733534aa3461ae7df32289e5c/76f8955733534aa3461ae7df32289e5c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算术运算类指令加法指令减法指令乘法指令除法指令算术运算类指令共同特点:用来执行算术运算,有单操作数指令,也有双操作数指令双操作数指令的两个操作数中除源操作数为立即数的情况外,必须有一个操作数在寄存器中。单操作数指令不允许使用立即数方式加法指令加指令ADD带进位加指令ADC加1指令 INCAAADAA加法运算除INC不影响CF位外,其余都影响条件标志位(CF ZF SF OF PF AF)CF位是根据最高有效位是否有向高位的进位设置的。有,CF1OF根据操作数的符号及变化情况来设置若两操作数符号相同,结果的符号与之相反,OF1OF表示带符号数的溢出CF表示无符号数的溢出加运算指令语句格式:ADD
2、 OPD, OPS功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。即(OPD)+(OPS)(OPD)。加指令ADDADD目的操作数可以是通用寄存器或存储器,源操作数可以是通用寄存器、存储器或立即数。注意目的操作数和源操作数不能同时是存储器操作数。段寄存器不能直接参加算术运算。加法指令的操作对象可以是16位或8位。 ADDADD AL,10ADD AX,BXADD DX,BETASIADD MEMDI,SI存储器与立即数相加,存储器的属性需要指定ADD DELTABX,1250H ;DELTA为字变量ADD BYTE PTR SI,25H ;指定存储器为字节类型语句格式
3、:ADC OPD,OPS功能:将目的操作数加源操作数再加低位进位,结果送目的地址。用法:该指令常用于多精度加法的计算。即(OPD)+(OPS)+CF (OPD)。【例】无符号双字加法运算。MOVAX,4652H;(AX)=4652HADDAX,0F0F0H;(AX)=3742H,CF=1MOVDX,0234H;(DX)=0234HADCDX,0F0F0H;(DX)=0F325H,CF=0带进位加指令ADC设在数据段定义了两个多精度的16进制数:FIRST和SECOND ,求两数之和,并将结果存放在THIRD为首地址的存储器中。Exp31.asmFIRST DW 758DH,9A5CHSECON
4、D DW 0A524H,8345HTHIRD DW 3 DUP(0)LEA SI,FIRST ;取加数的有效地址LEA DI,SECOND ;取被加数的有效地址LEA BX,THIRD ;取存放和的有效地址MOV AX,SI ;取加数的第一个字ADD AX,DI ;与被加数的第一个字相加MOV BX,AX ;存第一次运算的部分和PUSHF ;保护标志位 ADD SI,2 ;加数地址加2,指向下一加数的地址ADD DI,2 ;被加数地址加2,指向下一被加数的地址ADD BX,2 ;和地址加2,指向下一部分和的地址POPF ;恢复标志位MOV AX,SI ;从加数中取出第二个字ADC AX,DI
5、;与被加数的第二个字进行带进位相加MOV BX,AX ;存第二次部分和ADC WORD PTR BX+2,0 ;将进位存入和的第三字中语句格式:INC OPD功能:将目的操作数加1,结果送目的地址。即(OPD)+1OPD。INC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:INC BX,即(BX)+1BX。用法:加1指令可用于对计数器和地址指针进行调整,由于对CF无影响,所以无需保护状态标志位。 加1指令 INCINCINC CL ;8位寄存器加1INC SI ;16位寄存器加1INC BX ;16位寄存器加1INC MEM-BYTE DI ;字节存储器加1INC MEM-WO
6、RD SI ;字存储器加1语句格式:AAA 功能:未组合的BCD加法调整指令,亦可以作为ASCII码加法调整指令。用法:必须将其和放在累加器AL中,AAA指令要紧跟在加法指令之后使用。如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)+6 (AH)=(AH)+1(AF)=(CF)=1 且AL高4位清零。否则:(CF)=(AF)=0 AL高4位清零。加法的非压缩BCD码调整指令AAAAAA例如计算两个十进制数和8+6=?,程序段如下:MOV AX,0008HMOV BL,06HADD AL,BLAAA;调整后(AX)=0104H,(CF)=1AAA假设上述两个十进制数用ASCII码表示
7、,则变成38H+36H=?,其程序段如下:MOV AX,0038HMOV BL,36HADD AL,BL ;(AL)=6EHAAA ;(AX)=0104H加法的十进制调整指令DAA 语句格式:DAA功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。对OF无影响加法的十进制调整指令DAA 【例】压缩BCD码的加法运算。MOV AL,68HMOV BL,28HADD AL,BLDAA ;(AL)=68H,表示压缩BCD码68;(BL)=2
8、8H,表示压缩BCD码28;(AL)=68H+28H=90H;十进制调整:(AL)=96H;实现压缩BCD码加法:68+28=96DAA例如:对两个十进制数求和,78+56=?,可用如下指令实现:MOV AL,78H ;(AL)=78HADD AL,56H ;(AL)=CEHDAA ;(AL)=34H,(CF)=1减指令SUB带借位减指令 SBB减1指令DEC求补指令NEG比较指令 CMPAASDAS减运算指令减运算指令减法运算的条件码设置与加法运算类似OF根据操作数的符号及变化情况来设置若两操作数符号相反,结果的符号与减数相同,则OF1OF表示带符号数的溢出CF表示无符号数的溢出语句格式:S
9、UB OPD,OPS功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。即(OPD)(OPS)(OPD)指令将对CF、AF、SF、ZF、PF、OF状态标志位有影响,使用的操作数组合与ADD指令相同。减指令SUBSUBMOV AX ,5678H;(AX)=5678HSUB AX ,1234H;(AX)=4444HMOV BX ,3354H;(BX)=3354HSUB BX ,3340H;(BX)=0014HSUB AX,VARBX+SI SUB ALPHADI,DX语句格式:SBB OPD ,OPS功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。即(OPD)(OPS)CF
10、( OPD)用法:SBB指令常用于多精度的减法运算中。带借位减指令 SBB例求876A935247H-5A6C486D2BH=? Sbb.asm设数据在数据段中定义如下:DATA SEGMENT ;定义数据段minuend DB 47H,52H,93H,6AH,87Hsubtrahend DB 2BH,6DH,48H,6CH,5AHCOUNT EQU $- subtrahend;$地址计数器的值Minus DB COUNT DUP(O)DATA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATASUBTRACT PROC F
11、ARSTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,minuendLEA DI,subtrahendLEA BX,minusMOV CX,COUNTCLCAGAIN: MOV AL,SISBB AL,DIMOV BX,ALINC SIINC DIINC BXDEX CX ;CX(CX)-1JNZ AGNIN ;(CX)0转移MOV AH,4CH ;结束程序执行INT 21HSUBTRACT ENDPCODE ENDS ;代码段结束END START语句格式:DEC OPD 功能:将目的操作数减1,结果送目的地址。即(OPD)1(OPD)。标志位:除CF标志
12、位不受影响外,其余状态标志均受影响。目的操作数:可以放在通用寄存器和存储器中。如:DEC CX。即(CX)1CX。减1指令DEC也一般用于对计数器和地址指针的调整。减1指令DEC语句格式:NEG OPD0(OPD)(OPD)。操作数:可以是通用寄存器或存储器。标志位:影响SF、ZF、AF、PF、OF,在一般情况下,总使CF=1,除非操作数为零时,才使CF=0;OF标志一般情况下为0,但当操作为80H或8000H,NEG指令对其求补,结果与原操作数相同,此时OF=1。求补指令NEG【例】求补运算。MOVAX,0FF64HNEGALSUBAL,9DHNEGAXDECALNEGAX求补指令NEG;(
13、AX)=0FF9CH;(AX)=0FFFFH;(AX)=0001H;(AX)=0000H;(AX)=0000H比较指令 CMP语句格式:CMP OPD,OPS功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。即(OPD)(OPS)。用法:此指令常用于比较两个数的大小,当比较指令与条件转移指令结合使用时,可以完成各种条件判断和相应的程序转移。比较指令 CMP【例】比较AL的内容数值大小。CMPAL,50;(AL)50JBBELOW ;(AL)=50,( AL)50ALINCAH ;(AH)+1AHBELOW:在10个无符号数中求最大值,最大值存放在MAX变量中,Max.asmDATA
14、 SEGMENTBLOCK DB 1AH,5CH,62H,97H,0A5H,73H,05H,3AH,4CH,1BHMAX DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMAX-UN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK MOV CX,9 MOV AL,SIAGAIN: CMP AL,SI+1 JNC NEXT MOV AL,SI+1NEXT: INC SI DEC CX JNZ AGAIN MOV MAX,AL MOV AX,4C00H INT 21HMAX-U
15、N ENDPCODE ENDS END MAX-UN语句格式:AAS 功能:是未组合BCD码减法调整指令,可对AL中的两个未组合的十进制数相减的结果进行调整,使差成为正确的十进制数。如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)6 (AH)=(AH)1 (AF)=(CF)=1 AL高4位清零。否则:(CF)=(AF)=0 AL高4位清零。其他标志位OF、PF、SF、ZF不确定。减法的非压缩BCD码调整指令求257=?其结果用十进制数未组合的BCD码表示。可用下列指令完成这个十进制数减法MOV AX,0205HSUB AL,07HAAS; (AH)=02H,(AL)=05H; (A
16、L)=FEH, (AF)=1;(AH)=01H,(AL)=08H,(CF)=1求7446=?该数用ASCII码表示,则为3734H3436H,ASCVAL1 DB 37H,34HASCVAL2 DB 34H,36HASCVAL3 DB ?,?LEA SI,ASCVAL1+1LEA DI,ASCVAL2+1LEA BX,ASCVAL3+1MOV CX,2CLCAGAIN: MOV AL,SISBB AL,DIAASMOV BX,ALDEC SIDEC DIDEC BXDEC CXJNZ AGAIN减法的十进制调整指令DAS语句格式:DAS功能:如果(AF)=1或AL寄存器中低4位大于9,则(AL
17、)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)60H且(CF)=1。同时SF、ZF、PF均受影响。减法的十进制调整指令DAS【例】压缩BCD码的减法运算。MOVAL,68HMOVBL,28H SUBAL,BLDAS;(AL)=68H,表示压缩BCD码68;(BL)=28H,表示压缩BCD码28;(AL)=68H28H=40H;十进制调整:(AL)=40H;实现压缩BCD码减法:6828=4074-46=? 可用如下指令运算:MOV AL,74H ;(AL)=74HSUB AL,46H ;(AL)=2EHDAS;(AL)=28H,( CF)=1乘运算指令
18、无符号数乘法指令MUL有符号乘指令IMULAAM特点:目的操作数必须是累加器,源操作数可以使用除立即数方式以外的任一种寻址方法乘运算指令对CF和OF以外的条件码无定义(状态不定)对MUL指令,若乘积的高一半为0,CF和OF为0对iMUL指令,若乘积的高一半为低一半的符号扩展,CF和OF为0无符号数乘法指令MUL语句格式: MUL OPS (ops为reg/mem),功能: 若是字节数据相乘,(AL)与OPS相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。即字节乘法:(AL)* (OPS) (AX),字乘法:(AX) * (OPS) (
19、DX,AX)MUL特点:由于被乘数是隐含操作数,故在使用该指令前应将被乘数存入累加器AL、AX;标志位:只影响CF和OF标志位,其余标志不确定。乘法的类型由操作数的类型决定,例如操作数类型为字节时,则为字节相乘,即(AL)(reg8/mem8),其结果存放在AX中。无符号数乘法指令MUL【例】无符号数0A3H与11H相乘。MOVAL,0A3H;(AL)=0A3HMOVBL, 11H;(BL)=11HMULBL ;(AX)=0AD3H下面例子中乘数为存储器:MUL BYTE1;(AL)(BYTE1)AXMUL WORD1 ;(AX)(WORD1)DX:AX例如:MUL CL ;(AL)(CL)A
20、XMUL BX ;(AX)(BX)DX:AX有符号乘指令IMUL语句格式:IMUL OPS功能:字节乘法:(AL)*(OPS)(AX),字乘法:(AX)*(OPS)(DX、AX)。IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。 【例】有符号数0B4H与11H相乘。MOVAL,0B4H;(AL)=B4HMOVBL,11H;(BL)=11HIMULBL ;(AX)=0FAF4HAAM未组合的BCD码乘法调整指令AAM功能:它将AX中未组合BCD码的乘积调整为正确的未组合的BCD码,高位在AH中,低位在AL中。AAM具体操作如下:AHAL/0AH ;除10取整商AHA
21、LAL%0AH ;除10取余AL计算847569=? Mul.asm mul-input.asmDATA SEGMENTMULTCAN DB 84756COUNT EQU &-MULTCANMULTPLR DB 9ASCPROD DB COUNT+1 DUP(0),$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ,ES:DATAASCMUL PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT LEA SI,MULTCAN+COUNT1 LEA DI,ASCPROD+COUNT AND MULTR
22、LR,0FHAGAIN: MOV AL,SI AND AL,0FH MUL MULTPLR AAM ADD AL,DI AAA MOV DI,AL MOV DI1,AH DEC DI DEC SI LOOP AGAIN LEA SI,ASCPROD+COUNT MOV CX,COUNT+1NEXT: OR BYTE PTR SI,30H DEC SI LOOP NEXT MOV AX,4C00H INT 21HASCMUL ENDPCODE ENDS END ASCMUL除运算指令无符号除指令DIV有符号除指令IDIVAADCBWCWDCWDECDQ除运算指令特点:目的操作数必须存放在AX或D
23、X,AX中源操作数可以使用除立即数方式以外的任一种寻址方法除法指令对所有条件码均无定义无符号除指令DIV语句格式:DIV OPS功能:字节除法:(AX)/(OPS) (AL)(商)、(AH)(余数)字除法:(DX、AX)/(OPS) (AX)(商)、(DX)(余数)【例】写出实现无符号数0400H / 0B4H运算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(AL)=05H,余数(AH)=7CH 语句格式:IDIV OPS功能:字节除法:(AX)/(OPS) (AL)(商)、(AH)(余数)字除法:(DX,AX)/(OPS) (
24、AX )(商)、(DX)(余数)除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。【例】写出实现有符号数0400H /0B4H运算的程序段。有符号除指令IDIVMOVAX,0400H;(AX)=0400HMOVBX,0B4H;(BX)=0B4HIDIVBX;(AL)=0F3H,(AH)=24HAADAAD ;隐含操作数AH,AL指令功能:除法运算前,先调整被除数AX内容,将AX中的两个未组合的BCD码转换成一个字节的二进制数,即把非压缩型十进制数变成二进制数。其操作为:AL(AH)10+(AL)AH0AAD例如:设AX=3238H,CL=37H:AND CL,0FHAND AX,0
25、F0FHAADDIV CL ;AX=3238H,CL=07;AX=0208H,CL=07;AX=001CH,CL=07;AX=0004H语句格式:CBW功能:将AL中的符号位数据扩展至AH。【例】将字节数据扩展成字数据。MOVAL,0A5HCBWADDAL,70HCBW字节转换成字指令CBW;(AL)=0A5H;(AX)=0FFA5H;(AL)=25H;(AX)=0025H语句格式:CWD功能:将AX中的符号位数据扩展至DX 。【例】将字数据扩展成双字数据。MOVDX, 0MOVAX, 0FFABHCWD将字转换成双字指令CWD;(DX)=0;(AX)=0FFABH;(DX)=0FFFFH (
26、AX)=0FFABH指令功能:将EAX寄存器中的最高符号位扩展到EDX中,即将32位有符号数扩展到64位有符号数,以便实现有符号数双字除以双字操作数。例如EAX=73591B4CH,执行CDQ后,EDX=00000000H, EAX保持不变。 CDQ指令指令功能:将AX寄存器中最高符号位扩展到EAX的高16位。例如AX=ABCDH,执行CWDE指令后,EAX=FFFFABCDH。CWDE指令有符号数和无符号数除法程序设计DATA SEGMENTBYTE1 DB 80HBYTE2 DB 16HWORD1 DW 2000HWORD2 DW 012OHWORD3 DW 1000HDATA ENDSC
27、ODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATADIVX PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,WORD1 ;wordbyte DIV BYTE1 ;rmdr:quot in AH:ALMOV AL,BYTE1 ;ByteByteSUB AH,AH ;extend dividend in AHDIV BYTE2 ;rmdr:quot in AH:ALMOV AX,WORD3 ;Double word wordMOV DX, WORD2 ;dividend in DX:AXDIV WORD1 ;rmdr:quot in DX:AXMOV AX,WORD1 ;wordwordSUB DX,DX ;extend dividend in DXDIV WORD3 ;rmdr:quot in DX:AXMOV AX,WORD1 ;wordwordIDIV BYTE1 ;rmdr:quot in AH:ALMOV A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度农产品批发市场租赁合同范本全新版
- 2025年度个人投资借款借条合同范本
- 2025年度城市夜景照明工程劳务合作合同
- 2025年度智能交通信号系统维护与升级合同
- 2025年度江西标准离婚协议书范本更新与婚姻关系解除合同
- 2025年度养老产业连带责任担保合同模板
- 2025年度大型水利工程地质勘察及监测服务合同
- 2025年度个人消费过桥借款合同模板
- 2025年度汽车租赁行业法律法规咨询合同
- 2025年度建筑废弃物分类收集与运输合同
- 正月十五元宵节介绍课件
- 病毒性肺炎疾病演示课件
- 中考英语语法填空专项练习附答案(已排版-可直接打印)
- 口腔医学中的人工智能应用培训课件
- 软星酒店网络规划与设计
- 自然辩证法概论(新)课件
- 基层医疗机构基本情况调查报告
- 六西格玛(6Sigma)详解及实际案例分析
- 机械制造技术-成都工业学院中国大学mooc课后章节答案期末考试题库2023年
- 电解槽检修施工方案
- 正常分娩 分娩机制 助产学课件
评论
0/150
提交评论