|
|||||||||||
| 技術(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 |
請(qǐng)給我的程序加批注 |
| 作者:liyuanju 欄目:單片機(jī) |
入口:R3R2(16位無(wú)符號(hào)二進(jìn)制整數(shù)) 出口:R6(萬(wàn)位)R5(千位、百位)R4(十位、個(gè)位) 雙字節(jié)二進(jìn)制數(shù)轉(zhuǎn)BCD數(shù) BCD: CLR A MOV R4,A MOV R5,A MOV R6,A MOV R7,#10H NEXT: CLR C MOV A,R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A ADDC A,R4 DA A MOV R4,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R6 ADDC A,R6 DA A MOV R6,A DJNZ R7,NEXT RET 經(jīng)過(guò)十六次左移后可以得到BCD數(shù),我想知道每一次左移之后R4,R5,R6里面的情況,我要推算四、五次之后就不會(huì)了,請(qǐng)各位老師結(jié)合具體的數(shù)給推推或者給個(gè)批注?赡芎芊爆崳x謝了! |
| 2樓: | >>參與討論 |
| 作者: 平常人 于 2006/9/30 20:34:00 發(fā)布:
自己畫個(gè)表,應(yīng)該很容易推導(dǎo)的 R0 R1 R2 R3 R4 R5 R6 R7 xx xx 12 34 00 00 00 10 進(jìn)入NEXT前 xx xx 24 68 00 00 00 0F 一次循環(huán)后 xx xx 48 D0 00 00 00 0E 二次循環(huán)后 xx xx 90 A0 01 00 00 0D 三次循環(huán)后 .... 慢慢來(lái),沒(méi)人催你 |
|
| 3樓: | >>參與討論 |
| 作者: conwh 于 2006/9/30 21:17:00 發(fā)布:
還是自己下點(diǎn)工夫,以后記得牢 |
|
| 4樓: | >>參與討論 |
| 作者: john_light 于 2006/9/30 22:31:00 發(fā)布:
可以用筆,也可以用電 手工練印象深 也可以借助開(kāi)發(fā)環(huán)境的debug功能 把這段程序作為子程序 在主程序中給初值調(diào)用它 單步觀察 |
|
| 5樓: | >>參與討論 |
| 作者: conwh 于 2006/9/30 23:08:00 發(fā)布:
先搞懂算法 |
|
| 6樓: | >>參與討論 |
| 作者: liyuanju 于 2006/10/5 11:04:00 發(fā)布:
re 謝謝各位!我用R3(00110100)R2(00010010)做為初值經(jīng)單步運(yùn)行完程序后顯示結(jié)果為:R6(08)R5(20)R4(53),這在十進(jìn)制數(shù)上就等于82053嗎?但是R3R2(0011010000010010)B在十進(jìn)制數(shù)上等于13330,怎樣理解?謝謝指教! |
|
| 7樓: | >>參與討論 |
| 作者: conwh 于 2006/10/5 16:45:00 發(fā)布:
前面錯(cuò)了(R4運(yùn)算) |
|
| 8樓: | >>參與討論 |
| 作者: liyuanju 于 2006/10/5 19:40:00 發(fā)布:
re 在Keil軟件里面運(yùn)行完后就是這樣的結(jié)果,還有其他原因嗎? |
|
| 9樓: | >>參與討論 |
| 作者: conwh 于 2006/10/5 19:49:00 發(fā)布:
怎么還沒(méi)有看明白? BCD: CLR A MOV R4,A MOV R5,A MOV R6,A MOV R7,#10H NEXT: CLR C MOV A,R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A MOV A, R4 ADDC A,R4 DA A MOV R4,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R6 ADDC A,R6 DA A MOV R6,A DJNZ R7,NEXT RET |
|
| 10樓: | >>參與討論 |
| 作者: dengm 于 2006/10/5 20:33:00 發(fā)布:
【非典】16 bits BIN TO BCD 轉(zhuǎn)換 51匯編(已優(yōu)化)(<72周期) 【非典】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 |
|
| 11樓: | >>參與討論 |
| 作者: hotpower 于 2006/10/5 22:04:00 發(fā)布:
鄧苗的思路太怪異~~~服倒了~~~ 節(jié)日快樂(lè)~~~ |
|
| 12樓: | >>參與討論 |
| 作者: dengm 于 2006/10/6 10:26:00 發(fā)布:
時(shí)間(指令周期)是重要的資源, 有時(shí)只能用怪異的算法,請(qǐng)LZ TEST 節(jié)日快樂(lè)! |
|
| 13樓: | >>參與討論 |
| 作者: liyuanju 于 2006/10/6 16:55:00 發(fā)布:
re: 謝謝!終于搞懂了,我按conwh 所說(shuō)調(diào)試運(yùn)行后為13330,這是書上的一個(gè)例題,我沒(méi)有懷疑程序有問(wèn)題,水平較差看不出來(lái). |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |