首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用f240汇编怎么求根号?

;=======================SQRT开方子程序===================
;算法采用牛顿迭代公式:X=SQRT(c)   ==>   Xk=[Xk+(C/Xk)]/2, Xk初值为512
;p1为待开方数的高16位
;p2为待开方数的低16位
;p3为初值
;p4为循环次数
SQRT            .macro  p1,p2,p3,p4,p5
                LDP     #4
                MAR     *,AR3
                LAR     AR1,p1                  ;保留原开方数高16位
                LAR     AR2,p2                  ;保留原开方数低16位
                LAR     AR3,p4                  ;循环次数
SQRTING:p5:
                ;-----C/Xk
                LACC    p1,16                    
                OR      p2
                SFL
                SACH    p1
                SACL    p2
                LACC    p1
                rpt     #15                     
                subc    p3
                sacl    p1                      ;p1为商的高16位
                xor     p1
                or      p2
                rpt     #15
                subc    p3
                sacl    p2                      ;p2为商的低16位
                LACC    p1,16
                OR      p2
                ADD     #1                      ;四舍五入
                SFR
                ;-----(C/Xk)+Xk
                ADD     p3
                ;-----[(C/Xk)+Xk]/2
                SFR
                SACL    p3                      ;p3即为解
                SAR     AR1,p1                  ;还原待开方数的高16位
                SAR     AR2,p2                  ;还原待开方数的低16位
                BANZ    SQRTING:p5:
                .endm

用f240汇编怎么求根号?

用f240汇编怎么求根号?
受益非浅,谢谢了!不过,我听说用rpt容易导致中断出错,能改一下最好了!!我以前用的是从1开始商,计算一个值最多需要16*4=64次,现在看来简单多了,谢谢了
绝对菜鸟,多多包涵!
返回列表