汇编程序:用减奇数法开平方(16位)
来源:互联网 发布:房间改造软件 编辑:程序博客网 时间:2024/05/11 00:53
使用减奇数法,进行16位数的开平方运算。
-------------------------------------------------------
命题:从 1 开始,连续 n 项奇数,等差数列求和,可以得到 n^2。
证明如下:
已知:1 + 3 + 5 + ... + (2n - 1) = (1 + (2n - 1)) * (n / 2) = n^2
对于任意正整数 N,都会有:N = n^2 + ε
式中ε是不可开方的、小于 2n - 1 的误差。
即有:N = 1 + 3 + 5 + … + (2n - 1) + ε
开方时,可在 N 中逐次减去 1、3、5、...,直到不够减为止,够减的次数 n,即为 N 的平方根的整数部分。
这种求平方根的方法,相比于牛顿迭代法等其它的方法,效率是最高的。
;==========================================
51单片机的程序如下。
设被开方数已经存在R2R3中,平方根存到R4中。
;------------------------------------------------------
;入口参数:R2 R3中为16位的被开方数 N
;出口参数:R4中为8位的平方根 n
SQRT16:
PUSH PSW ;保护现场
MOV R4, #0 ;从 0 开始
SQSTART:
SETB C ;R4 = 0 时,减 1、=1 时,减 3、…
CALL R23JR4 ;调用子程序,R2R3-R4-1
JC ENDSQR ;不够减时,转结束
CALL R23JR4 ;再调用子程序,R2R3-R4-0
JC ENDSQR
INC R4 ;够减,R4 加 1,即为根 n
SJMP SQSTART ;继续去减
ENDSQR:
POP PSW
RET ;开方结束了,平方根 n 在 R4
;-------------------------------
;入口参数:R2 R3 中为 16 位被减数,R4 中为 8 位减数
;出口参数:够减时Cy=0,R2 R3中为16位差数;不够减时Cy=1
;使用寄存器:A、PSW
R23JR4:
MOV A, R3
SUBB A, R4 ;R3-R4-Cy → A
MOV R3, A
MOV A, R2
SUBB A, #0 ;R2-0-Cy → A
MOV R2, A
RET
;==========================================
8086的汇编程序(核心部分)如下。
;------------------------------------------------------
MOV AX, [data] ;取来 N
MOV BX, 1 ;首项为 1
MOV CX, 0
_S_LOOP:
SUB AX, BX
JC _END ;减,到有借位为止
INC BX ;修改为 3、5、7...
INC BX
INC CX ;n加1
JMP _S_LOOP ;反复的减
_END:
MOV [root],CX ;保存n
;------------------------------------------------------
;==========================================
就这些了。
按照同样的思路,可以编写出进行计算阶乘的子程序FACT16,不知那位网友肯来试试?
参见:http://zhidao.baidu.com/question/126469882.html
- 汇编程序:用减奇数法开平方(16位)
- 基于 8086 汇编语言——减奇数法开平方
- 牛顿法开平方
- 牛顿法开平方
- 牛顿法开平方scheme
- 用牛顿二项式开平方
- 支点(开平方误差分析)
- SQL 开平方
- 整数开平方
- 支点(开平方实践)
- SQL 开平方
- 开平方算法
- 开平方算法
- 求开平方
- 迭代法开平方
- java高精度开平方
- 如何开平方
- 开平方算法
- 延时程序耗费时间的精确算法
- 51单片机串行通信奇偶校验的设置方法
- Java开发微信支付流程及容易入坑的点
- 用扫描法读出4×4矩阵键盘,在数码管显示按键值
- c++学习之继承篇(多重继承之虚继承)
- 汇编程序:用减奇数法开平方(16位)
- 正负数、0,个数的统计
- 三个无符号数求最大值
- 信号与系统中的傅里叶级数的意义
- AngularJS中的$http深入分析
- BusyBox - The Swiss Army Knife of Embedded Linux
- 汇编语言显示“*”符号图案(1)
- 汇编语言显示“*”符号图案(2)
- AndroidStudio打包出现"xxx" is not translated in "zh" (Chinese) [MissingTranslation]