<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 匯編中 ADD 和ADDC 的理解

匯編中 ADD 和ADDC 的理解

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
書(shū)上講到ADDC指令會(huì )加上進(jìn)位標志位CY,可以方便的進(jìn)行多字節數連加運算。我想想,比如兩個(gè)數用ADDC相加有溢出,CY置1了,最后豈不是比正確的結果多了1?百思不得其解……

終于在百度上看到一個(gè)很好的回答(復制自百度知道):

本文引用地址:http://dyxdggzs.com/article/201611/323080.htm
 
ADD 兩數相加,不加進(jìn)位位。 ADDC 兩數相加,同時(shí)再加個(gè)進(jìn)位位。進(jìn)位當時(shí)為1就加1 為0就加0相當于不加 一般用在多字節數相加中。最低位相加,用ADD ,加完后,可能產(chǎn)生進(jìn)位,高字節相加就用ADDC 這樣,低字節相加產(chǎn)生的進(jìn)位就會(huì )被加進(jìn)來(lái)。 比如 0080H + 0180H 低字節相加用 ADD 80H+80H=100H 用ADD指令得到 00H 并溢出產(chǎn)生進(jìn)位 C=1 高字節 相加用 ADDC 00H+01H=01H 用 ADDC 指令兩數相加結果 01H會(huì )再加上進(jìn)位位 1 得到 02H 0080H+0180H = 02 00H 再比如 0080H + 0101H 80H+01H = 81H 沒(méi)有溢出進(jìn)位為 C=0 00H+01H =01H 用ADDC指令會(huì ) 再加進(jìn)位位 C=0 得到 01H 結果 0080H+0101H = 0181H
原來(lái)ADDC指令用于8位以上的數相加,而且要把低8位先分解出來(lái),用ADD先進(jìn)行運算,這時(shí)候的CY會(huì )影響高于8位的運算,要考慮進(jìn)去,此時(shí)再用ADDC,把CY也考慮進(jìn)去,算出高位的結果,再組合起來(lái)。原來(lái)如此。不過(guò)據自己了解,16位數據的操作,只能用DPTR,難倒結果要存在這里?噢,忘了可拆分保存在Rn里面了……
還有關(guān)于A(yíng)DD對OV標志位的影響,我也不大明白。書(shū)中說(shuō)的是,和第六,第七位成異或關(guān)系(最低位是0),這兩位同時(shí)有、無(wú)進(jìn)位,則OV清0;若這兩位一個(gè)有進(jìn)位,一個(gè)沒(méi)有,則OV置1。我也想了很久:發(fā)現這個(gè)問(wèn)題,貌似挺復雜的:

首先假定最高位作為符號位,那么能夠表示數字的剩下7位,也就是2的7次方:正負128。把0也算進(jìn)去,那么就是-128~+127。這個(gè)時(shí)候進(jìn)行加法運算,僅有第七位(符號位)有進(jìn)位的話(huà),OV置1,代表結果錯誤,正負被改變。同樣只有第六位進(jìn)位的話(huà),第七位也會(huì )被改變,OV置1,同樣正負改變,結果也是錯誤的。

但是我有兩個(gè)問(wèn)題:1——最高位代表符號是不是人為確定的??jì)蓚€(gè)41H相加,得到82H,OV置1是給程序員自己作參考的嗎?告訴你符號改變了?

2——假如第六第七位都進(jìn)行了進(jìn)位,那么就會(huì )有溢出才對,這時(shí)候OV不應該置1嗎?難道說(shuō)OV在A(yíng)DD的情況下為了不混淆,所以只用作報錯,而不再表示溢出了?異或第七位是符號位,不存在溢出的問(wèn)題?

最后關(guān)于DA(十進(jìn)制調整指令),我也不是很清楚為什么要用這東西,但是BCD碼和二進(jìn)制已轉換確實(shí)存在一個(gè)問(wèn)題:常用BCD碼就是0~9用二進(jìn)制0000~1001表示,這個(gè)一般都知道,但是表示有進(jìn)位的兩位十進(jìn)制數時(shí),是組合起來(lái)的表示的。例如:十進(jìn)制10對應BCD碼00010000,這時(shí)候二進(jìn)制00010000的十進(jìn)制值卻是16~!就這樣差6了!所以當微機預算得到00010000時(shí),想告訴你這個(gè)值是十進(jìn)制16,假如不經(jīng)過(guò)修正直接轉為BCD碼的話(huà),這個(gè)值卻成了10~!不過(guò)習慣了二進(jìn)制直接得出十進(jìn)制數,這個(gè)……貌似用不著(zhù),所以還是不清楚什么具體情況叫做:在進(jìn)行BCD碼運算時(shí)使用……



關(guān)鍵詞: 匯編ADDADD

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>