zzgzlp
级别: 略有小成
精华主题: 0
发帖数量: 106 个
工控威望: 256 点
下载积分: 1739 分
在线时间: 95(小时)
注册时间: 2012-12-10
最后登录: 2024-05-14
查看zzgzlp的 主题 / 回贴
楼主  发表于: 2017-05-09 16:22
关于浮点数运算问题
如图1 这个程序中的数据比较,+3.0E-1,是表示小数0.3吗?-3.0E-1,是表示小数0.3吗?+0.0E+0,是表示数值 0 吗?如果按这样理解,这里面的浮点数加 0 又有什么意义呢?

第二张图,先理解BCD码的运算法则  
BCD码的运算规则:BCD码是十进制数,而运算器对数据做加减运算时,都是按二进  
制运算规则进行处理的。这样,当将 BCD码传送给运算器进行运算时,其结果需要修正。  
修正的规则是:当两个BCD码相加,如果和等于或小于 1001(即十进制数 9),不需要修  
正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;如  
果相加时,本位产生了进位,也需加 6 进行修正。这样做的原因是,机器按二进制相加,  
所以 4 位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是 2 个十进  
制数相加,应该按“逢十进一”的原则相加,16 与10相差 6,所以当和超过 9或有进位时,  
都要加 6 进行修正。下面举例说明。   【例 1.3】 需要修正 BCD码运算值的举例。   
(1) 计算 5+8;(2) 计算 8+8   
解:(1) 将 5 和 8 以 8421 BCD输入机器,则运算如下:   
0 1 0 1   
+) 1 0 0 0   
1 1 0 1 结果大于 9   
+) 0 1 1 0 加 6 修正   
1 0 0 1 1 13 的 BCD码   
结果是 0011,即十进制数 3,还产生了进位。5+8=13,结论正确。   
(2)将8以8421 BCD输入机器,则运算如下:  
1 0 0 0  
+)1 0 0 0   
1 0 0 0 0 结果大于9  
+)0 1 1 0 加6修正  
1 0 1 1 0 16的BCD码  
结果是0110,即十进制的6,而且产生进位。8+8=16,结论正确。  
微机原理代码: (AL=BCD 5,BL=BCD 8) 设AH=0,则  
ADD AL,BL  
AAA  
结果为 AX=0104H,表示非压缩十进制数,CF=1,AF=1,AH=1,AL=1  
使用AAA指令,可以不用屏蔽高半字节,只要在相加后立即执行AAA指令,便能在AX中得到一个正确的非压缩十进制数

按BCD码运算规则,+B #5 #6  D5  的计算方法是   0101 + 0110=1011  因为1011大于1001,所以加上0110修正,所以1011 +0110 =
10001,但官网讲坐中,结果怎么是0011呢?!