|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
開平方程序 |
| 作者:dianyuan 欄目:單片機 |
剛學單片機,對以下這個開平方程序不是很理解,哪位大哥能指點一二,說說這個開平方子程序的基本思路,這里先謝了! 四字節(jié)二進制無符號數(shù)開平方(快速) ;入口條件:被開方數(shù)在R2、R3、R4、R5中。 ;出口信息:平方根在R2、R3中,整數(shù)部分的位數(shù)為原數(shù)的一半,其余為小數(shù)。 ;影響資源:PSW、A、B、R2~R7 堆棧需求: 2字節(jié) SH4: MOV A,R2 ORL A,R3 ORL A,R4 ORL A,R5 JNZ SH40 RET ;被開方數(shù)為零,不必運算 SH40: MOV R7,#0 ;左規(guī)次數(shù)初始化 MOV A,R2 SH41: ANL A,#0C0H ;被開方數(shù)高字節(jié)小于40H否? JNZ SQRH ;不小于40H,左規(guī)格化完成 MOV R6,#2 ;每左規(guī)一次,被開方數(shù)左移兩位 SH42: CLR C ;被開方數(shù)左移一位 MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A DJNZ R6,SH42 ;被開方數(shù)左移完兩位 INC R7 ;左規(guī)次數(shù)加一 SJMP SH41 ;繼續(xù)左規(guī) SQRH: MOV A,R2 ;規(guī)格化后高字節(jié)按折線法分為三個區(qū)間 ADD A,#57H ;100H-57H=0A9H(169) JC SQR2 ADD A,#45H ;100H-45H=0BBH(187) JC SQR1 ADD A,#24H ;100H-24H=0DCH(220) MOV B,#0E3H ;第一區(qū)間的斜率 (227) MOV R4,#80H ;第一區(qū)間的平方根基數(shù)(128) SJMP SQR3 SQR1: MOV B,#0B2H ;第二區(qū)間的斜率(178) MOV R4,#0A0H;第二區(qū)間的平方根基數(shù)(160) SJMP SQR3 SQR2: MOV B,#8DH ;第三區(qū)間的斜率(141) MOV R4,#0D0H;第三區(qū)間的平方根基數(shù) (208) SQR3: MUL AB ;與區(qū)間基點的偏移量乘區(qū)間斜率 MOV A,B ADD A,R4 ;累加到平方根的基數(shù)上 MOV R4,A MOV B,A MUL AB ;求當前平方根的冪 XCH A,R3 ;求偏移量(存放在R2R3中) CLR C SUBB A,R3 MOV R3,A MOV A,R2 SUBB A,B MOV R2,A SQR4: SETB C ;用減奇數(shù)法校正一個字節(jié)的平方根 MOV A,R4 ;當前平方根的兩倍加一存入R5R6中 RLC A MOV R6,A CLR A RLC A MOV R5,A MOV A,R3 ;偏移量小于該奇數(shù)否? SUBB A,R6 MOV B,A MOV A,R2 SUBB A,R5 JC SQR5 ;小于,校正結束,已達到一個字節(jié)的精度 INC R4 ;不小于,平方根加一 MOV R2,A ;保存新的偏移量 MOV R3,B SJMP SQR4 ;繼續(xù)校正 SQR5: MOV A,R4 ;將一個字節(jié)精度的根存入R2 XCH A,R2 RRC A MOV F0,C ;保存最終偏移量的最高位 MOV A,R3 MOV R5,A ;將最終偏移量的低八位存入R5中 MOV R4,#8 ;通過(R5R6/R2)求根的低字節(jié) SQR6: CLR C MOV A,R3 RLC A MOV R3,A CLR C MOV A,R5 SUBB A,R2 JB F0,SQR7 JC SQR8 SQR7: MOV R5,A INC R3 SQR8: CLR C MOV A,R5 RLC A MOV R5,A MOV F0,C DJNZ R4,SQR6 ;根的第二字節(jié)計算完,在R3中 MOV A,R7 ;取原被開方數(shù)的左規(guī)次數(shù) JZ SQRE ;未左規(guī),開方結束 SQR9: CLR C ;按左規(guī)次數(shù)右移平方根,得到實際根 MOV A,R2 RRC A MOV R2,A MOV A,R3 RRC A MOV R3,A DJNZ R7,SQR9 SQRE: RET |
| 2樓: | >>參與討論 |
| 作者: dianyuan 于 2006/7/17 11:08:00 發(fā)布:
開平方程序問題 |
|
| 3樓: | >>參與討論 |
| 作者: ljxh401 于 2006/7/17 13:03:00 發(fā)布:
思路 1=1 4=1+3 9=1+3+5 16=1+3+5+7 100=1+3+5+7+9+11+13+15+17+19 所以 n的平方=(2*n-1)的奇數(shù)加起來,記最后的奇數(shù)為X 然后看看100 和 10000 的關系 100對應的末尾數(shù)字是 19 10000對應的末尾數(shù)字是 199 因為N^2=((2*N)*N)/2 所以(10*N)^2=((2*10*N)*(10*N))/2 所以 N1=10*N0 的話 X1=10X0+9 做11000的開方 先做1的開方 先做110的開方 然后是11000的開方 |
|
| 4樓: | >>參與討論 |
| 作者: dianyuan 于 2006/7/17 14:10:00 發(fā)布:
仿真了一下,發(fā)現(xiàn)有些數(shù)據(jù)算出來不對 非常感謝 ljxh401 ,一下子明白了很多。 仿真了一下,發(fā)現(xiàn)有些數(shù)據(jù)算出來不對。 好象是300以上的數(shù)據(jù)算出來都有點莫名其妙,待我再好好琢磨琢磨。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |