[alt.msdos.programmer] Crashing 386

kdq@demott.COM (Kevin D. Quitt) (03/13/90)

    I recently posted about a problem I had involving some old utilities
based on MetaWare's library.  These programs worked on 8088,6,Vxx, and
286 machines, but crashed on certain 386 based machines.  I received
some information about what might have been the cause - which after mush
chasing my tail, turned out to be correct.  I would like to credit where
it's due, but I've lost the gentleman's information (sorry). 

    Originally the problem seemed to be related to clones.  Compaqs and
other top machines were able to run the programs, but as it turns out,
there is a 1:1 correlation between machines that have 387s and those
that will run the programs.  The better machines were also unable to run
the programs when the 387s were pulled. 

In any case, the problem code is listed below (generated by sourcer). 
The program crashes at the fldcw instruction.  I have my patch now - I
just don't call the subroutine (since the utilities do no math).  But
the question remains: why does this hang the 386, and not any of the
other processors?

0079 DB E3		fninit			; Initialize math uP
007B 33 C0		xor	ax,ax
007D A3 001E		mov	data_134,ax
0080 B1 0F		mov	cl,0Fh
0082 D3 E8		shr	ax,cl		; Shift w/zeros fill
0084 D9 3E 001E		fnstcw	data_134        ; Store control word
0088 D3 E8		shr	ax,cl
008A D3 E8		shr	ax,cl
008C 0B 06 001E		or	ax,data_134	; (82B3:001E=0)
0090 74 0E		jz	short loc_1021
0092 9B- 2E: D9 2E 00A4	fldcw	cs:data_256	; (=3FFh) Load control word
0098 C7 06 001E 0001	mov	data_134,1
009E EB 03		jmp	short loc_ret_1022

		loc_1021:
00A0 A3 001E		mov	data_134,ax

		loc_ret_1022:
00A3 C3			retn

		data_256:
00A4 03FF	        dw	3FFh		;  xref 0094
-- 

Kevin D. Quitt                          Manager, Software Development
DeMott Electronics Co.                  VOICE (818) 988-4975
14707 Keswick St.                       FAX   (818) 997-1190
Van Nuys, CA  91405-1266                MODEM (818) 997-4496 Telebit PEP last
34 12 N  118 27 W                       srhqla!demott!kdq   kdq@demott.com

        "Next time, Jack, write a God-damned memo!" - Jack Ryan