1樓:做而論道
是不是做加法,凡是遇到上述情況都得修正?--是bcd碼的加法,就必須修正。
那為什麼我看到的某些加法運算沒有修正啊?--那就不是bcd碼的加法。
一般時,是用四位二進位制數,表示一位16進位制數(0~16),即0000~1111。
bcd碼,是用四位二進位制數,表示一位十進位制數 (0~9),即0000~1001。
如果是bcd碼的加法,就必須修正,否則就可能出現16進位制數,這個結果就不是bcd碼了。
2樓:藏在水中的人
由於bcd碼在微控制器中是以16進位制的形式儲存的,我們觀測到的值和微控制器實際儲存的值是不一樣的,例如bcd碼10,我們看到的值是10,但是微控制器實際儲存的值16,微控制器的運算也都是以16進位制的形式進行的,因此用微控制器進行bcd的運算都需要修正。不是bcd碼的運算,就不需要修正了。例如兩個正常的十進位制數 15+17=32;15對應的16進位制數是0fh,17對應的16進位制數是11h
相加寫成
mov a,#0fh
add a, #11h
結果為20h對應是進位制數為32
也可以寫成
mov a,#15d
add a, #17d ;結果一樣
3樓:匿名使用者
微控制器彙編的十進位制調整指令, 是為了讓程式設計簡單化, 可以直接以 十進位制 運算, 如
15+56=
mov a, #15h ; a = 15h ( 注意 要以 十六進位制 寫成 15h)
add a, #56h ; a = 15h+56h = 6bh
da a ; a = 6bh + 06h = 71h c = 0 進位標誌
68+75=
mov a, #68h
add a, #75h ; a = 68h+75h = ddh
da a ; a = ddh + 66h = 43h c = 1 = 143
; 注 十進位制調整指令 必須跟在加法指令後面
; 否則會出錯。
4樓:山魚
如果是bcd碼,就必須修正,這樣得到的結果才是bcd碼
5樓:匿名使用者
只有bcd碼相加才用
6樓:筱悠
要具體看程式的要求的,有的程式不是用的bcd碼的話就不用這樣的。。。多看看多想想就清楚了
微控制器組合語言十進位制調整da
7樓:做而論道
……mov a, r3 ; a = 19hadd a ,#1 ;a = 1ahda a a = 20h……
微控制器中十進位制調整指令:da a是什麼意思?
8樓:物理狂人
bcd碼轉換指令;
比如說:
81d+91d=172d
而:81h+91h=112h
這裡為了將81h+91h結果與81d+91d一致,經過da有:
da(112h)=112h+60h=172h雖然一個是16進位制一個是10進位制但172在形式上是相等的。
mov r5,#81h
mov a, #91h
add a, r5
da a
首先81h+91h=112h,此時ac=0,cy=1,a=12h,所以da a後a=12h+60h=72h,ac=0,cy=1,結果為172h,當然運算應該理解為81d+91d=172d。
9樓:
一般用在加法運算中,作用:把a中的數,變為bcd碼的形式結果在:cy,ac,和a中
例如:mov a,#100
addc a,#25
da a
結果是:a=83h,cy=0,ac=1
10樓:匿名使用者
這條指令對累加器中由上一條加法指令(加數和被加數均為要所bcd嗎)所獲得的8位結果進行調整,使它調整為八位壓縮bcd碼的數。
例如:(a)=55,(r5)=67
add a,r5
da a
結果為(a)=23,cy=1.
11樓:天下信義
da a,就是把a中的運算元轉換成10進位制
組合語言中為什麼要有十進位制調整指令,原因是什麼?
12樓:做而論道
cpu 的運算指令,是按照二進位制數進行計算的。
參加運算數字,如果,你用的是 bcd 碼,那麼,運算結果,也就變成了一般的二進位制數。
難道,你不想把它們,再變成 bcd 碼?
求微控制器組合語言怎樣程式設計才能實現將一個十六進位制數轉換為十進位制數 20
13樓:匿名使用者
程式經過**除錯通過,如下所示:
mov r0, tl0
mov r1, th0
clr a
mov r2, a;先清零
mov r3, a
mov r4, a,
mov r5, #16;共轉換十六位數loop:
clr c
mov a, r0;從待轉換數的高階移出一位到cyrlc a
mov r0, a
mov a, r1
rlc a
mov r1, a
mov a, r4;送到bcd碼的低端addc a, r4;帶進位加。自身相加,相當於左移一位da a ;十進位制調整,變成bcd碼mov r4, a
mov a, r3
addc a, r3
da a
mov r3, a
mov a, r2
addc a, r2
mov r2, a
djnz r5, loop;共轉換十六位數;-------至此,已經把th1 tl1中的數字,轉換成bcd碼,送到了r2 r3 r4。
;-------下面,分別存入r4 r3 r2 r1 r0。
mov a, r4
mov b, #16
div ab
mov r1, a
mov r0, b
mov a, r2
mov r4, a
mov a, r3
mov b, #16
div ab
mov r3, a
mov r2, b
ret希望對你有所幫助!
14樓:匿名使用者
用除法例如 0xff 轉換成十進位制數,百位十位個位分別存在r1、r2、r3中
在51微控制器中暫存器a中的數除以暫存器b中的數,商存在a,餘數存在bmov a,#0ffh
mov b,#100
mul a,b
mov r1,a //存百位mov b,a
mov b,#10
mul a,b
mov r2,a //存十位mov r3,b //存個位
15樓:
mov r6,#00h;存轉化後的數的低位mov r5,#00h;存轉化後的數的高位mov r7,#0ffh;為要轉化的
mov a,r7
cjne a,#00h,loop;判斷要轉化的數是否為0ajmp loop1
loop;mov a,r6
add a,#01h
da a
mov r6,a
addc a,#00h
da a
mov r5,a
djnz r7,loop
loop1:sjmp $
16樓:做而論道
一樓的,是在什麼地方抄的吧?文字註釋,看著眼熟。
呵呵,原來是我以前寫的答案。
17樓:匿名使用者
你確定你要的是十六進位制轉換成十進位制的程式?不是二進位制轉成十進位制的嗎?微控制器中的資料可都是二進位制的,只是通常用十六進位制表示罷了,我以前也犯過這個錯誤
微控制器程式裡 帶進位減法怎樣進行十進位制調整
18樓:匿名使用者
如果是51微控制器的抄話,做襲
十進位制減法運算,只能用add和addc指令做,因為只有這兩條加法指令運算的結果才能用da a指令進行十進位制調整。方法是:如y=a-b,變成y=a+(-b),做加法之前將-b變成補碼就可以了。
提倡用keilc寫程式,就不用考慮什麼十進位制調整了,也不管是加法還是減法了,多好哇。
19樓:做而論道
51微控制器的da a指令du,放在subb指令後面,是不起作用zhi的;
必須把daosubb指令變換版成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數.;完
十進位制調整指令daa的功能以及調整過程是什麼? 10
20樓:匿名使用者
舉個例子好過copy廢話連篇:
兩個壓縮的bcd數相加,如15h + 16h,結果為2bh,執行daa後,結果變為31h(就好像執行了一次10進位制加法一樣)。
壓縮的bcd,意思是用4位來表示一個10進位制數(0-9),這樣一個位元組就可以放兩個壓縮的bcd數。daa,具體含義是把al中的和調整為壓縮的bcd格式,之前必須執行add或adc指令。而這加法指令必須把兩個壓縮的bcd數相加,把結果存放到al中。
又如10h + 0fh,這樣的不是標準的bcd數相加,使用daa後,還是按照daa的調整方式得到25h。
微控制器組合語言中是什麼意思,在微控制器組合語言中c是什麼意思
原地踏步的意思 等價於loop sjmp loop 代指本指令的 地址。如果sjmp 的起始地址是1010h,則在編譯的時候編譯器把 編譯為這專個起始地址屬1010h,就等於sjmp 1010h,執行完這指令後還跳到這個地址再執行它。無限迴圈直到微控制器沒電。指當前地址,可以有多種應用。比如 got...
在微控制器組合語言中c是什麼意思,微控制器組合語言中 CY AC OV 分別是什麼意思?
進位標誌位cy或布林處理器中的累加器。c為進借位標誌位bai,就是ducy 意思是兩數相加zhi addc指令 有進位就置c為1,兩數減dao subb指令 有借內位就置c為1,上面兩種請況c的置容1是系統自動的。另外還可以自己對c進行操作 指令如下 mov c,bit 將bit位地址中的值送psw...
微控制器組合語言指令中中斷返回指令RET和RETI有什麼不同
ret是子程式返bai回指令,返 du回到呼叫該子程式處zhi的下一條指令執dao行,返回的地址是從專ret執行前的sp中最屬後兩個值。reti是中斷服務程式返回指令,返回到進入中斷服務的斷點處執行,返回的地址是從reti執行前的sp中最後兩個值。ret是普通子程式的返回指令,而不能用reti,所以...