?? 四字節(jié)二進(jìn)制無符號(hào)數(shù)開平方.txt
字號(hào):
標(biāo)號(hào): SH4功能:四字節(jié)二進(jìn)制無符號(hào)數(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ù)為零,不必運(yùn)算
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é)按折線法分為三個(gè)區(qū)間
ADD A,#57H
JC SQR2
ADD A,#45H
JC SQR1
ADD A,#24H
MOV B,#0E3H ;第一區(qū)間的斜率
MOV R4,#80H ;第一區(qū)間的平方根基數(shù)
SJMP SQR3
SQR1: MOV B,#0B2H ;第二區(qū)間的斜率
MOV R4,#0A0H;第二區(qū)間的平方根基數(shù)
SJMP SQR3
SQR2: MOV B,#8DH ;第三區(qū)間的斜率
MOV R4,#0D0H;第三區(qū)間的平方根基數(shù)
SQR3: MUL AB ;與區(qū)間基點(diǎn)的偏移量乘區(qū)間斜率
MOV A,B
ADD A,R4 ;累加到平方根的基數(shù)上
MOV R4,A
MOV B,A
MUL AB ;求當(dāng)前平方根的冪
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ù)法校正一個(gè)字節(jié)的平方根
MOV A,R4 ;當(dāng)前平方根的兩倍加一存入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é)束,已達(dá)到一個(gè)字節(jié)的精度
INC R4 ;不小于,平方根加一
MOV R2,A ;保存新的偏移量
MOV R3,B
SJMP SQR4 ;繼續(xù)校正
SQR5: MOV A,R4 ;將一個(gè)字節(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é)計(jì)算完,在R3中
MOV A,R7 ;取原被開方數(shù)的左規(guī)次數(shù)
JZ SQRE ;未左規(guī),開方結(jié)束
SQR9: CLR C ;按左規(guī)次數(shù)右移平方根,得到實(shí)際根
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A
DJNZ R7,SQR9
SQRE: RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -