|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
【非典】16 bits BIN TO BCD 轉(zhuǎn)換 51匯編 (no test!) |
| 作者:dengm 欄目:單片機(jī) |
;----- BIN2BCD.ASM ---------- Deng Miao 2006-3-28 Guang Zhou ---- ; INPUT: 16 BITS BIN R3:R2 ; OUTPUT: BCD IN R6:R5:R4 ; USAGE: A, B, PSW, R7 ; R3:R2 ====>R6:R5:R4 ; ; 6 MS BITS (BIT 15 TO BIT 10) ; 1024 * (10*X+Y) ; = 10000.html">10000*X + 1000 Y + 200 * X + 20 * Y + 4 * (10*X+Y) ; = 10000.html">10000*X ; +100 * ( (10*Y + X) + X ) ; + 2 * ( 2 * (10*X + Y) + 10*Y ) BIN2BCD: MOV A, R3 MOV B, #40 DIV AB MOV R6, A ; R6:== 10000.html">10000 * X MOV A, B RR A RR A ANL A, #0FH SWAP A MOV R4, A ; R4:== 10 * Y ORL A, R6 ; MOV R5, A ; R5:== 10*Y + X SWAP A ; A:=== 10*X + Y ADD A, ACC ; 2 * (10*X+Y) DA A JNC $+4 INC R5 INC R5 ADD A, R4 ; 2 * (10*X+Y) + 10*Y DA A JNC $+4 INC R5 INC R5 ADD A, ACC ; 2*(2*(10*X+Y)+10*Y) DA A MOV R7, A ; R7:== *1 MOV A, R6 ADDC A, R5 ; (10*Y+X) + X DA A MOV R5, A ; R5:== *100 JNC $+3 INC R6 ; R6:== *10000.html">10000 ;----------------------------- MOV A, R2 ; BIT 9, BIT 8, BIT 7 TO BIT 0 MOV C, B.0 RRC A MOV C, B.1 RRC A MOV B, #25 DIV AB MOV R4, A ; * 100 MOV A, R2 ANL A, #3 XCH A, B RL A RL A ORL A, B MOV B, #10 DIV AB SWAP A ORL A, B ADD A, R7 DA A XCH A, R4 ADDC A, R5 DA A MOV R5, A JNC $ + 3 INC R6 RET |
| 2樓: | >>參與討論 |
| 作者: hotpower 于 2006/3/27 1:25:00 發(fā)布:
哈哈,坐個(gè)沙發(fā),等待有人挑戰(zhàn)鄧苗... |
|
| 3樓: | >>參與討論 |
| 作者: dengm 于 2006/3/27 1:39:00 發(fā)布:
(指令周期數(shù) X BYTES) 小的為勝利 |
|
| 4樓: | >>參與討論 |
| 作者: dengm 于 2006/3/30 14:11:00 發(fā)布:
【非典】16 bits BIN TO BCD 轉(zhuǎn)換 51匯編(已優(yōu)化)(<72周期) ;----- BIN2BCD.ASM ---------- Deng Miao 2006-3-28 Guang Zhou ---- ; INPUT: 16 BITS BIN R3:R2 ; OUTPUT: BCD IN R6:R5:R4 ; USAGE: A, B, PSW, R7 ; R3:R2 ====>R6:R5:R4 ; ; 6 MS BITS (BIT 15 TO BIT 10) ; 1024 * (10*X+Y) ; = 10000.html">10000*X + 1000 Y + 200 * X + 20 * Y + 4 * (10*X+Y) ; = 10000.html">10000*X ; +100 * ( (10*Y + X) + X ) ; + 2 * ( 2 * (10*X + Y) + 10*Y ) BIN2BCD: MOV A, R3 MOV B, #40 DIV AB MOV R6, A ; R6:== 10000.html">10000 * X MOV A, B RL A RL A ANL A, #0F0H MOV R4, A ; R4:== 10 * Y ORL A, R6 ; MOV R7, A ; R7:== 10*Y + X SWAP A ; A:=== 10*X + Y ADD A, ACC ; 2 * (10*X+Y) DA A JNC $+4 INC R7 INC R7 ADD A, R4 ; 2 * (10*X+Y) + 10*Y DA A JNC $+4 INC R7 INC R7 ADD A, ACC ; 2*(2*(10*X+Y)+10*Y) DA A XCH A, R7 ; R7:== *1 ADDC A, R6 ; (10*Y+X) + X DA A MOV R5, A ; R5:== *100 JNC $+3 INC R6 ; R6:== *10000.html">10000 ; R6:R5:R7 ;----------------------------- MOV A, R2 ; BIT 9, BIT 8, BIT 7 TO BIT 0 MOV C, B.0 RRC A MOV C, B.1 RRC A MOV B, #25 DIV AB MOV R4, A ; * 100 MOV A, R2 ANL A, #3 XCH A, B RL A RL A ORL A, B MOV B, #10 DIV AB SWAP A ORL A, B ADD A, R7 DA A XCH A, R4 ADDC A, R5 DA A MOV R5, A JNC $ + 3 INC R6 RET * - 本貼最后修改時(shí)間:2006-3-31 13:20:11 修改者:dengm |
|
| 5樓: | >>參與討論 |
| 作者: dengm 于 2006/3/30 17:28:00 發(fā)布:
【經(jīng)典】16 bits BIN TO BCD 轉(zhuǎn)換 51匯編 (237周期) ; INPUT: 16 BITS BIN R3:R2 ; OUTPUT: BCD IN R6:R5:R4 ; USAGE: A, PSW, R7 ; STACK: 0 BYTES ; R3:R2 ====>R6:R5:R4 BIN2BCD: CLR A MOV R4, A MOV R5, A MOV R6, A MOV A, R3 SETB F0 BIN2BCD_BYTE: MOV R7, #8 BIN2BCD_L1: RLC A XCH A, R4 ADDC A, ACC DA A XCH A, R4 XCH A, R5 ADDC A, ACC DA A XCH A, R5 XCH A, R6 ADDC A, ACC XCH A, R6 DJNZ R7, BIN2BCD_L1 MOV A, R2 JBC F0, BIN2BCD_BYTE RET * - 本貼最后修改時(shí)間:2006-4-3 17:16:44 修改者:dengm |
|
| 6樓: | >>參與討論 |
| 作者: dengm 于 2006/4/1 11:30:00 發(fā)布:
好象現(xiàn)在已沒(méi)人用匯編了! |
|
| 7樓: | >>參與討論 |
| 作者: AIRWILL 于 2006/4/1 18:11:00 發(fā)布:
不錯(cuò),不錯(cuò) 我做的符合 C51 調(diào)用規(guī)則的 itoda(16bit bin 轉(zhuǎn)換為5byte ASCII)子程序 使用了 58Byte, 182 個(gè)clock 看來(lái)是不登大雅之堂了 值得學(xué)習(xí) |
|
| 8樓: | >>參與討論 |
| 作者: AIRWILL 于 2006/4/1 18:34:00 發(fā)布:
dengm 的第三個(gè)程序是否有錯(cuò)誤 看這一段 BIN2BCD_L1: RLC A XCH A, R4 ADD A, ACC 是否這里的最后一行應(yīng)該改為 ADDC A, ACC |
|
| 9樓: | >>參與討論 |
| 作者: diannaoza 于 2006/4/2 1:14:00 發(fā)布:
匯編誰(shuí)說(shuō)沒(méi)人用。 寫的好。我就喜歡匯編。 |
|
| 10樓: | >>參與討論 |
| 作者: hotpower 于 2006/4/2 1:19:00 發(fā)布:
最近農(nóng)忙,真想挑戰(zhàn)一把(想起萬(wàn)年歷的那次挑戰(zhàn)---爽) |
|
| 11樓: | >>參與討論 |
| 作者: diannaoza 于 2006/4/2 2:20:00 發(fā)布:
【非典】16 bits BIN TO BCD 轉(zhuǎn)換 72周期 最近農(nóng)忙,真想挑戰(zhàn)一把(想起萬(wàn)年歷的那次挑戰(zhàn)---爽) 這么說(shuō)還可以低于72周期完成。 |
|
| 12樓: | >>參與討論 |
| 作者: AIRWILL 于 2006/4/2 8:01:00 發(fā)布:
就是啊,c51的編譯還是有些限制的 所以,我也會(huì)做些匯編的子程序來(lái)供c調(diào)用 當(dāng)然是速度和空間上大有優(yōu)勢(shì)的程序 |
|
| 13樓: | >>參與討論 |
| 作者: dengm 于 2006/4/3 17:37:00 發(fā)布:
第三個(gè)程序是有錯(cuò)誤, 已改 |
|
| 14樓: | >>參與討論 |
| 作者: dengm 于 2006/4/3 18:14:00 發(fā)布:
再給2個(gè)版本【非典】算法 【非典】16 bits BIN TO BCD 轉(zhuǎn)換 51匯編 (116周期) ; INPUT: 16 BITS BIN R3:R2 ; OUTPUT: BCD IN R6:R5:R4 ; USAGE: A, PSW, R7 ; STACK: 0 BYTES ; R3:R2 ====>R6:R5:R4 BIN2BCD: MOV A, R3 MOV B, #25 DIV AB CJNE A, #10, $+5 MOV A, #10H MOV R5, A MOV A, R2 RLC A MOV B.6, C RLC A MOV B.7, C MOV R4, A MOV A, #10 XCH A, B RL A RL A DIV AB SWAP A ORL A, B XCH A, R4 MOV R6, #0 MOV R7, #6 BIN2BCD_L1: RLC A XCH A, R4 ADDC A, ACC DA A XCH A, R4 XCH A, R5 ADDC A, ACC DA A XCH A, R5 XCH A, R6 ADDC A, ACC XCH A, R6 DJNZ R7, BIN2BCD_L1 RET 【非典】16 bits BIN TO BCD 轉(zhuǎn)換 51匯編 (121周期) ; INPUT: 16 BITS BIN R3:R2 ; OUTPUT: BCD IN R6:R5:R4 ; USAGE: A, PSW, R7 ; STACK: 0 BYTES ; R3:R2 ====>R6:R5:R4 BIN2BCD: MOV A, R3 MOV B, #50 DIV AB MOV R5, A MOV A, R2 RLC A MOV R4, A MOV A, #10 XCH A, B RLC A DIV AB SWAP A ORL A, B XCH A, R4 MOV R6, #0 MOV R7, #7 BIN2BCD_L1: RLC A XCH A, R4 ADDC A, ACC DA A XCH A, R4 XCH A, R5 ADDC A, ACC DA A XCH A, R5 XCH A, R6 ADDC A, ACC XCH A, R6 DJNZ R7, BIN2BCD_L1 RET |
|
| 15樓: | >>參與討論 |
| 作者: yewuyi 于 2006/4/4 8:57:00 發(fā)布:
?礋狒[…… |
|
| 16樓: | >>參與討論 |
| 作者: dengm 于 2006/4/6 20:07:00 發(fā)布:
不要?礋狒[ |
|
| 17樓: | >>參與討論 |
| 作者: dengm 于 2006/4/9 10:53:00 發(fā)布:
16bits格雷碼 to BIN 匯編, 有人要嗎? |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |