全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1579
推到 Plurk!
推到 Facebook!

如何將BCD碼減一

答題得分者是:阿信
topevo6
一般會員


發表:9
回覆:21
積分:16
註冊:2005-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-03 14:57:07 IP:59.113.xxx.xxx 未訂閱
我想在組合語言上做BCD碼減一,我知道BCD碼的加法為 在加法指令後加DA 為調整BCD碼,但只能用在加法指令後,減法根本無法使用 請問各位大大有其他方法嗎????
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-03 17:26:50 IP:61.66.xxx.xxx 未訂閱
減法跟加法一樣 16進制中 減1=加#FFH BCD中 減1=加#99H    貼個範例
;舉例71-55
        mov        R1,#71H
        mov        R2,#(9AH-55H)
        mov        a,R1
        add        a,R2
        da        a
        mov        R3,a
        nop
------------------- 美好的事物 稍縱即逝 發表人 - 阿信 於 2005/06/03 21:14:09
cls9215
一般會員


發表:18
回覆:28
積分:9
註冊:2004-12-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-03 18:20:12 IP:61.70.xxx.xxx 未訂閱
我也有類似的問題,能請阿信前輩對於你所的範例霞係說明一下嗎?(77-55) 如果1. r1=99h, 要如何減1呢? 2. 若經由 mov a,r1 da a 那麼a會等於99(十進制)數值嗎? 3.若我要將bcd減一的結果,不透過7447解碼輸出至7段顯示器,而是直接 透過p1.0~p1.7輸出至七段顯示器....應該怎麼做呢? 希望前輩先進能夠指點一下!! 謝謝!!!
topevo6
一般會員


發表:9
回覆:21
積分:16
註冊:2005-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-03 19:51:23 IP:59.113.xxx.xxx 未訂閱
我目前正設計一個計數器可上數及下數功能,上數的功能有出來能另外加上一段下數程式,程式如下 ;分別以RAM位址40H 41H 42H由高位數至低位數做5位數計數器暫存計數值 SUB1 ;計數器減1 CLR C SB1 MOV A,42H ;個位數及十位數減一 ADD A,#99 DA A MOV 42H,A MOV A,41H ;百位數及千位數減一 ADDC A,#99 DA A MOV 41H,A MOV A,40H ;萬位數及十萬位數減一 ADDC A,#99 DA A MOV 40H,A 執行後上數可執行,但下數卻變成亂數 請問我的這一段設計對嗎?

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-03 19:55:19 IP:211.22.xxx.xxx 未訂閱
po程式碼請縮排.不知如何做請參考版規. 煩請修改配合,謝謝!
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
topevo6
一般會員


發表:9
回覆:21
積分:16
註冊:2005-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-03 19:57:21 IP:59.113.xxx.xxx 未訂閱
抱歉,後來仔細看版主阿信的範例再對照的我的程式,我想是在ADD A,#99的#99未加十六進制符號;待我更改後再測試看看,感謝版主的指點
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-03 21:41:57 IP:220.228.xxx.xxx 未訂閱
回覆topevo6    發文章時 有個"#"  按下它 會出現 code /code 把程式碼放在中間 縮排效果才不會被清掉    你的程式應修改成下面這樣
SUB1:
        clr        C
SB1:
        mov        a,42h
        add        a,#99h
        da        a
        mov        42h,a            jc        SUB1_Exit ;沒有借位 高位元就不需要做減1
        mov        a,41h
        add        a,#99h
        da        a
        mov        41h,a
        
        jc        SUB1_Exit ;沒有借位 高位元就不需要做減1
        mov        a,40h
        add        a,#99h
        da        a
        mov        40h,a
SUB1_Exit:        
------------------------------------ 回覆cls9125 1.一樣的套用呀!
;舉例99-1 
        mov        R1,#99H
        mov        R2,#(9AH-1H)
        mov        a,R1
        add        a,R2
        da        a
        mov        R3,a
        nop
2.da a是十進制調整指令 用於BCD加法後 對BCD數值做十進制調整. 無法將99h變成99! 3.這個問題跟這個主題 "如何將BCD碼減一" 已經沒有直接關係了 應該另開主題 "如何不使用7447驅動七段顯示器" 不過 其實只要建表就解決了! ------------------- 美好的事物 稍縱即逝
topevo6
一般會員


發表:9
回覆:21
積分:16
註冊:2005-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-17 10:32:42 IP:59.113.xxx.xxx 未訂閱
引言: 減法跟加法一樣 16進制中 減1=加#FFH BCD中 減1=加#99H 貼個範例
;舉例71-55
        mov        R1,#71H
        mov        R2,#(9AH-55H)
        mov        a,R1
        add        a,R2
        da        a
        mov        R3,a
        nop
------------------- 美好的事物 稍縱即逝 發表人 - 阿信 於 2005/06/03 21:14:09
再請問版大: 上述範例是做2位數減法,那我要做二個4位數以上bcd相減的話該要如何解? 例如在內部RAM (40H)(41H)-(42H)(43H)=(40H)(41H) 上述RAM(40H)(41H)(42H)(43H)已轉BCD碼 1〉作法可否(40H)(41H)(42H)(43H)位址內容先轉十六進制碼後做相減,之後再轉BCD碼存入(40H)(41H)位址,好像很複雜的樣子有更簡單的做法嗎 2〉十六進制運算如果減數大於被減數相減的話,所產生的結果會不會正確,其負數該要如何表示?
系統時間:2024-05-17 23:12:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!