




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容: 提供加、减、乘、除、转换五种基本算术操作提供加、减、乘、除、转换五种基本算术操作; ; 利用十进制调整指令和ASCII调整指令对BCD码表示的 十进制数进行算术运算; 对带符号数与无符号数进行乘、除运算。对带符号数与无符号数进行乘、除运算。 (一)加法指令(Addition) (二)减法指令(Subtraction) (三)乘法指令(Multiplication) (四)除法指令(Division) (五)类型转换指令(Type Trans) (六)BCD码运算指令 二二算术运算指令算术运算指令(Arithmetic) 特点:特点: 大部分都影响标志位大部分都影响标志位,不同指令影响不同: (1) 加、减法指令影响加、减法指令影响 SF,ZF,AF,PF,CF,OF;SF,ZF,AF,PF,CF,OF; (2) (2) 加加1 1和减和减1 1指令不影响指令不影响CF;CF; (3) (3) 乘法指令影响乘法指令影响CF,OF;CF,OF; (4) (4) 除法指令使大部分标志位的状态不确定除法指令使大部分标志位的状态不确定; ; (5) (5) 对对BCDBCD码调整指令对标志位的影响不同码调整指令对标志位的影响不同; ; 源操作数可以是立即数、通用寄存器或者是存储器中的源操作数可以是立即数、通用寄存器或者是存储器中的 数,目的操作数可为通用寄存器或存储器中的数数,目的操作数可为通用寄存器或存储器中的数 都可以用于字节、字、双字的运算都可以用于字节、字、双字的运算; ; 8位二进制数可以表示十进制数的范围: 8位无符号十进制数的范围:0255 8位带符号十进制数的范围:128127 16位二进制数可以表示十进制数的范围: 16位无符号十进制数的范围:065535 16位带符号十进制数的范围:3276832767 字长为字长为 n n 位的位的带符号数,补码能表示范围为:-2 n-1 +2 n+1 1 如果运算结果超出该范围,叫补码溢出,简称溢出。溢出,简称溢出。 算术运算指令涉及的一些问题: 以8位二进制数为例分析一下数的溢出与进位情况: 下面分4种情况加以讨论: (1) 带符号数和无符号数都不溢出 (2) 无符号数溢出 (3) 带符号数溢出 (4) 带符号数和无符号数都溢出 (1 1) 带符号数和无符号数都不溢出带符号数和无符号数都不溢出 。 二进制数看作无符号数看作带符号数 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1+ 0 0 0 0 1 1 1 1 4 11+ 15 + 4 +1 1+ +1 5 相 加 标志 CF=0,OF=0 CF=0OF=0 溢出不溢出 不溢出 同符号数相加, 结果符号与其相同 (2 2) 无符号数溢出无符号数溢出 二进制数看作无符号数看作带符号数 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1+ 0 0 0 0 0 0 1 0 7 251+ 258 + 7 - 5+ + 2 相 加 标志CF=1, OF=0 CF=1 OF=0 溢出 溢出 若考虑进位 所代表的数值, 结果正确 不溢出 异号数相加 不可能有溢出 CF=1 (3 3) 带符号数溢出带符号数溢出 二进制数看作无符号数看作带符号数 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 0 0+ 1 0 0 0 0 1 0 1 9 124+ 133 + 9 +1 2 4+ +1 3 3 相 加 标志CF=0, OF=1CF=0 溢出不溢出 溢出 正正相加,结果为负 结果错 OF=1 (4 4) 带符号数和无符号数都溢出带符号数和无符号数都溢出 二进制数看作无符号数看作带符号数 1 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1+ 0 1 1 1 1 1 0 0 135 245+ 380 121 - 11+ 132 相 加 标志 CF=1, OF=1 CF=1OF=1 溢出 溢出 若考虑进位CF 所代表的数值, 结果正确 溢出 负负相加,结果为正 结果错 CF=1 结论结论: (1)带符号数相加溢出 根据OF判断带符号数产生溢出? OF=1 OF=1 同符号数相加,结果符号与其相反,同符号数相加,结果符号与其相反,产生溢出产生溢出; (结果是错误的)结果是错误的) OF=0 OF=0 没有产生溢出没有产生溢出; (结果是正确的(结果是正确的) (2)无符号数相加溢出 根据CF判断无符号数产生溢出? CF=1CF=1无符号数无符号数相加相加产生溢出产生溢出, ,但考虑进位所代表的数但考虑进位所代表的数 值后,结果并没有错。值后,结果并没有错。 (一)加法指令(Arithmetic) 1、 ADD(Addition)加法指令 2、 ADC(Add with carry)带进位加法指令 3、 XADD(Exchange Add)字节交换加法指令 4、 INC(Increment by 1)加 1指令 1、 ADD(Addition)加法指令 指令格式:ADD dest , src ;(dest) (dest)+(src) SrcSrc:立即数,寄存器,存储器。立即数,寄存器,存储器。 destdest:寄存器,存储器。寄存器,存储器。 例: ADD CX,1000H ;寄存器+立即数 ADD DX,SI ;寄存器+寄存器 ADD BX+DI,AX;寄存器+存储器 ADD EAX,BX+2000H;存储器+寄存器 ADD BYTE PTRDI,30H ;存储器+立即数 特点特点: 可以进行可以进行8 8位、位、1616位的位的无符号数和带符号数无符号数和带符号数的加法运算; 的加法运算; 源操作数和目标操作数源操作数和目标操作数不能同时为存储器不能同时为存储器, , 不能为段寄存器不能为段寄存器 ; 指令影响标志位的情况指令影响标志位的情况: OF=1OF=1, 8位带符号数相加,和超出范围(128127), 16位带符号数相加,和超出范围(-32768+32767); CF=1CF=1, 8位无符号数相加,和超过255, 16位无符号数相加,和超过65535。 其他条件标志(SF,AF,PF,ZF)根据定义设定。 例MOV AL,7EH;(AL)=7EH MOV BL, 5BH;(BL)=5BH ADD AL,BL;(AL)=7EH+5BH=D9H 影响标志位的情况: SF=1 , 结果最高位1 ZF=0 ,结果不等于0 AF=1 ,D3 位向D4 有进位 PF=0 ,”1”的个数为奇数 CF=0 ,无进位 OF=1 ,和超过127 (两个正数相加,结果为负;反之亦是)(两个正数相加,结果为负;反之亦是) 2、 ADC(Add with carry)带进位加法指令 格式:ADC dest,src ;(dest)(dest)+(src)+CFCF CF:CF: 进位标志CF的现行值(上条指令上条指令CFCF值值) 特点: 与ADD同。 用途:主要用于多字节运算中。 类型举例: ADC CX, 300 ;寄存器+立即数+CF ADC AL, BL;寄存器+寄存器+CF ADC DX, COUNTSI;寄存器+存储器CF ADC BLOCKDI, BX;存储器+寄存器+CF ADC BYTE PTR MEM, 6;存储器+立即数+CF 用途举例: 计算两个多字节数相加 3B74AC60F8H+20D59E36C1H=? 两个多字节数存放在: DATA1,DATA2的开始单元。 流程图 多字节数内存存放 程序: MOV CX, 5 MOV SI, 0; 清SI CLC;清CF LOOPER:MOV AL, SI+DATA2 ADC SI+DATA1,AL INC SI;(SI)+1 (SI) DEC CX;(CX)-1 (CX) JNZ LOOPER;(CX)0转 HLT;停机 3、XADD (Exchange Add)字节交换加法指令 格式: XADD dest,src ;(B/W/DW), (dest)(dest)+(src) dest : 寄存器、存储器。不能是段寄存器寄存器、存储器。不能是段寄存器 。 功能:将目的操作数送源操作数,相加的结果送目的操 作数 注:XADD指令的源操作数必须为寄存器,目的操作数可 为寄存器或存储器 XADD AX,BX XADD 1000H,EAX 标志位影响情况:影响SF,ZF,AF,PF,OF。不影响不影响CFCF。 4、INC (Increment by 1 )加 1 指令 格式: INC dest ;(B/W/DW), (dest)(dest)+1 dest : 寄存器、存储器。不能是段寄存器。寄存器、存储器。不能是段寄存器。 功能:对指定的目标操作数+1 操作数单元。 用途:用于在循环程序中修改地址指针和循环次数。 标志位影响情况:影响SF,ZF,AF,PF,OF。 不影响不影响CFCF。 操作数类型:可以是寄存器,存储器。不能是段寄存器。操作数类型:可以是寄存器,存储器。不能是段寄存器。 例: INC DL; 8位寄存器1 INC SI;16位寄存器1 INC BYTE PTR BXSI ;存储器1(字节操作 ) INC WORD PTR DI;存储器1(字操作) INC DS; 错 (二)减法指令(Subtraction) 1、SUB(Subtraction)减法指令 2、SBB(Subtraction with borrow)带进位减法指令 3、DEC(Decrement by 1 ) 减 1 指令 4、NEG(Negate) 求补指令 5、CMP(Compare) 比较指令 6、CMPXCHG(Compare 寄存器-立即数 SUB EBX,EDX;寄存器-寄存器 SUB CX, VAR1;寄存器-存储器 SUB ARRAYSI, AX;存储器-寄存器 SUB WORD PTRALPHABXDI,512H;存储器减立即数 这种指令影响标志位: AF、CF、OF、PF、SF、ZF标志。 2、SBB(Subtraction with borrow)带进位减法指令 格式:SBB dest,src;(dest)(dest)-(src)-CF CF: 进位标志CF的现行值(上条指令CF值) SrcSrc:立即数,寄存器,存储器。立即数,寄存器,存储器。 destdest:寄存器,存储器。寄存器,存储器。 指令影响标志位、B/W数运算情况同SBB 用途:用于多字节数相减 例:SBB BX,100H;寄存器-立即数 -CF SBB ECX,EDX;寄存器-寄存器-CF SBB AL, SI+DATA1;寄存器-存储器-CF SBB BP+DISP, BL;存储器-寄存器-CF SBB BYTE PTR SI+6,96H;存储器-立即数-CF 多字节数的加减综合举例 例:x、y、z均为32位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列 实现wx+y+24-z,结果放在W, W+2单元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元 说明:低16位加减用不带进位的指令; 高16位的加减用带进位的指令 3、DEC (Decrement by 1 ) 减 1 指令 格式: DEC dest ;(B/W/DW) (dest)(dest)-1 destdest : : 寄存器寄存器 、存储器。不能是段寄存器。、存储器。不能是段寄存器。 功能:对指定的目标操作数-1 操作数单元。 用途:用于在循环程序中修改地址指针和循环次数。 标志位影响情况:影响SF,ZF,AF,PF,OF。 不影响CF。 DEC 用途举例: MOV CX , 0FFFFH CYC: DEC CX JNZ CYC HLT 用于延时时间。 4、NEG (Negate) 求补指令 格式: NEG dest ;B/W/DW, (dest) 0 - (dest) dest : 寄存器 、存储器。 操作: 把操作数按位求反后末位+1。 (dest) 0FFFFH -(dest)+1 影响标志:AF、CF、OF、PF、SF、ZF。 CF:操作数为0时求补,CF=0 ; 一般使CF=1. OF: 对128 或32768求补,OF=1; 否则OF=0. 应用举例:求绝对值 在内存中, 从AREA1开始存放 100个带符号数。 求各数的绝对值,并 存于AREA2开始的单 元。 流程图 程序: LEA SI, AREA1 LEA DI, AREA2 MOV CX, 100 CHECK: MOV AL, SI OR AL, AL ;(AL)内容不变,置标志 JNS NEXT ;SF=0转NEXT NEG AL ;负数,求其正数的补码 NEXT: MOV DI, AL ;送目标 INC SI INC DI DEC CX JNZ CHECK HLT 5、CMP(Compare) 比较指令 格式:CMP dest,src; B/W (destdest)- -(srcsrc) 结果不送,但影响标志位。结果不送,但影响标志位。 影响标志:AF、CF、OF、PF、SF、ZF。 src: 立即数,寄存器,存储器。 dest:寄存器,存储器。 例: CMP AL,0AH;寄存器与立即数比较 CMP ECX, EDI;寄存器与寄存器比较 CMP AX, AREA1;寄存器与存储器比较 CMP BX+5, ESI;存储器与寄存器比较 CMP WORD PTR GAMMA,100H;存储器与立即数比较 用途: 用比较指令来比较两个数之间的关系: 两者是否相等,两个数中哪个大。 (1) 根据ZF标志,判断两者是否相等; (2) 根据CF标志, 判断两个无符号数的大小; (3) 用SF、OF标志,判断二个带符号数的大小。 (1 1) 根据根据ZFZF标志,可判断两者是否相等标志,可判断两者是否相等 例: CMP AX, BX ZF=1,结果为0,两者相等 ZF=0, 结果不为0,两者不相等 (2 2) 根据根据CFCF标志,标志, 判断两个无符号数的大小判断两个无符号数的大小 例: 比较AX,BX寄存器, 将大数 (AX) CMP AX,BX JNC NEXT ; CF=0转NEXT XCHG AX,BX NEXT: 结论:CF=0 ,(AX) (BX); CF=1, (AX) 0, B0 A0, B0 A0, B0, B0A0 (3 3) 用用SFSF、OFOF标志,判断二个带符号数的大小标志,判断二个带符号数的大小 四种情况讨论(操作数以8位为例): AB CMP A, B 结论 75 A0,B0 SF=0,OF=0 则:AB 57 情 况 A0, B0 SF=1,OF=0 则:AB -7 -(-5) -2 3 +127-63 A0,BB +127 -(-63) +190 4 -63+127 A0 SF=0,OF=1 则:AB SFOF=0 SF=1, 则:AB SFOF=0 SF=0,则:AB SFOF=1 ,则A第二个数,不做交换, 否则,(第二个字单元内容) (AX)。 再取第三个数, 经过99次比较,在(AX)中得到最大数。 编程: MOV BX,OFFSET BLOCK MOV AX,BX INC BX INC BX MOV CX,99 AGAIN:CMP AXCMP AX,BXBX JG NEXTJG NEXT ;如ZF=0且SF=OF,则转NEXT MOV AX,BX NEXT: INC BX INC BX DEC CX JNE AGAIN MOV MAX,AX;MAX单元存放最大值 小结:根据标志位来判断比较的结果 1)根据ZF判断两个数是否相等。若ZF=1,则两 数相等。 2)若两个数不相等,则分两种情况考虑: 比较的是两个无符号数 若CF=0,则被减数减数; 若CF=1,则被减数减数。 比较的是两个有符号数 若OFSF=0,则被减数减数; 若OFSF=1,则被减数减数。 6、比较并交换CMPXCHG( Compare AL的符号扩展到AH IDIV BL ; 0034H25H,结果为 ; (AH)=0FH, (AL)=01H (五) BCD码运算的十进制调整指令 l专用于对BCD码运算的结果进行调整 l包括:DAA/AAA、DAS/AAS、AAM、AAD l均为隐含寻址,隐含的操作数为AL和AH l为何要对BCD码的运算结果进行调整? BCD码本质上是十进制数,即应遵循逢十 进一的规则。而计算机是按二进制(十六进 制)进行运算,并未按十进制规则进行运算 。 调整原理:先看一个例子 例1: 0000 1000 8 + 0000 0101 + 5 0000 1101 13 结果为0DH。而在BCD码中,只允许09这10个数字出现, 0DH不代表任何BCD码。 为什么会出现这种情况呢?原因在于BCD码是逢十进一,但 计算机是逢十六进一;因此,应在个位补上6,促其产生进 位。 对上例的结果进行加6调整: 0000 1101 + 0000 0110 0001 0011 =13 例2 0000 1000 8 +0000 1001 +9 0001 0001 11 17 原因在于计算机在运算过程中,如遇到低4位往高4位产生进位时(此时 AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进 位,个位就会暗中丢失一个6,这就要进行加6调正。 对上例的结果进行加6调整: 0001 0001 + 0000 0110 0001 0111 =17 总的调整原理是: 凡遇到某4位二进制码对应的BCD码大于9时, 则加六进行调整;凡是低4位往高4位产生了 进位时,则加6进行调整。 (1)压缩BCD码加法调整DAA l指令操作(调整方法): 若AL的低4位9AF=1 则(AL)(AL)+6,AF1 若AL的高4位9CF=1 则(AL)(AL)+60H,CF1 l除OF外,DAA指令影响所有其它标志。 lDAA指令应紧跟在ADD或ADC指令之后。 1)加法的十进制调整指令 l两个压缩BCD码相加结果在AL中,通过DAA调整得到 一个正确的压缩BCD码. 例4: 0100 1000 48H MOV AL,48H + 0111 0100 74H MOV BL,74H 1011 1100 BCH ADD AL,BL + 0110 0110 66H DAA 1 0010 0010 1 22H (进位) (进位) 执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行 加66H调整,最后结果为: (AL)=22H, CF=1, AF=1 本指令对在AL中的由两个未组合的BCD码相加后的 结果进行调整,得到一个正确的未组合的BCD码。 lAAA指令只影响AF和CF,其余标志无定义。 lAAA指令应紧跟在ADD或ADC指令之后。 AAA指令的操作如下: 如果AL的低4位9AF=1,则: AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) CFAF 否则AL(AL)0FH (2)非压缩BCD码加法调整AAA 假定二数在内存中均是低位在前,高位在后,另留出 5个单元存放相加的结果。 内存中数据存放形式见下页图。 例3:有两个多位十进制数2658和3619 ,以非压缩的BCD码形 式存放在内存中,求二者之和。 即2658+3619=? 06H 02H 09H 01H STRING1 STRING2 08H 05H 06H 03H 被 加 数 加 数 数 据 段 8 5 6 2 9 1 6 3 SUM 结 果 程序段为: LEA SI,STRING1 ;STRING1偏移地址送SI LEA DI,STRING2 ;STRING2偏移地址 送DI LEA BX,SUM ;SUM偏移地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入职心态培训课件
- 倪莉莉公务礼仪课件
- 伸缩缝施工培训课件
- 智慧树知道网课《宠物手术(黑龙江生物科技职业学院)》课后章节测试答案
- 2025土管所公务员面试题目及答案
- 企业班前安全培训记录课件
- 企业春运安全培训课件
- 罪犯记分考核管理办法
- 兰西辅警考试题库2025(有答案)
- 衡水金卷四省(四川云南)高三联考9月联考英语(含答案)
- 2025中国人民抗日战争暨世界反法西斯战争胜利80周年阅兵观后感心得体会3篇
- 眼睛保健操教学课件
- 成人脑室外引流护理标准解读
- 义务教育阶段中小学学生转学申请表
- (高职)企业财务会计电子课件完整版PPT全书电子教案
- VTE的预防与治疗(课堂PPT)
- 第五章 新型化学纤维
- 建筑结构及选型
- 100关键字写字要诀(动画_mp3配音)2(1)
- 20130405DCS系统报警联锁调试记录
- 场记单模板(共20页)
评论
0/150
提交评论