Einzelnen Beitrag anzeigen

LucasL

Registriert seit: 20. Dez 2005
19 Beiträge
 
#17

Re: Elemente in Mengen mit ASM zählen

  Alt 17. Nov 2006, 22:03
Thx, und man sollte die Register, welche nicht sowieso von der Funktion als Parameter belegt werden, vorher noch mit Push bzw. am Ende mit Pop retten... So:

Delphi-Quellcode:
function Length(Menge: TMySet): Byte; overload;
    function CountBits(C: Byte; P: Pointer): Byte;
    asm
     PUSH EBX
     PUSH ECX
     MOV CL, AL // Byteanzahl nach CL
      MOV EAX, 0 // Bitzähler EAX initialisieren
      @loop1:
        MOV EBX, [EDX] // Bits nach EBX laden
        MOV CH, 8 // Bitanzahl nach CH
        @loop2:
          ROR EBX, 1 // Niedrigstes Bit von EBX nach CF schieben
          ADC EAX, 0 // CF zu EAX addieren
          DEC CH
          JNZ @loop2
        ADD EDX, 1 // nächstes Bit adressieren
        DEC CL
        JNZ @loop1
      POP ECX
      POP EBX
    end;
  begin
    Result := CountBits(SizeOf(Menge), @Menge);
  end;
  Mit Zitat antworten Zitat