Einzelnen Beitrag anzeigen

Talia

Registriert seit: 6. Feb 2010
11 Beiträge
 
#10

AW: asm für meine VeryLongInteger-Unit

  Alt 24. Mär 2011, 08:13
So, ich habe schon wieder umdisponiert, bin wohl etwas flatterhaft:

Delphi-Quellcode:
const
  MaxDigits = 1039; // (2^32)^1040 = 1,89782E10018 => 10.000 dezi Stellen o.K.

type
  TVLInt = packed record
  strict private
    Digits: array[0..MaxDigits] of Cardinal;
    IsNegative: Boolean;
    Length: Integer;
    ...
  public
    class operator Implicit(const a: Cardinal): TVLInt;
    ...


implementation

class operator TVLInt.Implicit(const a: Cardinal): TVLInt;
asm
  // eax <= a
  mov [edx], eax
  mov edx.IsNegative, 0
  xor ecx, ecx
  test eax, eax // ZF if eax = 0
  jz @@IsZero
  add ecx, 1
@@IsZero:
  mov edx.Length, ecx
  // edx = @Result
end;
So läßt es sich leicht rechnen und ich muß mir keine Gedanken um Speicherlecks u. ä. machen. 10.000 dez Ziffern sind für alle meine Anwendungen mhr als genug. Den übertriebenen Speicherverbrauch werde ich wohl verschmerzen.

Gruß Talia
  Mit Zitat antworten Zitat