- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
int nSymb;
char pCh[32];
char tbldec[] = "0123456789000000";
char tblhex[] = "0123456789ABCDEF";
void MyDWtoStr(DWORD dw)
{
__asm
{
mov eax,dw
test eax,eax
jnz short lab1
mov esi,1//esi = nSymb = 1
mov byte ptr [pCh],30h
jmp short lab2
lab1:
mov ebx,eax
mov ecx,eax//eax = ebx = ecx = dw
xor esi,esi//esi = nSymb = 0
lab4:
mov eax,ecx//eax=ecx=b
mov ebx,0Ah//ebx=10
xor edx,edx
div ebx
mov ebx,edx//ebx=a=b%10
mov al,[tbldec+ebx]
mov [pCh+esi],al//pCh[nSymb]=tbldec[a]
inc esi//nSymb++
mov eax,ecx
sub eax,ebx//eax=b-a
mov ecx,0Ah
xor edx,edx
div ecx
mov ecx,eax//ecx=b=(b - a)/10;
test ecx,ecx
jnz short lab4
mov eax,esi
dec eax//eax = i = nSymb-1
jmp short lab5
lab6:
mov edx,esi//edx = nSymb
sub edx,eax//edx = nSymb-i
mov bl,[edx+pCh-1]//bl = pCh[nSymb-i-1];
mov cl,[eax+pCh]
mov [edx+pCh-1],cl//pCh[nSymb-i-1]=pCh[i];
mov [eax+pCh],bl//pCh[i]=pCh[nSymb];
dec eax
lab5:
mov ecx,eax
shl ecx,1//add ecx,ecx
cmp ecx,esi
jge short lab6
lab2:
mov dword ptr [nSymb],esi
mov byte ptr [esi+pCh],0
}
}
DWORD MyStrtoDW(char *pch)
{
DWORD a;
__asm
{
mov edi,pch
xor eax,eax//eax = a
xor esi,esi//esi = i
mov ecx,10
jmp short lab2
lab1:
mul ecx
and ebx,0FFh
sub ebx,48
add eax,ebx
inc esi
lab2:
mov bl,byte ptr [edi+esi]
test bl,bl
jnz short lab1
mov a,eax
}
return a;
}
>Хочу представить вашему вниманию очень быстрые функции для преобразований DWORD <---> char [].