forked from KolibriOS/kolibrios
Add COFF libraries "utils.obj" atof,ftoa,random
support for exponent, high accuracy, not normalized form of writing git-svn-id: svn://kolibrios.org@4721 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
88
programs/develop/libraries/utils/trunk/example/demo.asm
Normal file
88
programs/develop/libraries/utils/trunk/example/demo.asm
Normal file
@@ -0,0 +1,88 @@
|
||||
;-----------------------------------------------------------------------------;
|
||||
; =[ INIT ]= ;
|
||||
;-----------------------------------------------------------------------------;
|
||||
;; START:
|
||||
call utils_init
|
||||
|
||||
;-----------------------------------------------------------------------------;
|
||||
; =[ USE ]= ;
|
||||
;-----------------------------------------------------------------------------;
|
||||
push fvalue ; value dt (XXXXX.XXXXX)
|
||||
push fstring ; ASCIIZ string (rb 64)
|
||||
call [_ftoa] ; convert
|
||||
|
||||
push fstring ; ASCIIZ string ('XXXX.XXXXXX',0)
|
||||
push fvalue ; value dt (?)
|
||||
call [_atof] ; EAX: 0 - error, 1 - convert
|
||||
|
||||
call [_random] ; EAX: random digit [0...99999]
|
||||
|
||||
;-----------------------------------------------------------------------------;
|
||||
; =[ LOAD ]= ;
|
||||
;-----------------------------------------------------------------------------;
|
||||
utils_init:
|
||||
mov eax, 68 ; load DLL
|
||||
mov ebx, 19 ;
|
||||
mov ecx, utils_lib
|
||||
int 0x40
|
||||
test eax, eax
|
||||
jz utils_exit
|
||||
|
||||
mov edx, eax ; initialize import
|
||||
mov esi, utils_import ; import list
|
||||
utils_loop:
|
||||
lodsd
|
||||
test eax, eax
|
||||
jz utils_done
|
||||
push edx
|
||||
utils_find:
|
||||
mov ebx, [edx]
|
||||
test ebx, ebx
|
||||
jz utils_exit ;import_not_found
|
||||
push eax
|
||||
@@:
|
||||
mov cl, [eax]
|
||||
cmp cl, [ebx]
|
||||
jnz utils_next
|
||||
test cl, cl
|
||||
jz utils_found
|
||||
inc eax
|
||||
inc ebx
|
||||
jmp @b
|
||||
utils_next:
|
||||
pop eax
|
||||
add edx, 8
|
||||
jmp utils_find
|
||||
utils_found:
|
||||
pop eax
|
||||
mov eax, [edx+4]
|
||||
mov [esi-4], eax
|
||||
pop edx
|
||||
jmp utils_loop
|
||||
utils_done:
|
||||
ret
|
||||
utils_exit:
|
||||
mov eax, -1
|
||||
int 0x40
|
||||
|
||||
;-----------------------------------------------------------------------------;
|
||||
; =[ DATA ]= ;
|
||||
;-----------------------------------------------------------------------------;
|
||||
fvalue dt -502556.267e600 ; dt ?
|
||||
fstring db rb 100 ; '-15.246789',0
|
||||
|
||||
utils_lib db '/sys/lib/utils.obj',0 ; path
|
||||
|
||||
align 4
|
||||
utils_import:
|
||||
_ftoa dd ftoa
|
||||
_atof dd atof
|
||||
_random dd random
|
||||
dd 0
|
||||
|
||||
ftoa db 'ftoa',0
|
||||
atof db 'atof',0
|
||||
random db 'random',0
|
||||
;-----------------------------------------------------------------------------;
|
||||
|
||||
|
Reference in New Issue
Block a user