Перевести ASM в стиле Delphi на английский?

В недавнем проекте Delphi, который достался мне в наследство, есть процедура в ASM. Я полный новичок в ASM, поэтому не понимаю ее. Я прочитал различные инструкции по ASM, чтобы попытаться расшифровать поток процедур, но я все еще не понимаю.

Не мог бы кто-нибудь с опытом работы с ASM помочь мне понять и перевести следующую процедуру на английский язык (потом я смогу перевести обратно в Delphi, чтобы код было легче читать в будущем!!!)

Объявление Mem1 - это массив [0..15] байтов;. Mem2 - это LongInt.

Вот процедура:

 procedure TForm1.XorMem(var Mem1; const Mem2; Count : Cardinal); register;
 begin
 asm
   push esi
   push edi

   mov  esi, eax         //esi = Mem1
   mov  edi, edx         //edi = Mem2

   push ecx              //save byte count
   shr  ecx, 2           //convert to dwords
   jz   @Continue

   cld
 @Loop1:                 //xor dwords at a time
   mov  eax, [edi]
   xor  [esi], eax
   add  esi, 4
   add  edi, 4
   dec  ecx
   jnz  @Loop1

 @Continue:              //handle remaining bytes (3 or less)
   pop  ecx
   and  ecx, 3
   jz   @Done

 @Loop2:                 //xor remaining bytes
   mov  al, [edi]
   xor  [esi], al
   inc  esi
   inc  edi
   dec  ecx
   jnz  @Loop2

 @Done:
   pop  edi
   pop  esi
 end;

 end;

edit: Thanks to Roman R i've converted the ASM back to Delphi

procedure TForm1.XorMem2(var Mem1; const Mem2 :LongInt; Count : Cardinal);
var
  Key : array [0..3] of byte absolute Mem1;
  Num : array [0..3] of byte absolute Mem2;
  idx : byte;
begin
  for Idx := 0 to Count -1 do Key[idx] := Key[idx] Xor Num[idx];
end;
5
задан PhiS 17 May 2012 в 12:14
поделиться