《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令

上传人:aa****6 文档编号:57553536 上传时间:2018-10-22 格式:PPT 页数:60 大小:210.50KB
返回 下载 相关 举报
《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令_第1页
第1页 / 共60页
《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令_第2页
第2页 / 共60页
《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令_第3页
第3页 / 共60页
《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令_第4页
第4页 / 共60页
《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令》由会员分享,可在线阅读,更多相关《《汇编语言编程》ppt电子课件教案04算术与逻辑运算指令(60页珍藏版)》请在金锄头文库上搜索。

1、汇编语言课件04 算术与逻辑运算指令,算术运算类指令,算术运算类指令用来执行二进制的算术运算:加减乘除。 这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果 使用它们时请留心有关状态标志。,加法和减法指令,加法指令包含 ADD、ADC和INC三条指令 减法指令包括SUB、SBB、DEC、NEG和CMP五条指令。 除 INC和DEC不影响CF标志外,其它按定义影响全部状态标志位。,采用双操作数的加法、减法和后面介绍的逻辑运算指令具有共同的操作数组合形式: 运算指令助记符 reg , imm/reg/mem运算指令助记符 mem , imm/reg,1)加和减指令,ADD d

2、est, src ;加法:destdestsrc SUB dest, src ;减法:destdestsrc,加法指令与标志位,若(AL)=0E5H,执行ADD AL,0A4H AL及各标志位的情况?,CF=1,AF=0,PF=0,ZF=0,SF=1,OF=0,3AH + 7CHB6H,产生溢出:OF = 1 AAH + 7CH(1)26H,没有溢出:OF = 0,CF=0,AF=1,PF=0, ZF=0,SF=1,OF=1,CF=1,AF=1,PF=0, ZF=0,SF=0,OF=0,3AH7CHB6H,就是58124182, 已经超出128127范围,产生溢出,故OF1; 另一方面,补码B

3、6H表达真值是-74, 显然运算结果也不正确,关于溢出,处理器内部以补码表示有符号数 8位表达的整数范围是: 128 127 16位表达的范围是: 32768 32767 如果运算结果超出这个范围,就产生了溢出 有溢出,说明有符号数的运算结果不正确,溢出和进位,溢出标志OF和进位标志CF是两个意义不同的标志 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确; 溢出标志表示有符号数运算结果是否超出范围,如溢出,运算结果已经不正确。,溢出和进位的对比,例1:3AH + 7CHB6H 无符号数运算: 58124182范围内,无进位 有符号数运算: 58124182范围外,有溢出,例2:AA

4、H + 7CH(1)26H 无符号数运算: 170124294范围外,有进位 有符号数运算: 8612448范围内,无溢出,如何运用溢出和进位,处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。 应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。,例,若(AL)=0E5H,执行ADD AL,0A4H 后,AL及各标志位的情况?,CF=1,AF=0,PF=0, ZF=0,SF=1,OF=0,10001001= 137,结论:作为无符号数据

5、,数据已经溢出了(超过256),例,若(AL)=0E5H,执行ADD AL,0A4H 后,AL及各标志位的情况?,CF=1,AF=0,PF=0, ZF=0,SF=1,OF=0,10001001= -119,结论:作为有符号数据,数据无溢出(没超过-128),减法指令与标志位,执行指令MOV AL,-73SUB AL,-87 后,AL及各标志位的情况,1011 0111,1010 1001,0000 1110,CF=0,AF=1,PF=0,ZF=0,SF=0,OF=0,-73的补码表示,结果:14,-87的补码表示,AL=0EH,例,mov ax, 7348h ; AX7348 H add al

6、, 27h ; AX736FH,OF0、SF0、ZF0、CF0 add ax, 3fffh ; AXB36EH,OF1、SF1、ZF0、CF0 sub ah, 0f0h ; AXC36EH,OF0、SF1、ZF0、CF1,2)带进位加和减指令,ADC dest, src ;加法:destdestsrcCF SBB dest, src ;减法:destdestsrcCF ADC和SBB指令主要用于与ADD和SUB指令相结合实现多精度数的加法和减法。,例:无符号双字加法和减法,要计算 82347856H1234998H80004491H mov ax, 7856h ; AX7856H mov dx

7、, 8234h ; DX8234H add ax, 4998h ; AX1EEH,CF1 adc dx, 1234h ; DX9469H,CF0 sub ax, 4491h ; AXBD5DH,CF1 sbb dx, 8000h ; DX1468H,CF0,3)比较指令CMP,CMP dest, src ;做减法运算:destsrc CMP指令将目的操作数减去源操作数,但差值不回送目的操作数。比较指令通过减法运算影响状态标志,用于比较两个操作数的大小关系,4)增量和减量指令,INC reg/mem ;加1:reg/memreg /mem1 DEC reg/mem ;减1:reg/memreg/

8、mem 1 单操作数指令 主要是用于对计数器和地址指针的调整 它们不影响进位CF标志,但影响其它状态标志位,例,INC SI ; SI寄存器加1DEC BYTE PTR SI ; SI寄存器指向的内存字节单元减 1,5)求补指令NEG,NEG reg/mem (取补指令) ; reg/mem0reg / memNEG指令对标志的影响与用零作减法的SUB指令相同。 NEG指令也是一个单操作数指令,例,AL=13H,执行指令 NEG AL 后AL的值,AL(0EDH),乘法和除法指令,乘法和除法指令分别实现两个二进制操作数的相乘和相除运算,并针对无符号数和有符号数设计了不同指令 注意:加减指令不分

9、无符号数和有符号数,需要分别利用CF和OF,程序员自己确定运算结果是否正确,1)乘法指令,MUL r8/m8 ;无符号字节乘法:AXALr8/m8 MUL r16/m16 ;无符号字乘法:DX.AXAXr16/m16IMUL r8/m8 ;有符号字节乘法:AXALr8/m8 IMUL r16/m16 ;有符号字乘法:DX.AXAXr16/m16,乘法指令与标志位,乘法指令如下影响OF和CF标志: MUL指令若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1 IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1 用于判断乘积是字节、字还是双字 其余标志位

10、无定义,例 字节数据乘法:64HA5H,mov al, 64h ; AL64H,表示无符号数是100、有符号数也是100 mov bl, 0a5h ; BL0A5H,表示无符号数是165、有符号数则是91 mul bl ;无符号字节乘法:AX4074H,表示16500; OFCF1,说明AX高8位含有有效数值,不是符号扩展 imul bl ;有符号字节乘法:AXDC74H,表示-9100; OFCF1,说明AX高8位含有有效数字,不是符号扩展,2)除法指令,DIV r8/m8 ;无符号字节除法: ALAXr8/m8的商,AHAXr8/m8的余数 DIV r16/m16 ;无符号字除法: AXD

11、X.AXr16/m16的商,DXDX.AXr16/m16的余数 IDIV r8/m8 ;有符号字节除法: ALAXr8/m8的商,AHAXr8/m8的余数 IDIV r16/m16 ;有符号字除法: AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数,除法指令与标志位,除法指令使状态标志没有定义,但是却可能产生溢出。当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出,8086/8088CPU中就产生编号为0的内部中断。 对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位,发生除法溢出。对IDIV

12、指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-32768 32767范围内,则发生除法溢出。,除法指令使状态标志没有定义,但是却可能产生溢出。当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器 AL/AX不能表达,便产生溢出,8086/8088 CPU中就产生编号为0的内部中断 对DIV指令,除数为0,或者在字节除时商超过 8位,或者在字除时商超过16位,则发生除法溢出。对IDIV指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在3276832767范围内,则发生除法溢出,除法指令例,MOV AX,400H

13、;ax=400h=1024 MOV BL,0B4H ;bl=b4h=180(无符号数) DIV BL ;商al05h5,余数ah7ch124,MOV AX,400H ;ax=400h=1024 MOV BL,0B4H ;bl=b4h=76 IDIV BL ;商alf3h13,余数ah24h36,3)符号扩展指令,CBW ;字节转换为字:AL符号扩展成AXCWD ;字转换为双字:AX符号扩展到DX,DX.AX看作一个整体符号扩展指令常用来获得有符号数的倍长数据。例如获得有符号除法时倍长于除数的被除数。对无符号数应该采用直接使高8位或高16位清0的方法,获得倍长的数据。,MOV AX,-12345

14、 MOV BX,34 CWD ;DX.AXAX IDIV BX ;AXDX.AXBX,十进制调整指令,算术运算指令实现了二进制数的加减乘除,要实现十进制BCD码运算,还需要对二进制运算结果进行调整 8088/8086支持压缩BCD码调整指令和非压缩 BCD码调整指令。 压缩BCD码就是通常的8421码,它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即 00-99 非压缩BCD码用8个二进制位表示一个十进制位,实际上只是用低4个二进制位表示一个十进制位0-9,高4位任意,例:压缩BCD码加法调整指令,DAA ;压缩BCD码加法调整指令:将AL的加和调整为压缩BCD码 DAA指令

15、跟在以AL为目的操作数的ADD或ADC指令之后,对AL的二进制结果进行压缩BCD码调整,并在AL得到压缩BCD码结果。,MOV AL,68H ;al=68h,压缩BCD码表示真值68 MOV BL,28H ;bl=28h,压缩BCD码表示真值28 ADD AL,BL ;二进制加法:al=68h+28h=90h(144) DAA ;十进制调整:al=96h ;实现压缩BCD码加法:682896,AND dest, src ;逻辑与指令:destdestsrc OR dest, src ;逻辑或指令:destdestsrc XOR dest, src ;逻辑异或指令:destdest src TE

16、ST dest, src ;测试指令:destsrc NOT reg/mem,逻辑运算指令,逻辑运算指令与标志位,双操作数逻辑指令均设置CFOF0,根据结果设置SF、ZF和PF状态,而对AF未定义。单操作数逻辑非指令NOT不影响标志位。,逻辑运算指令的应用,AND指令可用于复位某些位(同0相与),不影响其他位:将BL中D3和D0位清0,其它位不变AND BL,0F6H ;(11110110B) OR指令可用于置位某些位(同1相或),不影响其他位:将BL中D3和D0位置1,其它位不变OR BL,9 ;00001001 XOR指令可用于求反某些位(同1相异或),不影响其他位:将BL中D3和D0位求反,其它不变XOR BL,9 ;00001001BXOR AX,AX ;AX=0,CF=ZF=0,MOV AX,0,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号