Oto poprawiona procedurka - wraz z procedurka normalizujaca stringi

radix		dw 10
dokladnosc	EQU 4

FloatToString	PROC
	PUSH	esi
	PUSH	edi
	sub	esp, 10
	fld  	st(0)
	FNSTCW WORD PTR [ESP]
	OR BYTE PTR [ESP+1],1000b
	AND BYTE PTR [ESP+1],11111011b
	FLDCW  WORD PTR [ESP]			;ustaw Round Up - hmm przy sciaganiu przez
	fbstp	[esp]				;fdstp liczbe BCD zaokragla w dol :)
	fbld	[esp]
	FSUBP	st(1),st(0)
	lea	esi, [esp+8]
	lea	edi, [InternalBufor]
	TEST    BYTE PTR [ESI+1],10000000b		;okresl znak (bit 79)
	JZ      @dodatnia
	MOV     BYTE PTR [EDI],'-'
	JMP     @wartosc
@dodatnia:
	MOV     BYTE PTR [EDI],'+'		
@wartosc:
	INC 	EDI
	mov	ecx, 9
.REPEAT							;przelicz wartosc BCD na string
	mov al, [esi]
	dec esi
	rol ax, 12
	rol ah, 4
	and ax, 0f0fh
	add ax, 3030h
	mov [edi], ax
	add edi, 2
	dec ecx
.UNTIL ZERO?
	FNSTCW WORD PTR [EDI]				;Ustaw znacznik RC tak aby
	OR BYTE PTR [EDI+1],100b			;koprocesor zaokraglal liczby
	AND BYTE PTR [EDI+1],11110111b			;w dol
	FLDCW  WORD PTR [EDI]
	MOV BYTE PTR [EDI],','
	INC EDI
	MOV ECX,dokladnosc
	FABS						;zmien znak na dodatni
.REPEAT	
	FILD 	radix
	FMUL
	FIST WORD PTR [EDI]
	FILD WORD PTR [EDI]				;i pokolei zdejmuj wartosci ze stosu
	FSUBP	st(1),st(0)				;odejmujac je zarazem od liczby
	ADD BYTE PTR [EDI],30h				;zmien na kod ASCII ;)
	INC EDI
	DEC ECX
.UNTIL ZERO?
	MOV BYTE PTR [EDI],0		;Na koniec stringa wpisz 0
	fbstp	[esp]			;zdejmij liczbe z wirzcholka stosu (0) 
					;i zapeln normalny stos zerami ;)
	add	esp, 10
	pop	edi
	pop	esi
	ret
FloatToString	ENDP

;----------------------------------
;NormalizujString
;We : ESI = wsk do Stringa
;Wy : ECX = nowa dlugosc Stringa
;----------------------------------
NormalizujString        PROC
		PUSH EDI
		PUSH ESI
		PUSH EAX
		INC ESI
		MOV EDI,ESI
		XOR ECX,ECX
		DEC ECX
@peteleczka:	LODSB
		INC ECX
		CMP AL,'0'
		JE @peteleczka
		PUSH ECX		
		XOR ECX,ECX
		INC ECX
@peteleczka1:	LODSB
		INC ECX
		CMP AL,0
		JNE @peteleczka1
		POP ESI
		ADD ESI,EDI
		PUSH ECX
		REP MOVSB
		POP ECX
		POP EAX
		POP ESI
		POP EDI
		RET
NormalizujString        ENDP


Przykladowe uzycie tych procedurek to :

liczba	dq -999.1231234

FLD QWORD PTR [liczba]
Call FloatToString
LEA ESI,[InternalBufor]
Call NormalizujString

oczywiscie przy REAL8 i REAL4 podobnie korzystamu z procedurki
FloatToString - odkladajac na stosie koprocka owe wartosci

FLD REAL8 PTR [liczba]
FLD REAL4 PTR [liczba]


To tyle 
CoxoC