Einzelnen Beitrag anzeigen

LucasL

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

Re: Elemente in Mengen mit ASM zählen

  Alt 17. Nov 2006, 15:22
Mit SizeOf klappts. Habs jetzt mal wie folgt gemacht und es scheint zu funktionieren, egal wieviel Platz die Menge benötigt (1 - 32 Byte).

Delphi-Quellcode:
function MySizeOf(var Menge: TMySet): Byte;
  function CountBits(C: Byte; P: Pointer): Byte;
  asm
    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
        JNC @nocarry
        ADD EAX, 1 // CF gesetzt? Dann EAX inkrementieren
        @nocarry:
        DEC CH
        JNZ @loop2
      ADD EDX, 1 // nächstes Bit adressieren
      DEC CL
      JNZ @loop1
  end;
begin
  MySizeOf := CountBits(SizeOf(Menge), @Menge);
end;
Gruß,
Lucas
  Mit Zitat antworten Zitat