forked from KolibriOS/kolibrios
Function 47 - output of qword (64-bites) number
git-svn-id: svn://kolibrios.org@655 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
01247f1a05
commit
8c19251a65
@ -2198,12 +2198,13 @@ dd 638
|
||||
* eax = 47 - ®¬¥à äãªæ¨¨
|
||||
* ebx = ¯ à ¬¥âàë ¯à¥®¡à §®¢ ¨ï ç¨á« ¢ ⥪áâ:
|
||||
* bl = 0 - ecx ᮤ¥à¦¨â ç¨á«®
|
||||
* bl = 1 - ecx ᮤ¥à¦¨â 㪠§ ⥫ì dword-ç¨á«®
|
||||
* bl = 1 - ecx ᮤ¥à¦¨â 㪠§ ⥫ì dword-ç¨á«®, «¨¡® qword-ç¨á«®
|
||||
* bh = 0 - ®â®¡à ¦ âì ¢ ¤¥áïâ¨ç®© á¨á⥬¥ áç¨á«¥¨ï
|
||||
* bh = 1 - ®â®¡à ¦ âì ¢ è¥áâ ¤æ â¥à¨ç®© á¨á⥬¥
|
||||
* bh = 2 - ®â®¡à ¦ âì ¢ ¤¢®¨ç®© á¨á⥬¥
|
||||
* ¡¨âë 16-21 = ᪮«ìª® æ¨äà ®â®¡à ¦ âì
|
||||
* ¡¨âë 22-30 § १¥à¢¨à®¢ ë ¨ ¤®«¦ë ¡ëâì ãáâ ®¢«¥ë ¢ 0
|
||||
* ¡¨âë 22-29 § १¥à¢¨à®¢ ë ¨ ¤®«¦ë ¡ëâì ãáâ ®¢«¥ë ¢ 0
|
||||
* ¡¨â 30 - ãáâ ®¢«¥ ¢ 1, ¥á«¨ âॡã¥âáï ¢ë¢®¤ qword (64-¡¨â®£®) ç¨á«
|
||||
* ¡¨â 31 - ãáâ ®¢«¥ ¢ 1, ¥á«¨ âॡã¥âáï ¢ë¢®¤ ç¨á« ¡¥§ ¯ãáâëå ã«¥© ¢ áâ àè¨å à §àï¤ å
|
||||
* ecx = ç¨á«® (¯à¨ bl=0) ¨«¨ 㪠§ ⥫ì (¯à¨ bl=1)
|
||||
* edx = [ª®®à¤¨ â ¯® ®á¨ x]*65536 + [ª®®à¤¨ â ¯® ®á¨ y]
|
||||
|
@ -2169,12 +2169,13 @@ Parameters:
|
||||
* eax = 47 - function number
|
||||
* ebx = parameters of conversion number to text:
|
||||
* bl = 0 - ecx contains number
|
||||
* bl = 1 - ecx contains pointer to dword-number
|
||||
* bl = 1 - ecx contains pointer to dword-number, or qword-number
|
||||
* bh = 0 - display in decimal number system
|
||||
* bh = 1 - display in hexadecimal system
|
||||
* bh = 2 - display in binary system
|
||||
* bits 16-21 = how many digits to display
|
||||
* bits 22-30 reserved and must be set to 0
|
||||
* bits 22-29 reserved and must be set to 0
|
||||
* bit 30 - set in 1, if the output of qword (64-bites) number
|
||||
* bit 31 - set in 1, if the output of number without empty zero in high bits is required
|
||||
* ecx = number (if bl=0) or pointer (if bl=1)
|
||||
* edx = [coordinate on axis x]*65536 + [coordinate on axis y]
|
||||
|
@ -1326,35 +1326,38 @@ display_number:
|
||||
; ebx = number or pointer
|
||||
; ecx = x shl 16 + y
|
||||
; edx = color
|
||||
xor edi, edi
|
||||
xor edi, edi
|
||||
display_number_force:
|
||||
push eax
|
||||
and eax,0x7fffffff
|
||||
cmp eax,0xffff ; length > 0 ?
|
||||
pop eax
|
||||
and eax,0x3fffffff
|
||||
cmp eax,0xffff ; length > 0 ?
|
||||
pop eax
|
||||
jge cont_displ
|
||||
ret
|
||||
cont_displ:
|
||||
push eax
|
||||
and eax,0x7fffffff
|
||||
cmp eax,61*0x10000 ; length <= 60 ?
|
||||
pop eax
|
||||
and eax,0x3fffffff
|
||||
cmp eax,61*0x10000 ; length <= 60 ?
|
||||
pop eax
|
||||
jb cont_displ2
|
||||
ret
|
||||
cont_displ2:
|
||||
|
||||
pushad
|
||||
|
||||
cmp al,1 ; ecx is a pointer ?
|
||||
cmp al,1 ; ecx is a pointer ?
|
||||
jne displnl1
|
||||
mov ebp,ebx
|
||||
add ebp,4
|
||||
mov ebp,[ebp+std_application_base_address]
|
||||
mov ebx,[ebx+std_application_base_address]
|
||||
displnl1:
|
||||
sub esp,64
|
||||
|
||||
cmp ah,0 ; DECIMAL
|
||||
cmp ah,0 ; DECIMAL
|
||||
jne no_display_desnum
|
||||
shr eax,16
|
||||
and eax,0x803f
|
||||
and eax,0xC03f
|
||||
; and eax,0x3f
|
||||
push eax
|
||||
and eax,0x3f
|
||||
@ -1365,6 +1368,7 @@ display_number_force:
|
||||
mov ebx,10
|
||||
d_desnum:
|
||||
xor edx,edx
|
||||
call division_64_bits
|
||||
div ebx
|
||||
add dl,48
|
||||
mov [edi],dl
|
||||
@ -1378,10 +1382,10 @@ display_number_force:
|
||||
ret
|
||||
no_display_desnum:
|
||||
|
||||
cmp ah,0x01 ; HEXADECIMAL
|
||||
cmp ah,0x01 ; HEXADECIMAL
|
||||
jne no_display_hexnum
|
||||
shr eax,16
|
||||
and eax,0x803f
|
||||
and eax,0xC03f
|
||||
; and eax,0x3f
|
||||
push eax
|
||||
and eax,0x3f
|
||||
@ -1392,6 +1396,7 @@ display_number_force:
|
||||
mov ebx,16
|
||||
d_hexnum:
|
||||
xor edx,edx
|
||||
call division_64_bits
|
||||
div ebx
|
||||
add edx,hexletters
|
||||
mov dl,[edx]
|
||||
@ -1406,10 +1411,10 @@ display_number_force:
|
||||
ret
|
||||
no_display_hexnum:
|
||||
|
||||
cmp ah,0x02 ; BINARY
|
||||
cmp ah,0x02 ; BINARY
|
||||
jne no_display_binnum
|
||||
shr eax,16
|
||||
and eax,0x803f
|
||||
and eax,0xC03f
|
||||
; and eax,0x3f
|
||||
push eax
|
||||
and eax,0x3f
|
||||
@ -1420,6 +1425,7 @@ display_number_force:
|
||||
mov ebx,2
|
||||
d_binnum:
|
||||
xor edx,edx
|
||||
call division_64_bits
|
||||
div ebx
|
||||
add dl,48
|
||||
mov [edi],dl
|
||||
@ -1453,7 +1459,16 @@ normalize_number:
|
||||
and eax,0x3f
|
||||
ret
|
||||
|
||||
|
||||
division_64_bits:
|
||||
test [esp+1+4],byte 0x40
|
||||
jz .continue
|
||||
push eax
|
||||
mov eax,ebp
|
||||
div ebx
|
||||
mov ebp,eax
|
||||
pop eax
|
||||
.continue:
|
||||
ret
|
||||
|
||||
draw_num_text:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user