關(guān)于浮點(diǎn)數運算問(wèn)題
如圖1 這個(gè)程序中的數據比較,+3.0E-1,是表示小數0.3嗎?-3.0E-1,是表示小數0.3嗎?+0.0E+0,是表示數值 0 嗎?如果按這樣理解,這里面的浮點(diǎn)數加 0 又有什么意義呢?第二張圖,先理解BCD碼的運算法則
BCD碼的運算規則:BCD碼是十進(jìn)制數,而運算器對數據做加減運算時(shí),都是按二進(jìn)
制運算規則進(jìn)行處理的。這樣,當將 BCD碼傳送給運算器進(jìn)行運算時(shí),其結果需要修正!
修正的規則是:當兩個(gè)BCD碼相加,如果和等于或小于 1001(即十進(jìn)制數 9),不需要修
正;如果相加之和在 1010 到1111(即十六進(jìn)制數 0AH~0FH)之間,則需加 6 進(jìn)行修正;如
果相加時(shí),本位產(chǎn)生了進(jìn)位,也需加 6 進(jìn)行修正。這樣做的原因是,機器按二進(jìn)制相加,
所以 4 位二進(jìn)制數相加時(shí),是按“逢十六進(jìn)一”的原則進(jìn)行運算的,而實(shí)質(zhì)上是 2 個(gè)十進(jìn)
制數相加,應該按“逢十進(jìn)一”的原則相加,16 與10相差 6,所以當和超過(guò) 9或有進(jìn)位時(shí),
都要加 6 進(jìn)行修正。下面舉例說(shuō)明。 【例 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,即十進(jìn)制數 3,還產(chǎn)生了進(jìn)位。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,即十進(jìn)制的6,而且產(chǎn)生進(jìn)位。8+8=16,結論正確!
微機原理代碼: (AL=BCD 5,BL=BCD 8) 設AH=0,則
ADD AL,BL
AAA
結果為 AX=0104H,表示非壓縮十進(jìn)制數,CF=1,AF=1,AH=1,AL=1
使用AAA指令,可以不用屏蔽高半字節,只要在相加后立即執行AAA指令,便能在A(yíng)X中得到一個(gè)正確的非壓縮十進(jìn)制數
按BCD碼運算規則,+B #5 #6 D5 的計算方法是 0101 + 0110=1011 因為1011大于1001,所以加上0110修正,所以1011 +0110 =
10001,但官網(wǎng)講坐中,結果怎么是0011呢?!