《数据处理算数与逻辑运算指令.ppt》由会员分享,可在线阅读,更多相关《数据处理算数与逻辑运算指令.ppt(22页珍藏版)》请在三一办公上搜索。
1、3.5 算术运算类指令,算术运算对数据进行加减乘除基本的数据处理方法加减运算有“和”或“差”的结果外,还有进借位、溢出等状态标志,也是结果的一部分注意算术运算类指令对标志的影响掌握:加法和减法指令熟悉:乘法和除法指令理解:零位扩展和符号扩展,*/,3.5.1 加法指令,加法指令 ADD带进位加法指令 ADC增量指令 INC除INC不影响进位标志CF外其他指令按定义影响全部状态标志位按照运算结果相应设置各个状态标志为0或为1,数据传送类指令不影响(不改变)状态标志加法和减法指令根据结果按定义改变状态标志,1.加法指令ADD,目的操作数加上源操作数,和送到目的操作数ADD dest,src;加法:
2、destdestsrc寄存器与立即数、寄存器、存储单元的加法存储单元与立即数、寄存器的加法可以是字节加法、16位加法、32位加法。影响6个状态标志位,例,mov eax,0aaff7348h;EAXAAFF7348Hadd al,27h;al=48h+27h=6Fh;EAXAAFF736FH,OF0,SF0,ZF0,PF1,CF0add ax,3fffh;ax=736fh+3fffh=b36eh;EAXAAFFB36EH,OF1,SF1,ZF0,PF0,CF0add eax,88000000h;0aaffb36eh+88000000h;EAX32FFB36EH,OF1,SF0,ZF0,PF0,
3、CF1,2.带进位加法指令ADC,两个操作数相加,再加CF,结果送目的操作数按照定义影响6个状态标志位ADC dest,src;destdestsrcCF用于与ADD指令相结合实现多精度数的加法先将两个操作数的低32位相加(用ADD指令)再加高位部分、并将进位加到高位(用ADC指令)例64位数据相加程序mov eax,dword ptr qvar1;取低32位add eax,dword ptr qvar2;加低32位,设置CFmov edx,dword ptr qvar1+4;取高32位adc edx,dword ptr qvar2+4;加高32位,同时加CF,3.增量指令INC,只有一个操作
4、数:寄存器或存储单元对操作数加1(增量)再将结果返回原处INC reg/mem;加1:reg/memreg/mem1用于计数器和地址指针的调整不影响进位CF标志,影响其他状态标志位例如inc ecxinc esiinc wvarinc dvarebx+edi,3.5.2 减法指令,减法指令 SUB带借位减法指令 SBB减量指令 DEC求补指令 NEG比较指令 CMP除DEC不影响CF标志外其他按定义影响全部状态标志位,数据传送类指令不影响(不改变)状态标志加法和减法指令根据结果按定义改变状态标志,1.减法指令SUB,目的操作数减去源操作数,差送到目的操作数SUB dest,src;减法:des
5、tdestsrc寄存器与立即数、寄存器、存储单元的减法存储单元与立即数、寄存器的减法可以是字节、16位、32位减法。按照定义影响6个状态标志位,例,mov eax,0aaff7348h;EAXAAFF7348Hsub al,27h;EAXAAFF7321H,OF0,SF0,ZF0,PF1,CF0sub ax,3fffh;EAXAAFF3322H,OF0,SF0,ZF0,PF1,CF0sub eax,0bb000000h;EAXEFFF3322H,OF0,SF1,ZF0,PF1,CF1,2.带借位减法指令SBB,目的操作数减去源操作数,再减CF,结果送目的操作数按照定义影响6个状态标志位SBB
6、dest,src;destdestsrcCF用于与SUB指令相结合实现多精度数的减法先将两个操作数的低32位相减(用SUB指令)然后减高位部分、并减去借位(用SBB指令),3.减量指令DEC,对操作数减1(减量)再将结果返回原处DEC reg/mem;减1:reg/memreg/mem1用于计数器和地址指针的调整不影响进位CF标志,影响其他状态标志位例如dec ecxdec esidec wvardec dvarebx+edi,例大小写字母转换程序,;数据段msgbyte welcome,0;代码段mov ecx,(lengthof msg)-1;ECX等于字符串长度mov ebx,0;EBX
7、0指向头一个字母again:sub msgebx,a-A;小写字母减20H转换为大写inc ebx;指向下一个字母loop again;循环mov eax,offset msgcall dispmsg;显示,大写小写20H小写大写20H,4.求补指令NEG,对操作数执行求补运算,即用零减去操作数NEG reg/mem;reg/mem0reg/mem对标志的影响与用零作减法的SUB指令一样可用于求补码或由补码求其绝对值mov ax,0ff64hneg al;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1sub al,9dh;AX=FFFFH,OF=0,SF=1,ZF=0,PF
8、=1,CF=1neg ax;AX=0001H,OF=0,SF=0,ZF=0,PF=0,CF=1dec al;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=1neg ax;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=0,5.比较指令CMP,将目的操作数减去源操作数差值不回送目的操作数按照减法结果影响状态标志CMP dest,src;做减法运算:destsrc根据标志状态获知两个操作数的大小关系给条件转移等指令使用其形成的状态标志,SUB与CMP?,3.5.3 乘法除法等指令,算术运算类指令还有乘法除法指令零位扩展和符号扩展指令十进制调整指令,MUL IMUL
9、 DIV IDIVMOVZX MOVSX CBW CWD CWDE CDQDAA DAS AAA AAS AAM AAD,1.乘法指令,无符号数乘法指令 MUL有符号数乘法指令 IMUL计算二进制数乘法:A5H64H用MUL指令作无符号数乘法:4074H(16500)A5H(165)64H(100)用IMUL指令作无符号数乘法:DC74H(-9100)A5H(-91)64H(100),加减指令只进行无符号数运算利用CF和OF区别无符号数和有符号数,乘法指令,2.除法指令,无符号除法指令DIV和有符号除法指令IDIV除法指令可能产生除法溢出对DIV指令,除数为0,或者在字节除时商超过8位,在字除
10、时商超过16位,或者双字除时超过32位,则发生除法溢出对IDIV指令,除数为0,或者在字节除时商不在128127范围内,在字除时商不在3276832767范围内,或者在双字除时商不在2312311范围内,则发生除法溢出除法错溢出,将产生编号为0的内部中断,除法指令,3.零位扩展和符号扩展指令,零位扩展对应无符号数:MOVZX指令前面加0实现位数扩展80H:8位无符号数,零位扩展为16位:0080H符号扩展对应有符号数:MOVSX指令前面加符号位(最高位)实现位数扩展64H:8位有符号数,符号扩展成16位:0064HFF00H:16位有符号数据,符号扩展成32位:FFFFFF00H,都表达真值:-256真值-1,字节量补码:FFH,字量补码:FFFFH,双字量补码:FFFFFFFFH,位数加长,大小没变,零位扩展和符号扩展指令,4.十进制调整指令,算术运算指令实现二进制数的加减乘除十进制BCD码运算:对二进制运算结果调整压缩BCD码:4个二进制位表示一个十进制位一个字节表示两个十进制位:0099压缩BCD码调整指令:加法DAA和减法DAS非压缩BCD码:8个二进制位表示一个十进制位一个字节表示一个十进制位09ASCII码可以认为是非压缩BCD码非压缩BCD码调整指令:加法AAA、减法AAS、乘法AAM和除法AAD,