资源描述:
《第3章数据运算与输入输出107》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、新编汇编语言程序设计1第三章数据运算与输入输出3.1算术运算3.2循环3.3十进制数运算3.4逻辑运算3.5控制台输入和输出3.6移位和处理器控制习题三2本章的学习重点:数值计算与标志位;指针的使用;循环程序基本结构;输入输出与数制转换。33.1算术运算3.1.1加法指令3.1.2减法指令3.1.3乘法和除法指令3.1.4表达式计算4(1)ADD(Addition):加法指令格式:ADD目的操作数,源操作数功能:目的操作数←目的操作数+源操作数目的操作数:8/16/32位的寄存器/存储器源操作数:与目的操作数同类型的寄
2、存器/存储器/立即数例:ADDAX,SI;AX←(AX)+(SI),16位运算ADDX,3;X←(X)+3,运算位数由X的类型确定ADD[EBX],EDX;DS:[EBX]←DS:[EBX]+EDX,32位运算3.1.1加法指令5下面的指令无法确定操作数的类型,汇编时将报告错误:ADD[SI],5;两个操作数都没有明确类型如果目的操作数是DS:[SI]指向的字节存储单元,可以修改如下:ADDBYTEPTR[SI],5说明:加法指令执行后,状态标志CF,OF,ZF,SF,PF,AF按照运算结果被刷新;操作数可以是8位/16位/
3、32位,源操作数与目的操作数应该有相同的类型,不能同时为内存操作数。6(2)ADC(AdditionwithCarry):带进位的加法指令格式:ADC目的操作数,源操作数功能:目的操作数←目的操作数+源操作数+CF目的操作数:8/16/32位的寄存器/存储器源操作数:与目的操作数同类型的寄存器/存储器/立即数说明:该指令对标志位的影响、对操作数的要求与ADD指令相同;主要用于对数据分段相加时高位的加法运算。7[例3-1]X=33445566778899AAH,Y=123456789ABCDEF0H,计算Z=X+Y(对应的数据
4、段已经定义,变量X,Y,Z用DQ定义)MOVEAX,DWORDPTRX;取X的低32位,送入EAXADDEAX,DWORDPTRY;X,Y的低32位相加;(EAX)=778899AAH+9ABCDEF0H=1245789AH,CF=1MOVDWORDPTRZ,EAX;低32位的和送Z的低32位MOVEAX,DWORDPTRX+4;取X的高32位,送入EAXADCEAX,DWORDPTRY+4;X,Y的高32位及低位进位相加;(EAX)=33445566H+12345678H+CF=4578ABDFH,CF=0MOVDWORDP
5、TRZ+4,EAX;高32位的和送Z的高32位8[例3-2]A,B,C均为8位无符号数,求它们的和,送入SUM三个8b无符号数的和可能超过255,将它们的和保留为16b。MOVAL,A;取第一个数MOVAH,0;高8位清零,第一个数“零扩展”为16位MOVDL,B;取第二个数MOVDH,0;把第二个数“零扩展”为16位ADDAX,DX;加第二个数MOVDL,C;取第三个数,高8位已经为0ADDAX,DX;加第三个数MOVSUM,AX;保存三个数的和9这个问题的另一种方法:MOVAL,A;取第一个数MOVAH,0;高8位清零,准
6、备存放和的高8位ADDAL,B;加第二个数ADCAH,0;如果有进位,存入AHADDAL,C;加第三个数ADCAH,0;如果有进位,加入AHMOVSUM,AX;保存三个数的和10这个问题的第三种方法:.386……MOVZXAX,A;取第一个数MOVZXBX,B;取第二个数ADDAX,BX;加第二个数MOVZXBX,C;取第三个数ADDAX,BX;加第三个数MOVSUM,AX;保存三个数的和11[例3-3]P,Q,R均为8位有符号数,求它们的和,送入TOTAL将三个8b有符号数的和保留为16b。MOVAL,P;取第一个数CBW;
7、扩展为16位MOVDX,AX;第一个数转存入DXMOVAL,Q;取第二个数CBW;扩展为16位ADDDX,AX;加第二个数MOVAL,R;取第三个数CBW;扩展为16位ADDDX,AX;加第三个数MOVTOTAL,DX;保存三个数的和12本题另一种方法.386……MOVSXAX,P;取第一个数MOVSXBX,Q;取第二个数ADDAX,BX;P,Q相加MOVSXBX,R;取第三个数ADDAX,BX;与第三个数相加MOVTOTAL,AX;保存三个数的和13(3)INC(Increment):增量指令格式:INC目的操作数功能:目的
8、操作数←目的操作数+1目的操作数:8/16/32位的寄存器/存储器例:INCEBX;EBX←(EBX)+1,32位运算INCX;X←(X)+1,运算位数由X的类型确定INCWORDPTR[BX];DS:[BX]←DS:[BX]+1,16位运算说明:增量指令执行后,CPU的状态