




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第七章数值运算程序设计 学习目的:熟练掌握算术运算指令、十进制运算调整指令的功能和使用方法,能够使用算术运算指令编制程序实现二进制、十进制数的加、减、乘、除等运算功能。 对于二进制数的运算,可以直接使用算术运算指令,因为算术运算功能的硬件实现都是基于二进制数的;对于十进制数的运算,只使用算术运算指令是不够的,必须配合使用一套运算调整指令,才能得到正确的运算结果。7.1.1二进制数加减运算 二进制数的加减运算直接使用算术运算指令就可以完成,只是需要注意多字节(多字)数据的加减法中需要使用ADC、SBB等指令处理进位和借位。 7.1.2十进制数加减运算 CPU的运算操作是以二进制数为基础的运算,不能直接进行通常意义下的十进制运算,如果需要使用十进制表示数据,那么需要做数制转换或者运算调整. 方法一:数制转换,把使用十进制表示的原始数据(例如ASCII码)转换为等价的二进制表示,完成二进制运算,把运算结果转换为十进制形式. 这种方法很直接,但是需要编制二、十进制数相互转换的子程序,会使整个运算时间加长。方法二:运算调整,使用特定的二进制编码来表示十进制数,也就是BCD编码,使用二进制运算指令,但是同时也使用运算调整指令对运算结果进行调整,使运算结果同样是BCD码,并且是正确运算结果的BCD码。 这种方法理解起来比较困难一些,但是在使用时非常方便,也能够提高运算过程的效率,因为直接使用BCD码不需要完成二、十进制数的相互转换。 这一章主要讨论的十进制运算方法也就是这一种方法。(1)BCD码 4个连续的二进制位可以看作一个十六进制位,其取值范围为0-F,如果把它的变化范围加一个限制,只能使用0-9的取值范围,那么就可以把它看作一个十进制位。 BCD码就是用4个二进制位来表示1个十进制位,变化范围限定为0-9。1)非组合类型的BCD码 一个字节的低4位表示一个BCD码,高4位可以为0,也可以为0011H(ASCII码字节,数字字符的ASCII码低4位就是一个BCD码)。 2)组合类型的BCD码 一个字节的低4位和高4位分别表示两个BCD码。 BCD码和数字字符的ASCII码之间有着必然的联系,把BCD码放在一个字节的低4位,高四位指定为0011H,那么这个字节就是对应十进制数字的ASCII码。(2)BCD码加法运算 首先考虑一位十进制数的加法运算会遇到一些什么情况. 1) 02H +03H 05H 特征:运算结果的低4位为0-9,AF=0 调整:虽然是十六进制的加法,但是运算特征和十进制加法完全一致,不需要任何调整。2) 08H +04H 0CH 特征:结果低4位大于9,AF=0 调整:对于十六进制加法来说,是逢16进1,但是对十进制加法来说,逢10就已经该进1了,此时两种加法产生了不一致,需要作调整。51H/0AH的商为08H(乘积十位上的BCD码),余数为01H(乘积个位上的BCD码) (3)BCD码除法调整指令 上面的例子中,只考虑了除数为一位BCD码的情况,如果除数为多位BCD码,那么和被除数一样,在实行除法过程以前,需要使用AAD指令把它调整为二进制数。 多精度数乘除法运算和BCD码乘除法运算非常相似,也是对手算方法的一个模仿过程。 2)组合类型的BCD码 调整过程:AH<=(AL)/0AH的商 对于十进制数的运算,只使用算术运算指令是不够的,必须配合使用一套运算调整指令,才能得到正确的运算结果。 教材上的示意图和程序中的描述不一致,这里采用修改示意图的方式作为更正。 调整:虽然是十六进制的加法,但是运算特征和十进制加法完全一致,不需要任何调整。 如果为0,表示对这一位BCD码进行减法时没有产生十进制借位。 调整:从十进制加法来说,这个运算应该进位,但是应该向高位进一个10,而不是 BCD码乘法考虑符号: 正+正=>直接进行BCD码加法运算,结果符号为正 2)相加的两个操作数都必须是两位BCD码构成的组合型BCD码。3) 09H +08H 11H 特征:运算结果低4位为0-9,AF=1 调整:从十进制加法来说,这个运算应该进位,但是应该向高位进一个10,而不是 16,所以多进了6,需要对运算结果作一定的调整。调整过程见如下框图:(注意,这是AAA这条指令的处理流程,不是某个程序的流程) BCD码减法的符号判断 调整过程见如下流程图: (2)BCD码加法运算 上面这个例子可以编制程序来实现,见教材P152的例7. 2)组合类型的BCD码 (5)非组合型BCD码减法调整指令AAS(ASCIIAdjustforSubtraction) (5)字节、字扩展指令 MOVSI,0 如果把17H看作十进制运算的结果,那么结果是正确的,因为9+8=17 特征:运算结果为0-9,AF=1, 01

王子****青蛙
实名认证
内容提供者


最近下载