Форум: "Основная";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
ВнизAsm- не получается первести процедуру с Delphi, поможете? Найти похожие ветки
← →
Chlavik (2003-08-08 01:20) [0]Здрасте... У меня такая процедура есть мне нада перевести на асм я пробую не выходит... asm только вот стал изучать...Тут удар на скорость...
{$OVERFLOWCHECKS OFF}
procedure SwaBits(Parm:Pdword; Where: byte;Add:Pdword); ( (Parm^ shl Where)Здрасте... У меня такая процедура есть мне нада перевести на асм я пробую не выходит... asm только вот стал изучать...Тут удар на скорость...
{$OVERFLOWCHECKS OFF}
procedure SwaBits(Parm:Pdword; Where: byte;Add:Pdword);
begin
Parm^:=((Parm^ shl Where) or (Parm^ shr ($20 - Where)))+Add^;
end;
end;
перевёл так
procedure SwaBits(Parm:Pdword; Where: byte;Add:Pdword);
begin
asm
push ecx
mov cl,dl
push ebx
mov ebx,[eax]
shl [eax],cl
mov cl, $20
sub cl,dl
shr ebx,cl
pop ecx
or [eax],ebx
mov ebx,[ecx]
add [eax],ebx
pop ebx
end;
end;
Но что то оно не правильно подщитывает Parm Где сдесь ошибка? Как правильно и лаконичней...
← →
Chlavik (2003-08-08 01:28) [1]Всем пасиба я сам нашол
push ebx
mov ebx,[eax]
push ecx
mov cl,dl
shl [eax],cl
mov cl, $20
sub cl,dl
shr ebx,cl
pop ecx
or [eax],ebx
pop ebx
add [eax],ecx
я в другом порядке регистры ввостанавливал...
← →
Chlavik (2003-08-08 02:32) [2]
inc(p1,((not p2 and p4) or (p2 and p3) +k[$0] - $28955b88)); SwaBits(@p1,$07,p2);
inc(p4,((not p1 and p3) or (p1 and p2) +k[$1] - $173848AA)); SwaBits(@p4,$0C,p1);
inc(p3,((not p4 and p2) or (p4 and p1) +k[$2] + $242070DB)); SwaBits(@p3,$11,p4);
inc(p2,((not p3 and p1) or (p3 and p4) +k[$3] - $3E423112)); SwaBits(@p2,$16,p3);
inc(p1,((not p2 and p4) or (p2 and p3) +k[$4] - $0A83F051)); SwaBits(@p1,$07,p2);
inc(p4,((not p1 and p3) or (p1 and p2) +k[$5] + $4787C62A)); SwaBits(@p4,$0C,p1);
inc(p3,((not p4 and p2) or (p4 and p1) +k[$6] - $57CFB9ED)); SwaBits(@p3,$11,p4);
inc(p2,((not p3 and p1) or (p3 and p4) +k[$7] - $02B96AFF)); SwaBits(@p2,$16,p3);
inc(p1,((not p2 and p4) or (p2 and p3) +k[$8] + $698098D8)); SwaBits(@p1,$07,p2);
inc(p4,((not p1 and p3) or (p1 and p2) +k[$9] - $74BB0851)); SwaBits(@p4,$0C,p1);
inc(p3,((not p4 and p2) or (p4 and p1) +k[$A] - $0000A44F)); SwaBits(@p3,$11,p4);
inc(p2,((not p3 and p1) or (p3 and p4) +k[$B] - $76A32842)); SwaBits(@p2,$16,p3);
inc(p1,((not p2 and p4) or (p2 and p3) +k[$C] + $6B901122)); SwaBits(@p1,$07,p2);
inc(p4,((not p1 and p3) or (p1 and p2) +k[$D] - $02678E6D)); SwaBits(@p4,$0C,p1);
inc(p3,((not p4 and p2) or (p4 and p1) +k[$E] - $5986BC72)); SwaBits(@p3,$11,p4);
inc(p2,((not p3 and p1) or (p3 and p4) +k[$F] + $49B40821)); SwaBits(@p2,$16,p3);
← →
icWasya (2003-08-08 09:54) [3]или покороче
procedure SwaBits ( Parm :Pdword; // EAX
Where : byte; // DL
Add :Pdword); // ECX
asm
MOV EDI,[ECX] ; // EDI:=Add
XOR ECX,ECX;
MOV CL,DL; // ECX:=Where
MOV EBX,[EAX]; // EBX:=Parm;
// собственно из за этой команды и надо переходить на ASM
ROL EBX,CL; ( Parm^ shl Where)или покороче
procedure SwaBits ( Parm :Pdword; // EAX
Where : byte; // DL
Add :Pdword); // ECX
asm
MOV EDI,[ECX] ; // EDI:=Add
XOR ECX,ECX;
MOV CL,DL; // ECX:=Where
MOV EBX,[EAX]; // EBX:=Parm;
// собственно из за этой команды и надо переходить на ASM
ROL EBX,CL; // (Parm^ shl Where) or (Parm^ shr ($20 - Where)
ADD EBX,EDI; // сумма
MOV [EAX],EBX // Parm^:=
end;
← →
Chlavik (2003-08-08 18:51) [4]Вот так вообще круто получилось
function SwaBits(Parm:dword; Add:dword; Where: byte):dword;
asm
rol eax,cl
add eax,edx
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c