📄 gpsfuncs.asm
字号:
fstp qword ptr [bp-64]
;
; //
; // R IS THE RADIUS OF SATELLITE ORBIT AT TIME T
; //
; r=pow(gps_eph[n].sqra,2)*(1.00-gps_eph[n].ety*cos(ea))+delr;
;
?debug L 721
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
fstp tbyte ptr [bp-218]
fld dword ptr DGROUP:s@+20
sub sp,8
fstp qword ptr [bp-342]
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+124]
sub sp,8
fstp qword ptr [bp-350]
fwait
call far ptr _pow
add sp,16
fld tbyte ptr [bp-218]
fmul
fadd qword ptr [bp-48]
fstp qword ptr [bp-72]
;
; aol=aol+delal;
;
?debug L 722
fld qword ptr [bp-40]
fadd qword ptr [bp-56]
fstp qword ptr [bp-40]
;
; inc=gps_eph[n].inc0+delinc+gps_eph[n].idot*d_toe;
;
?debug L 723
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+140]
fadd qword ptr [bp-64]
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+52]
fmul qword ptr [bp-136]
fadd
fstp qword ptr [bp-80]
;
; // WRITE(6,*)T-TOE(N)
; //
; // LA IS THE CORRECTED LONGITUDE OF THE ASCENDING NODE
; //
; la=gps_eph[n].w0+(gps_eph[n].omegadot-omegae)*d_toe-
;
?debug L 728
;
; omegae*gps_eph[n].toe;
;
?debug L 729
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+132]
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+44]
fsub qword ptr DGROUP:_omegae
fmul qword ptr [bp-136]
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+28]
fmul qword ptr DGROUP:_omegae
fsub
fstp qword ptr [bp-88]
;
; xp=r*cos(aol);
;
?debug L 730
fld qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-72]
fstp qword ptr [bp-96]
;
; yp=r*sin(aol);
;
?debug L 731
fld qword ptr [bp-40]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fmul qword ptr [bp-72]
fstp qword ptr [bp-104]
;
; result.x=xp*cos(la)-yp*cos(inc)*sin(la);
;
?debug L 732
fld qword ptr [bp-80]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-104]
fstp tbyte ptr [bp-218]
fld qword ptr [bp-88]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fld tbyte ptr [bp-218]
fmul
fstp tbyte ptr [bp-218]
fld qword ptr [bp-88]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-96]
fld tbyte ptr [bp-218]
fsub
fstp qword ptr [bp-330]
;
; result.y=xp*sin(la)+yp*cos(inc)*cos(la);
;
?debug L 733
fld qword ptr [bp-80]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fmul qword ptr [bp-104]
fstp tbyte ptr [bp-218]
fld qword ptr [bp-88]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fld tbyte ptr [bp-218]
fmul
fstp tbyte ptr [bp-218]
fld qword ptr [bp-88]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fmul qword ptr [bp-96]
fld tbyte ptr [bp-218]
fadd
fstp qword ptr [bp-322]
;
; result.z=yp*sin(inc);
;
?debug L 734
fld qword ptr [bp-80]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fmul qword ptr [bp-104]
fstp qword ptr [bp-314]
;
; result.az=0.0;
;
?debug L 735
fwait
mov dword ptr [bp-298],large 0
;
; result.el=0.0;
;
?debug L 736
mov dword ptr [bp-294],large 0
;
; if (rec_pos_xyz.x != 0.0 || rec_pos_xyz.y != 0.0 || rec_pos_xyz.z != 0.0)
;
?debug L 737
mov ax,seg _rec_pos_xyz
mov es,ax
fld qword ptr es:_rec_pos_xyz
fldz
fcompp
fstsw ax
sahf
jne short @3@19
mov ax,seg _rec_pos_xyz
mov es,ax
fld qword ptr es:_rec_pos_xyz+8
fldz
fcompp
fstsw ax
sahf
jne short @3@19
mov ax,seg _rec_pos_xyz
mov es,ax
fld qword ptr es:_rec_pos_xyz+16
fldz
fcompp
fstsw ax
sahf
je @3@31
@3@19:
;
; {
; /*
; CALCULATE THE POSITION OF THE RECEIVER
; */
; north.x=-cos(rec_pos_llh.lon)*sin(rec_pos_llh.lat);
;
?debug L 742
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh+8
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fchs
fstp tbyte ptr [bp-218]
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fld tbyte ptr [bp-218]
fmul
fstp qword ptr [bp-242]
;
; north.y=-sin(rec_pos_llh.lon)*sin(rec_pos_llh.lat);
;
?debug L 743
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh+8
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fchs
fstp tbyte ptr [bp-218]
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fld tbyte ptr [bp-218]
fmul
fstp qword ptr [bp-234]
;
; north.z= cos(rec_pos_llh.lat);
;
?debug L 744
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fstp qword ptr [bp-226]
;
; east.x=-sin(rec_pos_llh.lon);
;
?debug L 745
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh+8
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fchs
fstp qword ptr [bp-266]
;
; east.y= cos(rec_pos_llh.lon);
;
?debug L 746
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh+8
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fstp qword ptr [bp-258]
;
; east.z=0.0;
;
?debug L 747
fldz
fstp qword ptr [bp-250]
;
; up.x=cos(rec_pos_llh.lon)*cos(rec_pos_llh.lat);
;
?debug L 748
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh+8
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fstp tbyte ptr [bp-218]
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fld tbyte ptr [bp-218]
fmul
fstp qword ptr [bp-290]
;
; up.y=sin(rec_pos_llh.lon)*cos(rec_pos_llh.lat);
;
?debug L 749
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh+8
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fstp tbyte ptr [bp-218]
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _cos
add sp,8
fld tbyte ptr [bp-218]
fmul
fstp qword ptr [bp-282]
;
; up.z=sin(rec_pos_llh.lat);
;
?debug L 750
mov ax,seg _rec_pos_llh
mov es,ax
fld qword ptr es:_rec_pos_llh
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sin
add sp,8
fstp qword ptr [bp-274]
;
; /*
; DETERMINE IF A CLEAR LINE OF SIGHT EXISTS
; */
; xls =result.x-rec_pos_xyz.x;
;
?debug L 754
mov ax,seg _rec_pos_xyz
mov es,ax
fld qword ptr es:_rec_pos_xyz
fsubr qword ptr [bp-330]
fstp qword ptr [bp-144]
;
; yls =result.y-rec_pos_xyz.y;
;
?debug L 755
mov ax,seg _rec_pos_xyz
mov es,ax
fld qword ptr es:_rec_pos_xyz+8
fsubr qword ptr [bp-322]
fstp qword ptr [bp-152]
;
; zls =result.z-rec_pos_xyz.z;
;
?debug L 756
mov ax,seg _rec_pos_xyz
mov es,ax
fld qword ptr es:_rec_pos_xyz+16
fsubr qword ptr [bp-314]
fstp qword ptr [bp-160]
;
; range1=sqrt(xls*xls+yls*yls+zls*zls);
;
?debug L 757
fld qword ptr [bp-144]
fmul qword ptr [bp-144]
fld qword ptr [bp-152]
fmul qword ptr [bp-152]
fadd
fld qword ptr [bp-160]
fmul qword ptr [bp-160]
fadd
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _sqrt
add sp,8
fstp qword ptr [bp-168]
;
; tdot=(up.x*xls+up.y*yls+up.z*zls)/range1;
;
?debug L 758
fld qword ptr [bp-290]
fmul qword ptr [bp-144]
fld qword ptr [bp-282]
fmul qword ptr [bp-152]
fadd
fld qword ptr [bp-274]
fmul qword ptr [bp-160]
fadd
fdiv qword ptr [bp-168]
fstp qword ptr [bp-176]
;
;
; if ( tdot >= 1.00 ) satang=pi/2.0;
;
?debug L 760
fld qword ptr [bp-176]
fld1
fcompp
fstsw ax
sahf
ja short @3@21
fld qword ptr DGROUP:_pi
fdiv dword ptr DGROUP:s@+20
jmp short @3@24
@3@21:
;
; else if ( tdot <= -1.00 ) satang=-pi/2.0;
;
?debug L 761
fld qword ptr [bp-176]
fcomp qword ptr DGROUP:s@+52
fstsw ax
sahf
ja short @3@23
fld qword ptr DGROUP:_pi
fchs
fdiv dword ptr DGROUP:s@+20
jmp short @3@24
@3@23:
;
; else satang=asin(tdot);
;
?debug L 762
fld qword ptr [bp-176]
sub sp,8
fstp qword ptr [bp-342]
fwait
call far ptr _asin
add sp,8
@3@24:
fstp qword ptr [bp-184]
fwait
;
;
; xaz=east.x*xls+east.y*yls;
;
?debug L 764
fld qword ptr [bp-266]
fmul qword ptr [bp-144]
fld qword ptr [bp-258]
fmul qword ptr [bp-152]
fadd
fstp qword ptr [bp-192]
;
; yaz=north.x*xls+north.y*yls+north.z*zls;
;
?debug L 765
fld qword ptr [bp-242]
fmul qword ptr [bp-144]
fld qword ptr [bp-234]
fmul qword ptr [bp-152]
fadd
fld qword ptr [bp-226]
fmul qword ptr [bp-160]
fadd
fstp qword ptr [bp-200]
;
; if (xaz !=0.0 || yaz !=0.0) az=atan2(xaz,yaz);
;
?debug L 766
fld qword ptr [bp-192]
fldz
fcompp
fstsw ax
sahf
jne short @3@27
fld qword ptr [bp-200]
fldz
fcompp
fstsw ax
sahf
je short @3@28
@3@27:
fld qword ptr [bp-200]
sub sp,8
fstp qword ptr [bp-342]
fld qword ptr [bp-192]
sub sp,8
fstp qword ptr [bp-350]
fwait
call far ptr _atan2
add sp,16
jmp short @3@29
@3@28:
;
; else az=0.0;
;
?debug L 767
fldz
@3@29:
fstp qword ptr [bp-208]
fwait
;
; result.el=satang;
;
?debug L 768
fld qword ptr [bp-184]
fstp dword ptr [bp-294]
;
; result.az=az;
;
?debug L 769
fld qword ptr [bp-208]
fstp dword ptr [bp-298]
fwait
@3@31:
;
; /* if (satang<(mask_angle-.035))
; {
; fprintf(kalm,"prn %d LOS problem time=%lf\n",n,t);
; fprintf(kalm,"lat=%lf long=%lf hae=%lf\n",
; rec_pos_llh.lat,rec_pos_llh.lon,rec_pos_llh.hae);
; fprintf(kalm,"rcvr x=%lf y=%lf z=%lf\n",rec_pos_xyz.x,rec_pos_xyz.y,rec_pos_xyz.z);
; fprintf(kalm,"sat x=%lf y=%lf z=%lf\n",result.x,result.y,result.z);
; write_Kalm_ephemeris(n);
; }*/
; }
; // gotoxy(1,24);
; // printf("satpos_ephemeris->");
; return(result);
;
?debug L 782
lea si,word ptr [bp-330]
mov ax,ss
les di,dword ptr [bp+6]
push ds
mov ds,ax
mov cx,20
rep movsw
pop ds
mov dx,word ptr [bp+8]
mov ax,word ptr [bp+6]
;
; }
;
?debug L 783
pop di
pop si
leave
ret
?debug C E31E05656365667428001E16
?debug C E31F000400161E00
?debug C E606726573756C741E02B6FE00000275701802DE+
?debug C FE000004656173741802F6FE0000056E6F727468+
?debug C 18020EFF000002617A0F0230FF00000379617A0F+
?debug C 0238FF00000378617A0F0240FF00000673617461+
?debug C 6E670F0248FF00000474646F740F0250FF000006+
?debug C 72616E6765310F0258FF0000037A6C730F0260FF+
?debug C 000003796C730F0268FF000003786C730F0270FF+
?debug C 000005645F746F650F0278FF000005645F746F63+
?debug C 0F0280FF00000274630F0288FF00000462636C6B+
?debug C 0F0290FF00000279700F0298FF00000278700F02+
?debug C A0FF0000026C610F02A8FF000003696E630F02B0+
?debug C FF000001720F02B8FF00000664656C696E630F02+
?debug C C0FF00000564656C616C0F02C8FF00000464656C+
?debug C 720F02D0FF000003616F6C0F02D8FF0000027461+
?debug C 0F02E0FF000004646966660F02E8FF0000026561+
?debug C 0F02F0FF00000265690F02F8FF00000672657475+
?debug C 726E1F0A0600000001740F0A0A000000016E020A+
?debug C 12000000
?debug E
?debug E
@satpos_ephemeris$qdc endp
assume cs:GPSFUNCS_TEXT,ds:DGROUP
@read_initial_data$qv proc far
;
; void read_initial_data(void)
;
?debug L 799
?debug B
push bp
mov bp,sp
sub sp,24
push si
push di
?debug B
cmp word ptr __stklen,sp
ja short @4@3
call far ptr F_OVERFLOW@
@4@3:
;
; {
; int id;
; satvis dummy;
; for (id=1;id<=32;id++) gps_alm[id].inc=0.0;
;
?debug L 803
mov dx,1
jmp short @4@6
@4@4:
mov bx,dx
imul bx,bx,74
mov ax,seg _gps_alm
mov es,ax
mov dword ptr es:_gps_alm[bx+8],large 0
inc dx
@4@6:
cmp dx,32
jle short @4@4
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -