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

📄 gpsfuncs.asm

📁 OpenSource GPS is software for x86 PCs that allows you to acquire, track and demodulate signals from
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	.386p
	.387
	ifndef	??version
?debug	macro
	endm
publicdll macro	name
	public	name
	endm
$comm	macro	name,dist,size,count
	comm	dist name:BYTE:count*size
	endm
	else
$comm	macro	name,dist,size,count
	comm	dist name[size]:BYTE:count
	endm
	endif
	?debug	V 301h
	?debug	S "gpsfuncs.cpp"
	?debug	C E9639F2A330C67707366756E63732E637070
	?debug	C E940287922135C4243355C494E434C5544455C54494D452E48
	?debug	C E940287922145C4243355C494E434C5544455C5F646566732E68
	?debug	C E940287922145C4243355C494E434C5544455C535444494F2E48
	?debug	C E940287922155C4243355C494E434C5544455C5F6E66696C652E68
	?debug	C E940287922145C4243355C494E434C5544455C5F6E756C6C2E68
	?debug	C E940287922155C4243355C494E434C5544455C5354444C49422E48
	?debug	C E940287922145C4243355C494E434C5544455C434F4E494F2E48
	?debug	C E940287922135C4243355C494E434C5544455C4D4154482E48
	?debug	C E940287922155C4243355C494E434C5544455C7374646465662E68
	?debug	C E940287922155C4243355C494E434C5544455C535452494E472E48
	?debug	C E940287922115C4243355C494E434C5544455C494F2E48
	?debug	C E940287922125C4243355C494E434C5544455C444F532E48
	?debug	C E9D28BE22E0A434D4154524958332E48
	?debug	C E940287922145C4243355C494E434C5544455C737464696F2E68
	?debug	C E940287922155C4243355C494E434C5544455C7374646C69622E68
	?debug	C E940287922175C4243355C494E434C5544455C696F73747265616D+
	?debug	C 2E68
	?debug	C E940287922165C4243355C494E434C5544455C6673747265616D2E+
	?debug	C 68
	?debug	C E940287922165C4243355C494E434C5544455C696F6D616E69702E+
	?debug	C 68
	?debug	C E940287922155C4243355C494E434C5544455C737472696E672E68
	?debug	C E940287922135C4243355C494E434C5544455C6D6174682E68
	?debug	C E940287922155C4243355C494E434C5544455C6D616C6C6F632E68
	?debug	C E940287922145C4243355C494E434C5544455C616C6C6F632E68
	?debug	C E9A161942F084750323032312E48
	?debug	C E93CA0263108434F4E5354532E48
GPSFUNCS_TEXT	segment byte public use16 'CODE'
GPSFUNCS_TEXT	ends
DGROUP	group	_DATA,_BSS
	assume	cs:GPSFUNCS_TEXT,ds:DGROUP
_DATA	segment word public use16 'DATA'
d@	label	byte
d@w	label	word
_DATA	ends
_BSS	segment word public use16 'BSS'
b@	label	byte
b@w	label	word
_BSS	ends
_DATA	segment word public use16 'DATA'
_pi	label	qword
	db	40
	db	45
	db	68
	db	84
	db	251
	db	33
	db	9
	db	64
_r_to_d	label	qword
	db	248
	db	193
	db	99
	db	26
	db	220
	db	165
	db	76
	db	64
_c	label	qword
	db	0
	db	0
	db	0
	db	74
	db	120
	db	222
	db	177
	db	65
_omegae	label	qword
	db	91
	db	141
	db	203
	db	215
	db	167
	db	29
	db	19
	db	63
_lambda	label	qword
	db	153
	db	230
	db	167
	db	6
	db	139
	db	91
	db	200
	db	63
	?debug	C E91C8A473109535452554354532E48
	?debug	C E98D961A3309474C4F42414C532E48
	?debug	C E96397E3320A47505346554E43532E48
_c_2p12	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	176
	db	64
_c_2p4	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	48
	db	64
_c_2m5	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	160
	db	63
_c_2m11	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	64
	db	63
_c_2m19	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	192
	db	62
_c_2m20	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	176
	db	62
_c_2m21	label	qword
	db	0
	db	0
	db	0
	db	0
	db	0
	db	0
	db	160
	db	62
_c_2m23	label	qword
	db	237
	db	255
	db	255
	db	255
	db	255
	db	255
	db	127
	db	62
_c_2m24	label	qword
	db	252
	db	255
	db	255
	db	255
	db	255
	db	255
	db	111
	db	62
_c_2m27	label	qword
	db	2
	db	0
	db	0
	db	0
	db	0
	db	0
	db	64
	db	62
_c_2m29	label	qword
	db	8
	db	0
	db	0
	db	0
	db	0
	db	0
	db	32
	db	62
_c_2m30	label	qword
	db	2
	db	0
	db	0
	db	0
	db	0
	db	0
	db	16
	db	62
_c_2m31	label	qword
	db	251
	db	255
	db	255
	db	255
	db	255
	db	255
	db	255
	db	61
_c_2m33	label	qword
	db	7
	db	0
	db	0
	db	0
	db	0
	db	0
	db	224
	db	61
_c_2m38	label	qword
	db	248
	db	255
	db	255
	db	255
	db	255
	db	255
	db	143
	db	61
_c_2m43	label	qword
	db	254
	db	255
	db	255
	db	255
	db	255
	db	255
	db	63
	db	61
_c_2m50	label	qword
	db	9
	db	251
	db	255
	db	255
	db	255
	db	255
	db	207
	db	60
_c_2m55	label	qword
	db	252
	db	255
	db	255
	db	255
	db	255
	db	255
	db	127
	db	60
_a	label	qword
	db	0
	db	0
	db	0
	db	64
	db	166
	db	84
	db	88
	db	65
_b	label	qword
	db	117
	db	147
	db	24
	db	20
	db	196
	db	63
	db	88
	db	65
_DATA	ends
GPSFUNCS_TEXT	segment byte public use16 'CODE'
	assume	cs:GPSFUNCS_TEXT,ds:DGROUP
@satfind$qc	proc	far
   ;	
   ;	satvis satfind(char i)
   ;	
	?debug	L 456
	?debug	B
	push	bp
	mov	bp,sp
	sub	sp,254
	push	si
	push	di
	?debug	C E60169020A0A000000
	?debug	B
	cmp	word ptr __stklen,sp
	ja	short @1@3
	call	far ptr F_OVERFLOW@
@1@3:
   ;	
   ;	{
   ;		float tdot,az;
   ;	   float satang,alm_time,almanac_date;
   ;	   double range1,range2,xls,yls,zls,xaz,yaz;
   ;	   long  jd_yr;
   ;	   ecef gpspos1,gpspos2,north,east,up;
   ;	   satvis result;
   ;	   int  jd_m;
   ;	   struct tm *gmt;
   ;	   double time_s;
   ;	/*
   ;	      INITIALIZE ALL THE CONSTANTS
   ;	*/
   ;	//	gotoxy(1,24);
   ;	//	printf("->satfind");
   ;		putenv(tzstr);
   ;	
	?debug	L 472
	push	seg _tzstr
	push	offset _tzstr
	call	far ptr _putenv
	add	sp,4
   ;	
   ;		tzset();
   ;	
	?debug	L 473
	call	far ptr _tzset
   ;	
   ;	//   thetime=time(NULL);
   ;		gmt=gmtime(&thetime);
   ;	
	?debug	L 475
	push	seg _thetime
	push	offset _thetime
	call	far ptr _gmtime
	add	sp,4
	mov	word ptr [bp-82],dx
	mov	word ptr [bp-84],ax
   ;	
   ;	// set up the correct time
   ;		if (gmt->tm_mon <= 1)
   ;	
	?debug	L 477
	les	bx,dword ptr [bp-84]
	cmp	word ptr es:[bx+8],1
	jg	short @1@5
   ;	
   ;		{
   ;		  jd_yr =365.25*(gmt->tm_year-1.+1900.);
   ;	
	?debug	L 479
	mov	ax,word ptr es:[bx+10]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fld1	
	fsub	
	fadd	dword ptr DGROUP:s@
	fmul	dword ptr DGROUP:s@+4
	call	far ptr F_FTOL@
	shl	eax,16
	shrd	eax,edx,16
	mov	dword ptr [bp-80],eax
   ;	
   ;		  jd_m  =30.6001*(gmt->tm_mon+14.);
   ;	
	?debug	L 480
	les	bx,dword ptr [bp-84]
	mov	ax,word ptr es:[bx+8]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fadd	dword ptr DGROUP:s@+8
	jmp	short @1@6
@1@5:
   ;	
   ;		}
   ;		else
   ;		{
   ;		  jd_yr=365.25*(gmt->tm_year+1900.);
   ;	
	?debug	L 484
	les	bx,dword ptr [bp-84]
	mov	ax,word ptr es:[bx+10]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fadd	dword ptr DGROUP:s@
	fmul	dword ptr DGROUP:s@+4
	call	far ptr F_FTOL@
	shl	eax,16
	shrd	eax,edx,16
	mov	dword ptr [bp-80],eax
   ;	
   ;		  jd_m =30.6001*(gmt->tm_mon+2.);
   ;	
	?debug	L 485
	les	bx,dword ptr [bp-84]
	mov	ax,word ptr es:[bx+8]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fadd	dword ptr DGROUP:s@+20
@1@6:
	fmul	qword ptr DGROUP:s@+12
	call	far ptr F_FTOL@
	mov	dx,ax
   ;	
   ;		}
   ;		time_s=gmt->tm_min/1440.+gmt->tm_sec/86400.+1720981.5+gmt->tm_hour/24.
   ;	
	?debug	L 487
   ;	
   ;		 +jd_yr+jd_m+gmt->tm_mday;
   ;	
	?debug	L 488
	les	bx,dword ptr [bp-84]
	mov	ax,word ptr es:[bx+2]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fdiv	dword ptr DGROUP:s@+24
	mov	ax,word ptr es:[bx]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fdiv	dword ptr DGROUP:s@+28
	fadd	
	fadd	dword ptr DGROUP:s@+32
	mov	ax,word ptr es:[bx+4]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fdiv	dword ptr DGROUP:s@+36
	fadd	
	mov	eax,dword ptr [bp-80]
	mov	dword ptr [bp-96],eax
	fild	dword ptr [bp-96]
	fadd	
	mov	word ptr [bp-96],dx
	fild	word ptr [bp-96]
	fadd	
	mov	ax,word ptr es:[bx+6]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fadd	
	fstp	qword ptr [bp-92]
   ;	
   ;		gps_week=int((time_s-2444244.5)/7.);
   ;	
	?debug	L 489
	fld	qword ptr [bp-92]
	fsub	dword ptr DGROUP:s@+40
	fdiv	dword ptr DGROUP:s@+44
	call	far ptr F_FTOL@
	mov	dx,seg _gps_week
	mov	es,dx
	mov	word ptr es:_gps_week,ax
   ;	
   ;		almanac_date=gps_alm[i].week*7.0+2444244.5;
   ;	
	?debug	L 490
	mov	al,byte ptr [bp+10]
	cbw	
	imul	ax,ax,74
	mov	dx,seg _gps_alm
	mov	bx,ax
	mov	es,dx
	mov	ax,word ptr es:_gps_alm[bx+70]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fmul	dword ptr DGROUP:s@+44
	fadd	dword ptr DGROUP:s@+40
	fstp	dword ptr [bp-20]
   ;	
   ;	   if (gps_week-gps_alm[i].week>512) almanac_date+=1024*7.0;
   ;	
	?debug	L 491
	fwait	
	mov	al,byte ptr [bp+10]
	cbw	
	imul	ax,ax,74
	mov	dx,seg _gps_alm
	mov	bx,seg _gps_week
	mov	es,bx
	mov	bx,word ptr es:_gps_week
	mov	word ptr [bp-100],bx
	mov	es,dx
	xchg	bx,ax
	sub	ax,word ptr es:_gps_alm[bx+70]
	cmp	ax,512
	jle	short @1@9
	fld	dword ptr [bp-20]
	fadd	dword ptr DGROUP:s@+48
	fstp	dword ptr [bp-20]
	fwait	
@1@9:
   ;	
   ;	   alm_time=(time_s-almanac_date)*86400.;
   ;	
	?debug	L 492
	fld	dword ptr [bp-20]
	fsubr	qword ptr [bp-92]
	fmul	dword ptr DGROUP:s@+28
	fstp	dword ptr [bp-16]
   ;	
   ;	   clock_tow=(time_s-gps_week*7.-2444244.5)*86400.;
   ;	
	?debug	L 493
	fwait	
	mov	ax,word ptr [bp-100]
	mov	word ptr [bp-96],ax
	fild	word ptr [bp-96]
	fmul	dword ptr DGROUP:s@+44
	fsubr	qword ptr [bp-92]
	fsub	dword ptr DGROUP:s@+40
	fmul	dword ptr DGROUP:s@+28
	call	far ptr F_FTOL@
	shl	eax,16
	shrd	eax,edx,16
	mov	dx,seg _clock_tow
	mov	es,dx
	mov	dword ptr es:_clock_tow,eax
   ;	
   ;	/*
   ;	      CALCULATE THE POSITION OF THE SATELLITES
   ;	*/
   ;	   if (gps_alm[i].inc > 0.0 && i>0)
   ;	
	?debug	L 497
	mov	al,byte ptr [bp+10]
	cbw	
	mov	word ptr [bp-98],ax
	imul	ax,ax,74
	mov	dx,seg _gps_alm
	mov	bx,ax
	mov	es,dx
	fld	dword ptr es:_gps_alm[bx+8]
	fldz	
	fcompp
	fstsw	ax
	sahf	
	jae	@1@22
	cmp	word ptr [bp-98],0
	jle	@1@22
   ;	
   ;	      {
   ;		gpspos1=satpos_almanac(alm_time,i);
   ;	
	?debug	L 499
	mov	al,byte ptr [bp+10]
	push	ax
	push	dword ptr [bp-16]
	push	ss
	lea	ax,word ptr [bp-134]
	push	ax
	call	far ptr @satpos_almanac$qfc
	add	sp,10
   ;	
   ;		gpspos2=satpos_almanac(alm_time+1.0,i);
   ;	
	?debug	L 500
	mov	al,byte ptr [bp+10]
	push	ax
	fld	dword ptr [bp-16]
	fld1	
	fadd	
	sub	sp,4
	fstp	dword ptr [bp-264]
	push	ss
	fwait	
	lea	ax,word ptr [bp-158]
	push	ax
	call	far ptr @satpos_almanac$qfc
	add	sp,10
   ;	
   ;	/*
   ;	      CALCULATE THE POSITION OF THE RECEIVER
   ;	*/
   ;		rec_pos_xyz=llh_to_ecef(current_loc);
   ;	
	?debug	L 504
	mov	ax,offset _current_loc
	mov	dx,seg _current_loc
	mov	cx,24
	call	far ptr F_SPUSH@
	push	seg _rec_pos_xyz
	push	offset _rec_pos_xyz
	call	far ptr @llh_to_ecef$q3llh
	add	sp,28
   ;	
   ;		north.x=-cos(current_loc.lon)*sin(current_loc.lat);
   ;	
	?debug	L 505
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc+8
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _cos
	add	sp,8
	fchs	
	fstp	tbyte ptr [bp-110]
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _sin
	add	sp,8
	fld	tbyte ptr [bp-110]
	fmul	
	fstp	qword ptr [bp-182]
   ;	
   ;		north.y=-sin(current_loc.lon)*sin(current_loc.lat);
   ;	
	?debug	L 506
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc+8
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _sin
	add	sp,8
	fchs	
	fstp	tbyte ptr [bp-110]
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _sin
	add	sp,8
	fld	tbyte ptr [bp-110]
	fmul	
	fstp	qword ptr [bp-174]
   ;	
   ;	   north.z= cos(current_loc.lat);
   ;	
	?debug	L 507
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _cos
	add	sp,8
	fstp	qword ptr [bp-166]
   ;	
   ;	   east.x=-sin(current_loc.lon);
   ;	
	?debug	L 508
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc+8
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _sin
	add	sp,8
	fchs	
	fstp	qword ptr [bp-206]
   ;	
   ;	   east.y= cos(current_loc.lon);
   ;	
	?debug	L 509
	mov	ax,seg _current_loc
	mov	es,ax
	fld	qword ptr es:_current_loc+8
	sub	sp,8
	fstp	qword ptr [bp-266]
	fwait	
	call	far ptr _cos
	add	sp,8
	fstp	qword ptr [bp-198]
   ;	
   ;	//   east.z=0.0;
   ;	   up.x=cos(current_loc.lon)*cos(current_loc.lat);
   ;	

⌨️ 快捷键说明

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