標(biāo)題: 51單片機(jī)一起學(xué)匯編—BCD調(diào)整 數(shù)據(jù)處理 [打印本頁(yè)]

作者: zhouchuantao    時(shí)間: 2019-3-9 21:55
標(biāo)題: 51單片機(jī)一起學(xué)匯編—BCD調(diào)整 數(shù)據(jù)處理
/***********BCD調(diào)整**************/

      ORG  0000H
      JMP START
START:
      MOV SP,#7FH     ;設(shè)置堆棧地址
      MOV 50H,#69H    ;十六機(jī)制立即數(shù)69H 載人地址為50H寄存器中
      MOV R3,50H      ;運(yùn)行DEBUG時(shí) 在R2中查看數(shù)據(jù)
      MOV R0,#60H     ;十六機(jī)制立即數(shù)60H 載人R0寄存器中
      MOV A,50H       ;地址為50H寄存器中的數(shù)據(jù) 載人累加器ACC中
      ANL A,#0F0H     ;累加器ACC中的高四位數(shù)據(jù)和十六進(jìn)制的立即數(shù) F0H  邏輯 與 運(yùn)算
      MOV @R0,A       ;累加器ACC中的數(shù)據(jù) 載入以R0中的數(shù)據(jù)為地址的寄存器中   注意間接尋址:@R0=50H,50H作為寄存器地址使用,而不是數(shù)據(jù)
      MOV 30H,@R0     ;@R0間接尋址的數(shù)據(jù) 載入30H寄存器中
      MOV R1,30H      ;運(yùn)行DEBUG時(shí) 在R2中查看數(shù)據(jù)
      MOV A,50H       ;寄存器50H 中的數(shù)據(jù) 載入累加器ACC
      ANL A,#0FH      ;累加器ACC中的低四位數(shù)據(jù)和十六進(jìn)制的立即數(shù) 0FH  邏輯 與 運(yùn)算
      INC R0          ;寄存器R0中的數(shù)據(jù)加1
      MOV @R0,A       ;累加器ACC中的數(shù)據(jù) 載入以R0中的數(shù)據(jù)為地址的寄存器中
      MOV 31H,@R0     ;@R0間接尋址的數(shù)據(jù) 載入30H寄存器?
      MOV R2,31H      ;運(yùn)行DEBUG時(shí) 在R2中查看數(shù)據(jù)
      JMP START       ;調(diào)回開(kāi)始


作者: zhouchuantao    時(shí)間: 2019-3-10 12:04
/*************************
題目要求
已知 X Y,計(jì)算Z值, 結(jié)果存 20H 單元中
  Z=X-Y(X≥0)
  Z=X+Y(X<0)

需要知識(shí):存儲(chǔ)寄存器中的正數(shù)和負(fù)數(shù)

************************/  

            X DATA 30H                ;未知數(shù)X 用寄存器30H代替   DATA是個(gè)偽指令
            Y DATA 31H                ;未知數(shù)Y 用寄存器31H代替

            ORG 0000H                 ;程序開(kāi)始地址
            JMP START                 ;跳轉(zhuǎn)主程序
START:
            MOV SP,#7FH               ;堆棧地址7FH
            MOV X,#-9                 ;以30H為地址的寄存器中 載入初值 負(fù)9
            MOV Y,#1                  ;以31H為地址的寄存器中 載入初值 1
            MOV A,X                   ;X 的初值 載入A中
            MOV B,Y                   ;Y 的初值 載入B中
            JB Acc.7,Positive         ;ACC.7位是1還是0,判斷X是正數(shù)還是負(fù)數(shù), 如是正數(shù)跳轉(zhuǎn)加法運(yùn)算,如是負(fù)數(shù)執(zhí)行下一條道減法運(yùn)算
            CLR C                     ;PSW.7位   CY位需要清零,不能影響到加減法結(jié)果
            SUBB A,B                  ;減運(yùn)算,結(jié)果存ACC中
            SJMP Result               ;跳轉(zhuǎn)存結(jié)果
Positive:
            ADD A,B                   ;加運(yùn)算,結(jié)果存ACC中

Result:            MOV 20H,A                 ;結(jié)果存在寄存器地址為20H中
            MOV R1,20H                ;調(diào)試中查看數(shù)值,驗(yàn)證程序
            JMP $
END
作者: 小林大哥哥    時(shí)間: 2019-3-17 13:42

/*************************
題目要求
已知 X Y,計(jì)算Z值, 結(jié)果存 20H 單元中
  Z=X-Y(X≥0)
  Z=X+Y(X<0)

需要知識(shí):存儲(chǔ)寄存器中的正數(shù)和負(fù)數(shù)

************************/  

            X DATA 30H                ;未知數(shù)X 用寄存器30H代替   DATA是個(gè)偽指令
            Y DATA 31H                ;未知數(shù)Y 用寄存器31H代替

            ORG 0000H                 ;程序開(kāi)始地址
            JMP START                 ;跳轉(zhuǎn)主程序
START:
            MOV SP,#7FH               ;堆棧地址7FH
            MOV X,#-9                 ;以30H為地址的寄存器中 載入初值 負(fù)9
            MOV Y,#1                  ;以31H為地址的寄存器中 載入初值 1
            MOV A,X                   ;X 的初值 載入A中
            MOV B,Y                   ;Y 的初值 載入B中
            JB Acc.7,Positive         ;ACC.7位是1還是0,判斷X是正數(shù)還是負(fù)數(shù), 如是正數(shù)跳轉(zhuǎn)加法運(yùn)算,如是負(fù)數(shù)執(zhí)行下一條道減法運(yùn)算
            CLR C                     ;PSW.7位   CY位需要清零,不能影響到加減法結(jié)果
            SUBB A,B                  ;減運(yùn)算,結(jié)果存ACC中
            SJMP Result               ;跳轉(zhuǎn)存結(jié)果
Positive:
            ADD A,B                   ;加運(yùn)算,結(jié)果存ACC中

Result:            MOV 20H,A                 ;結(jié)果存在寄存器地址為20H中
            MOV R1,20H                ;調(diào)試中查看數(shù)值,驗(yàn)證程序
            JMP $
END
作者: songzhy    時(shí)間: 2019-4-1 07:16
謝謝分享......
作者: michael2018    時(shí)間: 2019-4-8 16:05
樓主牛逼啦
作者: solo2pm    時(shí)間: 2019-4-13 00:11
新人  表示匯編還不太懂 看天書(shū)……
作者: songzhy    時(shí)間: 2019-4-14 07:49
新人  表示匯編還不太懂
作者: silicon_hacker    時(shí)間: 2019-4-24 22:12
51單片機(jī)學(xué)習(xí)匯編
作者: qq12345qq6789qq    時(shí)間: 2019-4-25 16:01

新人  表示匯編還不太懂
作者: 遷就    時(shí)間: 2019-4-26 17:35
謝謝分享
作者: jackliuwenli    時(shí)間: 2019-5-29 14:16
謝謝分享
作者: 1316880381    時(shí)間: 2019-6-3 14:37
謝謝分享
作者: vccccclala    時(shí)間: 2019-6-18 16:55
感謝分享

作者: 175花見(jiàn)花開(kāi)艱苦    時(shí)間: 2019-6-28 13:14
感謝分享
作者: 刷新時(shí)間    時(shí)間: 2019-7-5 10:46
剛剛開(kāi)始
作者: tieq1952    時(shí)間: 2019-7-10 06:35
謝謝分享!!!
作者: 鵬博士PBs    時(shí)間: 2019-7-10 09:22
2進(jìn)制轉(zhuǎn)10進(jìn)制的BCD譯碼器
作者: 一直有你陪伴    時(shí)間: 2019-7-27 01:58
樓主牛逼啦,匯編看不懂
作者: LIUSIGN    時(shí)間: 2019-8-5 08:40
樓主牛逼啦,匯編看不懂
作者: 佳佳電氣    時(shí)間: 2019-9-14 18:57
新手表示看不懂,學(xué)習(xí)中
作者: star130    時(shí)間: 2019-9-23 20:20
看明白了,學(xué)習(xí)了,有幫助
作者: 五依黑    時(shí)間: 2019-10-4 17:32
大神,想學(xué)單片機(jī)應(yīng)該先從哪里開(kāi)始?
作者: 五依黑    時(shí)間: 2019-10-4 17:33
單片機(jī)如何入門?
作者: harry3    時(shí)間: 2019-10-24 23:41
·麥克納姆輪全向輪戰(zhàn)車程序精髓分享
作者: 雙贏電子    時(shí)間: 2019-11-16 17:45
多謝分享,學(xué)習(xí)了,收藏
作者: 莫陌    時(shí)間: 2019-11-29 14:27
多謝分享
作者: 巫山煙雨    時(shí)間: 2019-12-12 17:25
謝謝分享  
作者: ttw1640664131    時(shí)間: 2019-12-24 23:25
感謝樓主的分享
作者: justToWing    時(shí)間: 2020-2-2 08:00
謝謝樓主分享
作者: 尼古拉斯-趙四    時(shí)間: 2020-2-17 17:38
具體咋回事啊,有誰(shuí)能告知一下嗎,看了好長(zhǎng)時(shí)間沒(méi)看懂
作者: player    時(shí)間: 2020-2-22 13:08
好久沒(méi)來(lái)了,做個(gè)記號(hào)

作者: tttpotr    時(shí)間: 2020-3-19 12:52
感謝樓主
作者: 卑微小蔣    時(shí)間: 2020-5-16 09:46
很棒,感謝樓主的分享
作者: 271289610@qq.co    時(shí)間: 2020-5-23 09:50
謝謝樓主的分享,一剛學(xué)的小萌新有點(diǎn)看不懂
作者: tangxiexiong    時(shí)間: 2020-7-18 19:10
51的指令太多,市場(chǎng)上PIC系列的多,工作也容易找
作者: leehk88    時(shí)間: 2020-8-27 09:26
註釋很詳細(xì)方便學(xué)習(xí),謝謝了.
作者: 15x1    時(shí)間: 2020-11-22 09:01
沒(méi)有看懂匯編  想學(xué)
作者: dlzhoubo    時(shí)間: 2021-1-8 12:14
zhouchuantao 發(fā)表于 2019-3-10 12:04
/*************************
題目要求
已知 X Y,計(jì)算Z值, 結(jié)果存 20H 單元中

有點(diǎn)看天書(shū)的感覺(jué)!學(xué)習(xí)中
作者: 番薯藤    時(shí)間: 2021-1-14 17:26
zhouchuantao 發(fā)表于 2019-3-10 12:04
/*************************
題目要求
已知 X Y,計(jì)算Z值, 結(jié)果存 20H 單元中

你好,請(qǐng)問(wèn)你代碼開(kāi)頭用的偽指令是不是用錯(cuò)了

作者: fln0457    時(shí)間: 2021-1-15 13:58
新人想學(xué)編程,現(xiàn)在能用RS232口擦寫STC15F204EA芯片,先求一個(gè)小程序
作者: runmuel    時(shí)間: 2021-3-27 21:39
番薯藤 發(fā)表于 2021-1-14 17:26
你好,請(qǐng)問(wèn)你代碼開(kāi)頭用的偽指令是不是用錯(cuò)了

/*
學(xué)過(guò)C的應(yīng)不用說(shuō)也懂了。
多行注釋就這樣用
*/
作者: lsg0280    時(shí)間: 2021-5-29 08:29
很基礎(chǔ)的知識(shí),要珍惜學(xué)習(xí)。
作者: 3152681172    時(shí)間: 2021-6-26 15:45
沒(méi)有看懂匯編  想學(xué)
作者: yjgu    時(shí)間: 2021-7-11 21:30
樓主牛逼啦
作者: 188610329    時(shí)間: 2021-8-29 00:28
你這串代碼,沒(méi)看出和BCD調(diào)整有任何關(guān)系……只是看到內(nèi)存浪費(fèi)一大把,還特別的不經(jīng)濟(jì),比如,
MOV   50H,#69H
MOV   R3,50H

作者: 188610329    時(shí)間: 2021-8-29 00:37
你這串代碼,沒(méi)看出和BCD調(diào)整有任何關(guān)系……只是看到內(nèi)存浪費(fèi)一大把,還特別的不經(jīng)濟(jì),比如,
MOV  50H,#69H      ; 用了3個(gè)字節(jié)
MOV  R3,50H          ; 用了2個(gè)字節(jié)
正常寫法,應(yīng)該:
MOV   R3,#69H      ;用2個(gè)字節(jié)
MOV   50H,R3       ;用2個(gè)字節(jié)
類似的問(wèn)題著串代碼里很多。
另外,MOV @R0,A       ;累加器ACC中的數(shù)據(jù) 載入以R0中的數(shù)據(jù)為地址的寄存器中   注意間接尋址:@R0=50H,50H作為寄存器地址使用,而不是數(shù)據(jù)
你這串代碼的時(shí)候 @R0, 應(yīng)該間接尋址的60H而不是50H 你上面 R0 明明賦值的是 #60H
這類問(wèn)題太多了……
最后那個(gè)JMP START 更加莫名其妙,你所有的所有都是重新賦值,這個(gè)循環(huán)再多次,結(jié)果還是不變,這個(gè)時(shí)候完全應(yīng)該 JMP $ 直接鎖定PC 指針才對(duì)嘛……
作者: 學(xué)習(xí)使我快樂(lè)@    時(shí)間: 2021-9-22 11:20
小林大哥哥 發(fā)表于 2019-3-17 13:42
/*************************
題目要求
已知 X Y,計(jì)算Z值, 結(jié)果存 20H 單元中

匯編剛開(kāi)始真一臉懵

作者: gaofahao    時(shí)間: 2021-11-20 13:58

新人  表示匯編還不太懂 看天書(shū)……
作者: HAPPY3    時(shí)間: 2021-12-23 11:02
懂一點(diǎn),但怕鉆研,
作者: yzwzfyz    時(shí)間: 2022-8-1 16:36
回39#:
CPU只認(rèn)識(shí)【二進(jìn)制指令代碼】,其它一概不認(rèn)。!無(wú)論是匯編、C、……。
匯編還需要通過(guò)編譯器(匯編的編譯平臺(tái)),將匯編言翻譯成【二進(jìn)制指令代碼】,再通過(guò)燒錄設(shè)備寫入單片機(jī)中,才算大功告成。
偽指令會(huì)指導(dǎo)編譯器進(jìn)行編譯,如第一句:“ORG 0000H”,編譯器就會(huì)知道,編好的【二進(jìn)制指令代碼】從指令存儲(chǔ)器的0000H單元開(kāi)始存放。
所謂“偽指令”,是CPU不認(rèn)識(shí),而編譯器能懂的“話”。
換句話說(shuō):“偽指令”下給編譯器的命令,而不是對(duì)CPU下令。
作者: QQQQ987    時(shí)間: 2022-9-4 23:34
表示喜歡51C語(yǔ)言編程方式,匯編不喜歡,哈哈——




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1