BruNews
Messages postés
21040
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
8 janv. 2007 à 12:53
Allez juste pour le fun, exe final de 2 Ko !!!
#include <windows.h>
#pragma comment(lib, "msvcrt.lib")
// je rassure, aucune dependance sur msvcrt.dll
// juste pour que compilo ne crie pas en voyant du 'double'.
__declspec(naked) char* __fastcall bnqwordtox(unsigned __int64 inum, char *szdst)
{ // [esp+4] = LOinum, [esp+8] = HIinum, ECX = szdst
__asm {
mov eax, [esp+4]
add ecx, 16
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L1
add dl, 7
L1:
cmp al, 57
jbe short L2
add al, 7
L2:
mov byte ptr[ecx-1], dl
mov byte ptr[ecx-2], al
mov byte ptr[ecx], 0
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L3
add dl, 7
L3:
cmp al, 57
jbe short L4
add al, 7
L4:
mov byte ptr[ecx-3], dl
mov byte ptr[ecx-4], al
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L5
add dl, 7
L5:
cmp al, 57
jbe short L6
add al, 7
L6:
mov byte ptr[ecx-5], dl
mov byte ptr[ecx-6], al
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L7
add dl, 7
L7:
cmp al, 57
jbe short L8
add al, 7
L8:
mov byte ptr[ecx-7], dl
mov byte ptr[ecx-8], al
mov eax, [esp+8]
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L9
add dl, 7
L9:
cmp al, 57
jbe short L10
add al, 7
L10:
mov byte ptr[ecx-9], dl
mov byte ptr[ecx-10], al
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L11
add dl, 7
L11:
cmp al, 57
jbe short L12
add al, 7
L12:
mov byte ptr[ecx-11], dl
mov byte ptr[ecx-12], al
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L13
add dl, 7
L13:
cmp al, 57
jbe short L14
add al, 7
L14:
mov byte ptr[ecx-13], dl
mov byte ptr[ecx-14], al
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L15
add dl, 7
L15:
cmp al, 57
jbe short L16
add al, 7
L16:
mov byte ptr[ecx-15], dl
mov byte ptr[ecx-16], al
shr eax, 8
mov dl, al
shr al, 4
and dl, 15
add al, 48
add dl, 48
cmp dl, 57
jbe short L17
add dl, 7
L17:
cmp al, 57
jbe short L18
add al, 7
L18:
mov byte ptr[ecx-17], al
mov byte ptr[ecx-18], dl
mov eax, ecx
ret 8
}
}
void __stdcall bnTestDblToHex()
{
double d = 1.5;
char buf[32];
bnqwordtox(*((unsigned __int64 *) &d), buf);
MessageBox(0, buf, "hex", 0);
}
#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) void __stdcall myWinMain()
{
__asm {
call bnTestDblToHex
push 0
call dword ptr ExitProcess
}
}
ciao...
BruNews, MVP VC++