Консультация № 16918
12.02.2005, 01:12
0.00 руб.
0 2 2
Можно ли оптимизировать по времени выполнения данный код ( смесь С++ с АСМом ): (ах, да, чуть не забыл, buff - указатель char* в нем есть текст)
long total = 0;
_asm
{
xor eax,eax;
xor ecx,ecx;
mov esi,buff;
cikl:
mov cl,byte ptr [esi];
test cl,cl;
jz endstr;
cmp cl,‘0‘;
jge ok;
opt:
inc esi;
jmp cikl;
ok:
cmp cl,‘9‘;
jle okey;
jmp opt;
okey:
sub cl,‘0‘;
imul eax,0xA;
add eax,ecx;
jmp opt;
endstr:
mov esi,buff;
mov cl, byte ptr [esi];
cmp cl,‘-‘;
jne kon;
neg eax;
kon:
mov total,eax;
}

Обсуждение

Неизвестный
12.02.2005, 17:24
общий
это ответ
Здравствуйте, Lyrik!
Ну можно:
mov esi, buff -> push buff
pop esi
и обратно см. Документацию (www.realcoding.net)
Неизвестный
13.02.2005, 21:28
общий
это ответ
Здравствуйте, Lyrik!
попробуй для начала так


Приложение:
mov esi, [buf] xor eax, eax mov edx, esi xor ecx, ecx m1: mov cl, [esi] inc esi sub cl, ‘0‘ cmp byte ptr [esi - 1], 0 jz m2 cmp cl, 9 ja m1 lea eax, [eax*4 + eax] shl eax, 1 add eax, ecx jmp m1 m2: cmp byte ptr [edx], ‘-‘ jne m3 neg eax m3: mov [total], eax
Форма ответа