zzgzlp
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 106 個
工控威望: 256 點
下載積分: 1709 分
在線時間: 96(小時)
注冊時間: 2012-12-10
最后登錄: 2024-09-12
查看zzgzlp的 主題 / 回貼
樓主  發(fā)表于: 2017-05-09 16:22
關于浮點數(shù)運算問題
如圖1 這個程序中的數(shù)據(jù)比較,+3.0E-1,是表示小數(shù)0.3嗎?-3.0E-1,是表示小數(shù)0.3嗎?+0.0E+0,是表示數(shù)值 0 嗎?如果按這樣理解,這里面的浮點數(shù)加 0 又有什么意義呢?

第二張圖,先理解BCD碼的運算法則  
BCD碼的運算規(guī)則:BCD碼是十進制數(shù),而運算器對數(shù)據(jù)做加減運算時,都是按二進  
制運算規(guī)則進行處理的。這樣,當將 BCD碼傳送給運算器進行運算時,其結(jié)果需要修正! 
修正的規(guī)則是:當兩個BCD碼相加,如果和等于或小于 1001(即十進制數(shù) 9),不需要修  
正;如果相加之和在 1010 到1111(即十六進制數(shù) 0AH~0FH)之間,則需加 6 進行修正;如  
果相加時,本位產(chǎn)生了進位,也需加 6 進行修正。這樣做的原因是,機器按二進制相加,  
所以 4 位二進制數(shù)相加時,是按“逢十六進一”的原則進行運算的,而實質(zhì)上是 2 個十進  
制數(shù)相加,應該按“逢十進一”的原則相加,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 結(jié)果大于 9   
+) 0 1 1 0 加 6 修正   
1 0 0 1 1 13 的 BCD碼   
結(jié)果是 0011,即十進制數(shù) 3,還產(chǎn)生了進位。5+8=13,結(jié)論正確。   
(2)將8以8421 BCD輸入機器,則運算如下:  
1 0 0 0  
+)1 0 0 0   
1 0 0 0 0 結(jié)果大于9  
+)0 1 1 0 加6修正  
1 0 1 1 0 16的BCD碼  
結(jié)果是0110,即十進制的6,而且產(chǎn)生進位。8+8=16,結(jié)論正確! 
微機原理代碼: (AL=BCD 5,BL=BCD 8) 設AH=0,則  
ADD AL,BL  
AAA  
結(jié)果為 AX=0104H,表示非壓縮十進制數(shù),CF=1,AF=1,AH=1,AL=1  
使用AAA指令,可以不用屏蔽高半字節(jié),只要在相加后立即執(zhí)行AAA指令,便能在AX中得到一個正確的非壓縮十進制數(shù)

按BCD碼運算規(guī)則,+B #5 #6  D5  的計算方法是   0101 + 0110=1011  因為1011大于1001,所以加上0110修正,所以1011 +0110 =
10001,但官網(wǎng)講坐中,結(jié)果怎么是0011呢?!