⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqr_root.asm

📁 汇编语言编写的开方运算函数运算速度快
💻 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 + -