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

📄 gpsfuncs.asm

📁 OpenSource GPS is software for x86 PCs that allows you to acquire, track and demodulate signals from
💻 ASM
📖 第 1 页 / 共 5 页
字号:
   ;	*/
   ;	      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 + -