A. 51單片機的問題,關於進位與溢出
1、呵呵,MOV R1,#100000,硬體里只有8位的存儲空間,硬塞個16位的數據下去是不可能的,因此這個指令在匯編時匯編器(軟體)會報錯的……當然也不排除某些匯編器不報錯,直接忽略高於8位的值;
2、OV位只是提供了一個帶符號數溢出的參考依據而已,用不用它取決於需求。
溢出位值的判斷依據是:最高位的進位狀況(有:1,無:0)和 次高位的進位狀況(有:1,無:0)取異或的結果。 也就是次高位進位狀況與最高位進位狀況不一致時OV被置1。 164的結果對8位帶符號數而言顯然是屬於溢出范圍的(倆正數相加變成了負數),對無符號數計算而言,可以在程序設計時忽略OV的值。
3、實現的方法是進行兩次8位的加法運算,最低8位用ADD指令,其餘用ADDC指令(即16位加法運算,參考代碼網路應該會出來一大堆),用兩個8位的寄存器(或RAM單元)來保存運算結果(16位運算結果);同理可推至32位運算、64位運算……
B. 單片機指令RLC A帶進位的循環轉移,怎麼進位呀進位進到哪裡去呀可以舉一個例子嗎
先看 RL A,這條指令只是把 A 中的八位數,循環左移。
再看 RLC A,這條指令把 A 中的八位數,以及C,共九位數,循環左移。
例如:C = 1,A = 0011 0000,執行RLC A 後:
A 中的最高位 0,移到C;C 中原來的 1,移到 A 的最低位。
結果:C = 0,A = 0110 0001。
------------------
如果執行 RL A,則僅有 A 循環移位,C 就不變了。
結果:C = 1,A = 0110 0000。
C. 單片機進位標志位C的問題
既然 ADD 會影響 C 標志,那麼執行 ADD 後 C 就必須反映出計算結果,所以 C = 0 。
D. 單片機里的加法進位等等問題
具體情況要看單片機的種類和它支持的指令了
比如既有ADD, 也有ADC(或ADDC),則ADD時,與之前的狀態無關,而ADC,則會把C加進去.而有的單片機只有ADC,那就要注意了,如果不希望以前有影響,就要自已清除標志.
你只要反復看指令的說明和舉例,就會弄懂的
E. 單片機 進位左移
增加一個全局變數,將循環常數給變數,再對變數做左循環,將變數賦值給p0,
uchar
a,b,
c;
在主循環中p0=_crol_(p0,1);
//p0的值向左循環移動
修改為
c=_crol_(c,1);
//p0的值向左循環移動
p0=c;
F. 單片機的進位標志CY是當第3和第7位有進位時位1
是的 都是從0開始的
G. 單片機里的加法進位等等問題
具體情況要看單片機的種類和它支持的指令了
比如既有ADD,
也有ADC(或ADDC),則ADD時,與之前的狀態無關,而ADC,則會把C加進去.而有的單片機只有ADC,那就要注意了,如果不希望以前有影響,就要自已清除標志.
你只要反復看指令的說明和舉例,就會弄懂的
H. 單片機中的加法指令,進位和半進位問題.
位3進位到位4了,同時AC=1
位7進位,因為沒有位8所以只有CY變成1
8位機,從右到左對應從
位0
到
位7
I. 單片機進位方面求教
呵呵,其實任何教科書上都有答案
(1)進位:PSW 中的C為進位位,當兩個位元組的數據相加時,最高位相加的結果如果有進位則C被置1,是為進位;
(2)半進位:還是PSW中AC為輔助進位位,該位在兩個位元組的數據相加,低4位的最高位相加的結果向高4位中的最低位有進位時被置1,因為一個位元組是8位,4位恰好位於其一半的位置,呵呵,應該就是你說的半進位(好像一般不這樣說)。
(3)溢出:當兩個位元組數據相加時,次高位向最高位的進位狀況和最高位向C的進位狀況不一致時,PSW里的OV位被置1,稱為數據溢出。
(4)奇偶校驗一般用於多機通信中,目的是防止傳輸過程中單位數據的畸變(由高電平「1」變為低電平「0」或由低電平變為高電平)。 一般做法是通過給數據補充一個校驗位[該位只有兩種取值:0或1],如果補充了新位後,原數據和校驗位的所有位中含有的1的個數總是奇數個,則為奇校驗;反之,如果補充了新位後,原數據和校驗位的所有位中含有的1的個數總是偶數個,則為偶校驗。例如,單片機PSW中的P位是對ACC中的數進行偶校驗補償(當ACC中有奇數個1時,該位為1,否則為0,這樣,ACC和P的所有位數據總是有偶數個1)
J. 單片機玩家請進:單片機程序狀態字中進位標志位置0位與置1位有疑惑,請高手解答!
是8位數相加大於FFH時cy=1,即8位數相加變為結果是9位數時cy=1. 相減時被減數小於減數時cy=1.