⑴ 單片機程序里 帶進位減法怎樣進行十進制調整
51單片機的DA A指令,放在SUBB指令後面,是不起作用的;
必須把SUBB指令變換成ADD指令,才能用DA A指令進行調整。
這里提到了「減法」變換成「加法」,就要借用時鍾「倒撥」變成「正撥」的方法,倒撥15分鍾,和正撥45分鍾,效果相同。15和45就是以60為模的互補的數。
兩位十進制數,是以100為模的,減去60,和加上40,效果是相同的。
100,可以分解,寫成99+1,按照十六進制,可以寫成9AH。
那麼,將A和60相減,程序如下:
MOV R0, A ;保存被減數.
MOV A, #9AH ;100
CLR C
SUBB A, #60H ;減去減數,得到100的補數.
ADD A, R0 ;使用加法即可.
DA A ;調整為BCD數.
;完
⑵ 匯編中為什麼要有ADD與ADDC兩個指令。知道他們區別,但不知道為什麼要有另一個指令。
在匯編語言編程的時候,ADDC指令,即是帶進位的加法指令,用於多位元組加法運算,低位位元組相加可能產生進位,所以高位位元組運算時,必須使用帶進位的加法運算。
匯編中的ADD指令是加法指令,其功能是把源操作所指出的內容加到累加器A,其結果存在A中。但是對於多位元組數相加,就必須用ADDC指令了。因為ADDC指令的功能是把源操作數所指出的內容和累加器內容及進位標志CY相加,結果存於A中。
單片機中的匯編指令包括,算術操作類指令,布爾變數操作類指令,邏輯操作數指令,控制轉移類指令。其中算術操作類指令,又包括,加法、減法、加一、減一和乘法、除法運算指令。藉助溢出標志可以對有符號數進行補碼運算,藉助進位標志,可進行多精度加、減運算。
(2)51單片機daa指令為什麼不能減法擴展閱讀
兩數相加運算步驟:
1)把第一個數從它的存貯單元(Location)中取出來,送至運算器。
2)把第二個數從它所在的存貯單元中取出來,送至運算器;
3)相加;
4)把相加完的結果,送至存貯器中指定的單元。
ADD運算中的注意事項:
1)如果位7有進位,則進位標志Cy置「1」,否則清0;
2)如果位3有進位,則輔助進位標志Ac置「1」,否則清0;
3)溢出標志位OV:如果位6有進位,而位7沒有進位;或者位7有進位,而位6 沒有,則溢出標志位OV置「1」,否則清0。OV狀態,只有在帶符號數加法運算時才有意義。