① 關於單片機編程減法問題,總感覺答案有點問題34H是什麼東西
答案沒有問題,就是這樣運算的,因為是16位的無符號二進制數,而一個內存單元只有8位,所以,這兩個16位無符號二進制數的儲存地址分別為30H31H、33H34H,30H和33H分別存儲16位數的高8位,31H和34H存儲低8位,做減法運算先計算低8位存入31H,再運算高8位結果存入30H。
② 51單片機中為什麼減法不用十進制調整
所謂的十進制調整,是匯編語言中的一條指令:DA A,這是對加法運算結果進行十進制調整,這樣,就可以直接進行十進制數的計算了。但是DA A指令只對加法指令有調整作用,即ADD,ADDC這兩條指令。而減法指令SUBB的計算結果是不能調整的,因此,減法不能十進制調整,而不是不用調整,用了調整反倒錯誤了。這些是用匯編語言寫程序時才考慮的問題。如果是用C語言寫程序就根本不用考慮這個問題,運算表達式是直接用十進制數的。
③ 單片機,減法
像這種專業性的一些知識,應該多注意一些相關的書籍來充實自己。
④ 單片機程序里 帶進位減法怎樣進行十進制調整
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數.
;完
⑤ 單片機 機械周期 加減乘除
以51單片機為例:
加法:ADD 1個機器周期(12個時鍾周期)
減法:SUBB 1個機器周期(12個時鍾周期)
乘法:MUL 4個機器周期(48個時鍾周期)
除法:DIV 4個機器周期(48個時鍾周期)
⑥ MCS-51單片機里的減法運算怎麼算的 比如0110 1010-1100 1001
MCS-51單片機里的減法運算, 比如0110 1010-1100 1001
0110 1010 6AH
- 1100 1001 - C9H
= 1010 0001 = A1H
不夠減 借位
⑦ 關於單片機SUBB帶借位減法指令!
是這樣的。SUBB的每條指令的執行周期為一個周期數。它會對PSW中的標志位Cy、AC、OV產生影響。當減法有借位時,則Cy=1;否則,Cy=0.若低4位向高四位有借位時,AC=1;否則,AC=0;進行減法運算時,最高位與次高位不同時發生借位,則0V=1,否則,0V=0。不知能否幫到你。
⑧ 新手求教單片機減法指令
減法指令如下:
SUBB A,direct
SUBB A,Rn
SUBB A,#data
SUBB A,@Ri
⑨ 單片機的帶借位減法
單片機中用到帶借位的減法是為了進行多位元組的減法運算,在進行高位位元組運算時,要同時減去低位位元組的借位,以得到正確的結果。
如果cy=1,SUBB #09H,#05H 結果是03H 不是很正確噢
首先你的指令是非法指令,計算機、單片機中的立即數是不能做目的操作數的,目的操作數是要保存結果的,而立即數是不能保存結果的。
要想完成你的運算想法,應該寫成如下形式:
MOV A,#9
SETB C
SUBB A,#5
即執行後: (A)-5-cy=9-5-1=3
結果為03H是正確的。
在進行最低位元組的減法運算時,即剛開始做減法,還沒有產生借位,應在運算前使cy=0
即 CLR C
MOV A,#DATA1
SUBB A,#DATA2
執行時, (A)-DATA2-cy=DATA1-DATA2-0
呵呵 滿意 就選滿意回答
⑩ 單片機實現十進制數減1的編程
51單片機的運算都是十六進制的,唯一的十進制調整指令DA
A,也只能用在ADD/ADDC指令之後,所以要做十進制的減法運算,也必須轉換為加法運算,然後再做十進制調整。十進制減1運算程序CLR
CMOV
A,#50H
ADD
A,#99H
;A=E9HDA
A
;A=49H