1. 單片機程序菜鳥問題
CLR A
清楚累加器A,此時A的毀手內容為0
ADDC A,#00H
ADDC是帶進位的加法,之前最高位元組加完之後,如果有進1,則進位標志位C為1,如果纖臘嫌沒有進位,那麼C為0。ADDC A,#00H,把累加器A(內容為0)和立即數0(根據語境,這里是立即數,不是地址)執行帶進位加法(數和0相加,就是數本身,這里相當於A+C+0,即累加器(0)+C(即50H和53H相加後的進位,可能有進位,可能沒有進位)+ 立即數0,目的就是取出進位位C的值),相加的結果是0(如果之前沒有進位)或局大者1(如果之前有進位),相加結果放在累加器A內,後面的語句就是把A的內容存到地址00的地方去。舉個16進制數的加法的例子,例如0x445566 + 0xCC22AA = 0x1107810明白了嗎,最後那一句就是取出最高位的進位的,也即最高位第七位。再教你一個小知識,兩個數相加,結果最多隻比原來數字多一位,並且多出的這位數字不會超過1,比如9+9,最多隻是18,即十位是1,不會是2到9的,在比如說99+99=198,嘿嘿。懂了吧
雖然我不用匯編寫程序,但是看懂還是很容易的
2. 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位運算……
3. 單片機加法指令只怎麼執行的
A,30H是將30H內存中數加A放到A的存儲單元。84H+8DH,D是13,加4為17,0到15即0到F這16個數,結果為1,進位標志C為有效,然後加進8+8+C=17,還是保留1並進位,所以最後是11H。PSW是單片機內部標志寄存器,是單片機運行必不可少的基本運算基礎,CY是進位標志,是位元組內的,如第一個進位,AC是輔助進位,位元組間的,第二個進位就是。OV是溢出,這里結果大於FFH必定溢出,P那個忘了…我在床上呢不好查,不好意思,希望能幫到一些