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