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

📄 gpsfuncs.asm

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