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

📄 fsqrt.txt

📁 [ARRL.无线电通讯手册].The.Arrl.Handbook.For.Radio.Communications.-.2007
💻 TXT
字号:
fsqrt:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Entry conditions: 32-bit argument in AM ;
;   register.                             ;
; Exit conditions: 16-bit square root in  ;
;   d register.                           ;
; Modified: D, E, X, Y                    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      ldy  #0000     ;start with 0 count
      tmxed          ;arg in x:e:d
      xgde           ;lsw in e, msw in d
      tsta           ;msb=0?
      beq  fazero    ;yes, normalize
      aiy  #$01      ;1 shift more
      lsrd           ;divide by 2
      rore           ;
      lsrd           ;next divide by 2
      bita #$ff      ;done?
      beq  fdzero    ;yes
      rore           ;finish divide
      aiy  #$01      ;1 shift more
      lsrd           ;divide by 2 again
      rore           ;
      lsrd           ;next divide by 2
      bita #$ff      ;done?
      beq  fdzero    ;yes
      rore           ;finish divide
      aiy  #$01      ;1 shift more
      lsrd           ;divide by 2
      rore           ;
      lsrd           ;next divide by 2
                     ;
fdzero: rore         ;normalized argument in d:e
      asld           ;;;mult by 2 for table address
      ldx  #roottabl+2 ;base address of root table
      adx            ;;;add offset
      ldd  0,x       ;get nearest root from table
      subd -2,x      ;minus the lower root
      lsre           ;make the remainder a signed fraction
      fmuls          ;b*(xa+1-xa)
      adce -2,x      ;b*(xa+1-xa)+xa
      xgdy           ;# of shifts, k, in d
      addd #-4       ;d-4 in d
      negd           ;4-d in d
      beq  fddone    ;this is 0
      lsre           ;denormalize the result
      addd #-1       ;next
      beq  fddone    ;
      lsre           ;shift back
      addd #-1       ;next
      beq  fddone    ;
      lsre           ;shift back
                     ;
fddone: xgde         ;result in d
      rts            ;out
                     ;
fazero: cmpb #$3f    ;done normalizing?
      bhi  fadz      ;yes, k=0
      aiy  #$01      ;one shift more
      asle           ;divide by 2
      rold           ;
      asle           ;divide by 2 again
      rold           ;done
      cmpb #$3f      ;done normalizing?
      bhi  fadz      ;yes, k=2
      aiy  #$01      ;one shift more
      asle           ;divide by 2
      rold           ;
      asle           ;and again
      rold           ;done
      cmpb #$3f      ;done?
      bhi  fadz      ;yes, k=4
      aiy  #$01      ;one shift more
      asle           ;divide by 2
      rold           ;
      asle           ;and again
      rold           ;done, k=6
                     ;
fadz:  asld          ;;;mult by 2 to be table address
      ldx  #roottabl+2 ;table base address
      adx            ;;;add offset
      ldd  0,x       ;get table word
      subd -2,x      ;(xa+1-xa)
      lsre           ;make remainder a signed fraction
      fmuls          ;b*(xa+1-xa)
      adce -2,x      ;b*(xa+1-xa)+xa
      lsre           ;divide by 16 right off, since arg<224
      lsre           ;
      lsre           ;
      lsre           ;OK
      xgdy           ;# of shifts, k, in d
      tstd           ;=0?
      beq  fazone    ;done
      lsre           ;denormalize the result, divide by 2
      addd #-1       ;next
      beq  fazone    ;done
      lsre           ;divide by 2
      addd #-1       ;next
      beq  fazone    ;done
      lsre           ;divide by 2
                     ;
fazone: xgde         ;result in d
      rts            ;out

 roottabl:
 dc.w $0
 dc.w $1000
 dc.w $16A1
 dc.w $1BB6
 dc.w $2000
 dc.w $23C7
 dc.w $2731
 dc.w $2A55
 dc.w $2D41
 dc.w $3000
 dc.w $3299
 dc.w $3511
 dc.w $376D
 dc.w $39B0
 dc.w $3BDE
 dc.w $3DF8
 dc.w $4000
 dc.w $41F8
 dc.w $43E2
 dc.w $45BE
 dc.w $478E
 dc.w $4952
 dc.w $4B0C
 dc.w $4CBC
 dc.w $4E62
 dc.w $5000
 dc.w $5196
 dc.w $5323
 dc.w $54AA
 dc.w $562A
 dc.w $57A3
 dc.w $5916
 dc.w $5A82
 dc.w $5BEA
 dc.w $5D4C
 dc.w $5EA8
 dc.w $6000
 dc.w $6153
 dc.w $62A1
 dc.w $63EC
 dc.w $6531
 dc.w $6673
 dc.w $67B1
 dc.w $68EB
 dc.w $6A22
 dc.w $6B55
 dc.w $6C84
 dc.w $6DB1
 dc.w $6EDA
 dc.w $7000
 dc.w $7123
 dc.w $7243
 dc.w $7361
 dc.w $747B
 dc.w $7593
 dc.w $76A9
 dc.w $77BC
 dc.w $78CC
 dc.w $79DA
 dc.w $7AE6
 dc.w $7BEF
 dc.w $7CF7
 dc.w $7DFC
 dc.w $7EFF
 dc.w $8000
 dc.w $80FF
 dc.w $81FC
 dc.w $82F7
 dc.w $83F0
 dc.w $84E8
 dc.w $85DE
 dc.w $86D2
 dc.w $87C4
 dc.w $88B4
 dc.w $89A3
 dc.w $8A90
 dc.w $8B7C
 dc.w $8C66
 dc.w $8D4F
 dc.w $8E36
 dc.w $8F1C
 dc.w $9000
 dc.w $90E3
 dc.w $91C4
 dc.w $92A4
 dc.w $9383
 dc.w $9461
 dc.w $953D
 dc.w $9618
 dc.w $96F2
 dc.w $97CA
 dc.w $98A1
 dc.w $9977
 dc.w $9A4C
 dc.w $9B20
 dc.w $9BF3
 dc.w $9CC4
 dc.w $9D95
 dc.w $9E64
 dc.w $9F33
 dc.w $A000
 dc.w $A0CC
 dc.w $A198
 dc.w $A262
 dc.w $A32B
 dc.w $A3F4
 dc.w $A4BB
 dc.w $A581
 dc.w $A647
 dc.w $A70B
 dc.w $A7CF
 dc.w $A892
 dc.w $A954
 dc.w $AA15
 dc.w $AAD5
 dc.w $AB95
 dc.w $AC53
 dc.w $AD11
 dc.w $ADCE
 dc.w $AE8A
 dc.w $AF45
 dc.w $B000
 dc.w $B0BA
 dc.w $B173
 dc.w $B22B
 dc.w $B2E3
 dc.w $B399
 dc.w $B450
 dc.w $B505
 dc.w $B5BA
 dc.w $B66E
 dc.w $B721
 dc.w $B7D3
 dc.w $B885
 dc.w $B937
 dc.w $B9E7
 dc.w $BA97
 dc.w $BB46
 dc.w $BBF5
 dc.w $BCA3
 dc.w $BD51
 dc.w $BDFD
 dc.w $BEA9
 dc.w $BF55
 dc.w $C000
 dc.w $C0AA
 dc.w $C154
 dc.w $C1FD
 dc.w $C2A6
 dc.w $C34E
 dc.w $C3F6
 dc.w $C49C
 dc.w $C543
 dc.w $C5E9
 dc.w $C68E
 dc.w $C733
 dc.w $C7D7
 dc.w $C87B
 dc.w $C91E
 dc.w $C9C1
 dc.w $CA63
 dc.w $CB04
 dc.w $CBA6
 dc.w $CC46
 dc.w $CCE6
 dc.w $CD86
 dc.w $CE25
 dc.w $CEC4
 dc.w $CF62
 dc.w $D000
 dc.w $D09D
 dc.w $D13A
 dc.w $D1D7
 dc.w $D272
 dc.w $D30E
 dc.w $D3A9
 dc.w $D444
 dc.w $D4DE
 dc.w $D577
 dc.w $D611
 dc.w $D6AA
 dc.w $D742
 dc.w $D7DA
 dc.w $D872
 dc.w $D909
 dc.w $D9A0
 dc.w $DA36
 dc.w $DACC
 dc.w $DB62
 dc.w $DBF7
 dc.w $DC8B
 dc.w $DD20
 dc.w $DDB4
 dc.w $DE47
 dc.w $DEDB
 dc.w $DF6E
 dc.w $E000
 dc.w $E092
 dc.w $E124
 dc.w $E1B5
 dc.w $E246
 dc.w $E2D7
 dc.w $E367
 dc.w $E3F7
 dc.w $E487
 dc.w $E516
 dc.w $E5A5
 dc.w $E633
 dc.w $E6C1
 dc.w $E74F
 dc.w $E7DD
 dc.w $E86A
 dc.w $E8F7
 dc.w $E983
 dc.w $EA0F
 dc.w $EA9B
 dc.w $EB27
 dc.w $EBB2
 dc.w $EC3D

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -