Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
3-68235
Alexey Nepryahin
2003-07-23 19:00
2003.08.21
MS Jet 4.0


6-68437
tytus
2003-06-17 09:48
2003.08.21
Сетевая карта


14-68545
AHTOH
2003-08-04 22:22
2003.08.21
Почему hook и делают в основном в dll?


14-68550
edik
2003-08-02 16:38
2003.08.21
Где взять документацию


14-68507
HolACost_
2003-08-05 16:35
2003.08.21
UU, XX, Base64





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский