📄 gpsfuncs.asm
字号:
; */
; aol=ta+gps_alm[n].aop;
;
?debug L 615
fwait
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+24]
fadd qword ptr [bp-40]
fstp qword ptr [bp-56]
;
; /*
; AOL IS THE ARGUMENT OF LATITUDE
;
; LA IS THE LONGITUDE OF THE ASCENDING NODE
; */
; la=gps_alm[n].lan+(gps_alm[n].rra-omegae)*d_toa-gps_alm[n].toa*omegae;
;
?debug L 621
fwait
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+20]
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+12]
fsub qword ptr DGROUP:_omegae
fmul qword ptr [bp-80]
fadd
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+32]
fmul qword ptr DGROUP:_omegae
fsub
fstp qword ptr [bp-48]
;
; xp=r*cos(aol);
;
?debug L 622
fld qword ptr [bp-56]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-32]
fstp qword ptr [bp-64]
;
; yp=r*sin(aol);
;
?debug L 623
fld qword ptr [bp-56]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _sin
add sp,8
fmul qword ptr [bp-32]
fstp qword ptr [bp-72]
;
; result.x=xp*cos(la)-yp*cos(gps_alm[n].inc)*sin(la);
;
?debug L 624
fwait
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+8]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-72]
fstp tbyte ptr [bp-90]
fld qword ptr [bp-48]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _sin
add sp,8
fld tbyte ptr [bp-90]
fmul
fstp tbyte ptr [bp-90]
fld qword ptr [bp-48]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-64]
fld tbyte ptr [bp-90]
fsub
fstp qword ptr [bp-114]
;
; result.y=xp*sin(la)+yp*cos(gps_alm[n].inc)*cos(la);
;
?debug L 625
fwait
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+8]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-72]
fstp tbyte ptr [bp-90]
fld qword ptr [bp-48]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _cos
add sp,8
fld tbyte ptr [bp-90]
fmul
fstp tbyte ptr [bp-90]
fld qword ptr [bp-48]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _sin
add sp,8
fmul qword ptr [bp-64]
fld tbyte ptr [bp-90]
fadd
fstp qword ptr [bp-106]
;
; result.z=yp*sin(gps_alm[n].inc);
;
?debug L 626
fwait
mov al,byte ptr [bp+14]
cbw
imul ax,ax,74
mov dx,seg _gps_alm
mov bx,ax
mov es,dx
fld dword ptr es:_gps_alm[bx+8]
sub sp,8
fstp qword ptr [bp-126]
fwait
call far ptr _sin
add sp,8
fmul qword ptr [bp-72]
fstp qword ptr [bp-98]
fwait
;
; // gotoxy(1,24);
; // printf("satpos_almanac->");
; return(result);
;
?debug L 629
lea si,word ptr [bp-114]
mov ax,ss
les di,dword ptr [bp+6]
push ds
mov ds,ax
mov cx,12
rep movsw
pop ds
mov dx,word ptr [bp+8]
mov ax,word ptr [bp+6]
;
; }
;
?debug L 630
pop di
pop si
leave
ret
?debug C E31D000400161800
?debug C E606726573756C7418028EFF000005645F746F61+
?debug C 0F02B0FF00000279700F02B8FF00000278700F02+
?debug C C0FF000003616F6C0F02C8FF0000026C610F02D0+
?debug C FF00000274610F02D8FF000001720F02E0FF0000+
?debug C 04646966660F02E8FF00000265610F02F0FF0000+
?debug C 0265690F02F8FF00000672657475726E1D0A0600+
?debug C 00000474696D650E0A0A000000016E020A0E0000+
?debug C 00
?debug E
?debug E
@satpos_almanac$qfc endp
assume cs:GPSFUNCS_TEXT,ds:DGROUP
@satpos_ephemeris$qdc proc far
;
; eceft satpos_ephemeris(double t,char n)
;
?debug L 671
?debug B
push bp
mov bp,sp
sub sp,330
push si
push di
?debug C E6016E020A1200000001740F0A0A000000
?debug B
cmp word ptr __stklen,sp
ja short @3@3
call far ptr F_OVERFLOW@
@3@3:
;
; {
; double ei,ea,diff,ta,aol,delr,delal,delinc,r,inc;
; double la,xp,yp,bclk,tc,d_toc,d_toe;
; double xls,yls,zls,range1,tdot,satang,xaz,yaz;
; double az;
; ecef north,east,up;
; eceft result;
; //
; // MA IS THE ANGLE FROM PERIGEE AT TOA
; //
; // gotoxy(1,24);
; // printf("->satpos_ephemeris");
; d_toc=t-gps_eph[n].toc;
;
?debug L 684
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+36]
fsubr qword ptr [bp+10]
fstp qword ptr [bp-128]
;
; if (d_toc>302400.0) d_toc=d_toc-604800.0;
;
?debug L 685
fld qword ptr [bp-128]
fcomp dword ptr DGROUP:s@+60
fstsw ax
sahf
jbe short @3@5
fld qword ptr [bp-128]
fsub dword ptr DGROUP:s@+64
jmp short @3@7
@3@5:
;
; else if (d_toc<-302400.0)d_toc=d_toc+604800.0;
;
?debug L 686
fld qword ptr [bp-128]
fcomp qword ptr DGROUP:s@+68
fstsw ax
sahf
jae short @3@8
fld qword ptr [bp-128]
fadd dword ptr DGROUP:s@+64
@3@7:
fstp qword ptr [bp-128]
fwait
@3@8:
;
; bclk=gps_eph[n].af0+gps_eph[n].af1*d_toc+gps_eph[n].af2*d_toc*d_toc
;
?debug L 687
;
; -gps_eph[n].tgd;
;
?debug L 688
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+172]
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+180]
fmul qword ptr [bp-128]
fadd
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+188]
fmul qword ptr [bp-128]
fmul qword ptr [bp-128]
fadd
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fsub qword ptr es:_gps_eph[bx+20]
fstp qword ptr [bp-112]
;
; tc=t-bclk;
;
?debug L 689
fld qword ptr [bp+10]
fsub qword ptr [bp-112]
fstp qword ptr [bp-120]
;
; d_toe=tc-gps_eph[n].toe;
;
?debug L 690
fwait
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+28]
fsubr qword ptr [bp-120]
fstp qword ptr [bp-136]
;
; if (d_toe>302400.0) d_toe=d_toe-604800.0;
;
?debug L 691
fld qword ptr [bp-136]
fcomp dword ptr DGROUP:s@+60
fstsw ax
sahf
jbe short @3@10
fld qword ptr [bp-136]
fsub dword ptr DGROUP:s@+64
jmp short @3@12
@3@10:
;
; else if (d_toe<-302400.0)d_toe=d_toe+604800.0;
;
?debug L 692
fld qword ptr [bp-136]
fcomp qword ptr DGROUP:s@+68
fstsw ax
sahf
jae short @3@13
fld qword ptr [bp-136]
fadd dword ptr DGROUP:s@+64
@3@12:
fstp qword ptr [bp-136]
fwait
@3@13:
;
; ei=gps_eph[n].ma+d_toe*(gps_eph[n].wm+gps_eph[n].dn);
;
?debug L 693
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+156]
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fadd qword ptr es:_gps_eph[bx+12]
fmul qword ptr [bp-136]
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fadd qword ptr es:_gps_eph[bx+108]
fstp qword ptr [bp-8]
;
; ea=ei;
;
?debug L 694
fld qword ptr [bp-8]
fstp qword ptr [bp-16]
fwait
@3@14:
;
; do
; {
; diff=(ei-(ea-gps_eph[n].ety*sin(ea)))/(1.0E0-gps_eph[n].ety*cos(ea));
;
?debug L 697
fld qword ptr [bp-16]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+164]
fsubr qword ptr [bp-16]
fsubr qword ptr [bp-8]
fstp tbyte ptr [bp-218]
fld qword ptr [bp-16]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+164]
fld1
fsubr
fld tbyte ptr [bp-218]
fdivr
fstp qword ptr [bp-24]
;
; ea=ea+diff;
;
?debug L 698
fld qword ptr [bp-16]
fadd qword ptr [bp-24]
fstp qword ptr [bp-16]
fwait
;
; } while (fabs(diff) > 1.0e-12 );
;
?debug L 699
fld qword ptr [bp-24]
fabs
fcomp qword ptr DGROUP:s@+84
fstsw ax
sahf
ja @3@14
;
; bclk=bclk-4.442807633E-10*gps_eph[n].ety*gps_eph[n].sqra*sin(ea);
;
?debug L 700
fld qword ptr [bp-16]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+164]
fmul qword ptr DGROUP:s@+92
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+124]
fmul
fsubr qword ptr [bp-112]
fstp qword ptr [bp-112]
;
; result.tb=bclk;
;
?debug L 701
fld qword ptr [bp-112]
fstp qword ptr [bp-306]
;
; //
; // ea is the eccentric anomaly
; //
; ta=atan2(sqrt(1.00-pow(gps_eph[n].ety,2))*sin(ea),cos(ea)-gps_eph[n].ety);
;
?debug L 705
fld qword ptr [bp-16]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fsub qword ptr es:_gps_eph[bx+164]
sub sp,8
fstp qword ptr [bp-342]
fld dword ptr DGROUP:s@+20
sub sp,8
fstp qword ptr [bp-350]
fwait
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+164]
sub sp,8
fstp qword ptr [bp-358]
fwait
call far ptr _pow
add sp,16
fld1
fsubr
sub sp,8
fstp qword ptr [bp-350]
fwait
call far ptr _sqrt
add sp,8
fstp tbyte ptr [bp-218]
fld qword ptr [bp-16]
sub sp,8
fstp qword ptr [bp-350]
fwait
call far ptr _sin
add sp,8
fld tbyte ptr [bp-218]
fmul
sub sp,8
fstp qword ptr [bp-350]
fwait
call far ptr _atan2
add sp,16
fstp qword ptr [bp-32]
;
; //
; // TA IS THE TRUE ANOMALY (ANGLE FROM PERIGEE)
; //
; aol=ta+gps_eph[n].w;
;
?debug L 709
fwait
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fld qword ptr es:_gps_eph[bx+148]
fadd qword ptr [bp-32]
fstp qword ptr [bp-40]
;
; //
; // AOL IS THE ARGUMENT OF LATITUDE OF THE SATELLITE
; //
; // calculate the second harmonic perturbations of the orbit
; //
; delr =gps_eph[n].crc*cos(2.0*aol)+gps_eph[n].crs*sin(2.0*aol);
;
?debug L 715
fld dword ptr DGROUP:s@+20
fmul qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+76]
fstp tbyte ptr [bp-218]
fld dword ptr DGROUP:s@+20
fmul qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+84]
fld tbyte ptr [bp-218]
fadd
fstp qword ptr [bp-48]
;
; delal =gps_eph[n].cuc*cos(2.0*aol)+gps_eph[n].cus*sin(2.0*aol);
;
?debug L 716
fld dword ptr DGROUP:s@+20
fmul qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+60]
fstp tbyte ptr [bp-218]
fld dword ptr DGROUP:s@+20
fmul qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+68]
fld tbyte ptr [bp-218]
fadd
fstp qword ptr [bp-56]
;
; delinc=gps_eph[n].cic*cos(2.0*aol)+gps_eph[n].cis*sin(2.0*aol);
;
?debug L 717
fld dword ptr DGROUP:s@+20
fmul qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+92]
fstp tbyte ptr [bp-218]
fld dword ptr DGROUP:s@+20
fmul qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
mov al,byte ptr [bp+18]
cbw
imul ax,ax,196
mov dx,seg _gps_eph
mov bx,ax
mov es,dx
fmul qword ptr es:_gps_eph[bx+100]
fld tbyte ptr [bp-218]
fadd
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -