;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 开根号 KAIGH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口: (R5R4R3R2)
;出口: (R7R6) =?
;使用: ACC,R1,R2~R7 S4,S5
;位标志: C,F0
;子程序: RLCR76,RLCR52,RLCSR1
KAIGH:
CLR A
MOV R7,A
MOV R6,A
MOV R1,A
MOV S4,A
MOV S5,#10H
KAIGHL1:
ACALL RLCR76 ;根左移1位
ACALL RLCR52 ;
ACALL RLCSR1 ;
ACALL RLCR52 ;
ACALL RLCSR1 ;数左移2位
JB F0,KAIGHL3 ;最末时,F0=1肯定不够减
MOV A,R1 ;
SETB C ;
SUBB A,R6 ;
MOV R1,A ;
MOV A,S4 ;数-(2*根+1)
SUBB A,R7 ;
JNC KAIGHL2 ;够减
MOV A,R1 ;不够减
SETB C ;
ADDC A,R6 ;
MOV R1,A ;恢复R1
SJMP KAIGHL3
KAIGHL2:
MOV S4,A ;减结果给S4
INC R6
INC R6
KAIGHL3:
DJNZ S5,KAIGHL1 ;
RRCR76:
MOV C,F0 ;
MOV A,R7 ;
RRC A ;
MOV R7,A ;
MOV A,R6 ;
RRC A ;
MOV R6,A ;
RET
开方的算法,来源於县里初中老师,(耕)耘(老)夫 三个老师很有利:老练、锐利和晓莉
本人第一次看到编程就是那里的机房,可惜名额太少没混进去
开方整数算法类似除法,只不过需要每次移2位再减
附上完整程序,本人拥有100%版权,代码可任意使用,不限教育和商业用途,毕竟用汇编的很少了
51不想再碰了,主要是开发方式和调试效率令人不爽。
想用便宜的也可以用RISC-V内核的