Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.21;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
14-68483
LOX
2003-07-21 08:29
2003.08.21
Кулера


14-68452
GreySerg
2003-08-06 13:06
2003.08.21
Как сделать , чтобы не создавались файлы с расширением ddp ?


1-68390
Silver_
2003-08-05 13:07
2003.08.21
Как


3-68200
ViJen
2003-07-28 13:07
2003.08.21
Fast Reports


1-68339
syte_ser78
2003-08-07 12:52
2003.08.21
обращение к AutoCad