📄 sqr_root.asm
字号:
;Filename:sqr_root.asm
;0.45^2*16=29491-->0x7333
;A B
;**************
;A *73 33
; *64
;**************
; 14B *F 33
; *E 39
;**************
; FA
; 0.45^0.5=0.67082
; AB-->171 171(2^8)=0.66797
;Error Diff:0.67082-0.66797=0.0029 0.0029/0.67082=0.4%
;************************
.title "sqr_root_program"
.mmregs
.global _c_int00
.include "vc54xnt.inc"
STACK .usect "stack",stack_size
SYSTEM_STACK .set STACK+stack_size
.sect "vectors"
reset:
BD _c_int00
STM #SYSTEM_STACK,sp
.space 31*4*16
.data
x_val .word 0x7333 ;-->ar0
r_0 .word 0x0 ;-->ar1
r_1 .word 0x1
r_2 .word 0x2
r_3 .word 0x3
r_4 .word 0x4
r_5 .word 0x5
r_6 .word 0x6
r_7 .word 0x7
r_8 .word 0x8
r_9 .word 0x9
r_a .word 0xa
r_b .word 0xb
r_c .word 0xc
r_d .word 0xd
r_e .word 0xe
r_f .word 0xf
temp_2 .word 0 ;-->ar2
temp_4 .word 0 ;-->ar4
hi_bt .word 0
temp .word 0
.text
_c_int00:
CALL c54x_init ;initiatec5402_init
LD #0h,A ;clear A
LD #0h,B ;clear B
STM #x_val,AR0 ;x_val-->AR0
STM r_0,AR1 ;r_0-->AR1
LD *AR0,B ;(AR0)-->B
LD B,-8,A ;"0073"-->A
sqr_root1:
SQUR *AR1+,B ;(0---f)-->B AR1+1-->AR1
SUB A,B ;B-A-->B
CC sqr_root1,BLT ;IF B<0,sqr_root1-->PC else PC+2-->PC
LD *AR1-,A ;(AR1)-->A,AR1-1-->AR1
LD *AR1,A ;(AR1)-->A
SQUR *AR1,B
SUB #73h,B
CC iszero1,BEQ ;wether B=0,if B=0 then iszerol-->PC else PC+2-->PC
LD *AR1-,A ;(AR1)-->A,AR1-1-->AR1
LD *AR1,A ; (AR1)-->A,that is "A"-->A
iszero1:
STM #hi_bt,AR7
STL A,*AR7 ;"Ah"-->*AR7
LD *AR0,B ;"7333h"-->B
LD B,-8,A ;"73h"-->A
SQUR *AR7,B ;"A^2"-->A
STM #temp,AR3
SUB B,A ;A-B-->A that is (73h-64h)-->A then "0Fh"-->A
LD A,8,B ;"0F00h"-->B
STL B,*AR3 ;"0F00h"-->*AR3
LD *AR0,B ;"7333h"-->B
LD B,8,A ;"733300h"-->A
STLM A,AR4 ;A(15-9)-->AR4 that is "3300h"-->AR4
LD AR4,A ;"3300h"-->A
LD A,-8,B ;"0033h"-->B
ADD *AR3,B ;"0F33h"-->B
STM r_0,AR1 ;r_0-->AR1
STLM B,AR5 ;"0F33h"-->AR5
LD *AR7,A ;(AR7)-->A that is 0Ah-->A
ADD *AR7,A ;"A*2"=14h-->A
LD A,4,B ;"0140h"-->B
STLM B,AR3 ;"0140h"-->AR3
sqr_root2:
LD AR3,B ;"0140h"-->B
LD *AR1+,A ;"r_x"-->A x=0 or---or f,AR1+1-->AR1
STLM A,AR2; A(15-0)-->AR2
MVMD AR2,#temp_2 ;"r_x"-->AR2
ADD A,B ;"014:r_x"-->B
STLM B,AR4
MVMD AR4,#temp_4;"014r_x"-->temp_4
STM #temp_4,AR4 ;temp_4-->AR4
STM #temp_2,AR2 ;temp_@-->AR2
MPY *AR2,*AR4,B ;"r_x"*"014r_x"-->B
LD AR5,A ;"0F33"-->A
SUB A,B ;B-A-->B
CC sqr_root2,BLT ;IF B<0,sqr_root2-->PC else PC+2-->PC
LD *AR1-,A ;(AR1)-->A,AR1-1-->AR1
LD *AR1,A ;
CC iszero2,BEQ ;wether B=0,if B=0 then iszero2-->PC else PC+2-->PC
LD *AR1-,A ;(AR1)-->A, that is "B"-->A
LD *AR1,A ;(AR1)-->A,that is "B"-->A
iszero2:
STLM A,AR4 ;A-->AR4
STLM A,AR1 ;"B"-->AR1
MVMD AR4,#temp_4 ;"B"-->temp_4
LD AR3,B ;"0140"-->B
ADD B,A ;"014B"-->A
STLM A,AR2 ;"014B"-->AR2
MVMD AR2,#temp_2 ;"014B"-->temp_2
STM #temp_2,AR2 ;temp_2-->AR2
STM #temp_4,AR4 ;temp_4-->AR4
MPY *AR2,*AR4,A ;"014Bh"*"Bh'=E39-->A
LD AR5,B ;"F33h"-->B
SUB A,B ;"F33h"-"E39"=FA-->B
STLM B,AR6 ;"FAh"-->AR6
LD *AR7,A ;"000Ah"-->A
LD A,4,B ;"00A0h"-->B
ADD AR1,B ;"00ABh"-->B
LD AR6,A ;'FAh"-->A
main_start:
B main_start
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -