AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parität [ASM]

Ein Thema von neolithos · begonnen am 27. Feb 2004 · letzter Beitrag vom 21. Sep 2004
Antwort Antwort
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#1

Parität [ASM]

  Alt 27. Feb 2004, 09:04
Delphi-Quellcode:
function CalcEvenParity(dwData : Cardinal) : Integer;
// Gibt das Bit zurück um, welches eine Zahl ergänzt werden muss um auf die gerade Parität
// zu kommen
asm
  test eax, eax
  jpo @@1
  mov eax, 0 // even Parität also muss eine 0 ergänzt werden
  ret
@@1:
  mov eax, 1 // odd Parität also muss eine 1 ergänzt werden
end;
Delphi-Quellcode:
function CalcOddParity(dwData : Cardinal) : Integer;
// Gibt das Bit zurück um, welches eine Zahl ergänzt werden muss um auf die ungerade Parität
// zu kommen
asm
  test eax, eax
  jpe @@1
  mov eax, 0 // even Parität also muss eine 0 ergänzt werden
  ret
@@1:
  mov eax, 1 // odd Parität also muss eine 1 ergänzt werden
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Parität [ASM]

  Alt 27. Feb 2004, 09:05
Für alle Delphi 8 User:

Delphi-Quellcode:
function CalcEvenParity(dwData : Cardinal) : Integer;
// Gibt das Bit zurück um, welches eine Zahl ergänzt werden muss um auf die gerade Parität
// zu kommen
var dwParity : Cardinal;
    i : Integer;
begin
  dwParity := 0;
  for i := 0 to 31 do
      begin
        dwParity := dwParity xor (dwData and 1);
        bData := bData shr 1;
      end;
  Result := dwParity;
end;
Delphi-Quellcode:
function CalcOddParity(dwData : Cardinal) : Integer;
// Gibt das Bit zurück um, welches eine Zahl ergänzt werden muss um auf die ungerade Parität
// zu kommen
var dwParity : Cardinal;
    i : Integer;
begin
  dwParity := 0;
  for i := 0 to 31 do
      begin
        dwParity := dwParity xor (dwData and 1);
        bData := bData shr 1;
      end;
  Result := not dwParity and 1;
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: Parität [ASM]

  Alt 27. Feb 2004, 09:29
Delphi-Quellcode:
function CheckXOr(var buf; iSize : Integer) : Integer;
// Errechnet die gerade Parität von 8 Bit-Blöcken
asm
  mov ecx, edx // Size in Counter
  xor edx, edx // edx = 0
  test ecx, ecx
  jz @@2 // Size = 0 -> Exit

@@1:
  xor dl, [eax + ecx - 1]
  loop @@1

@@2:
  mov eax, edx
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Parität [ASM]

  Alt 21. Sep 2004, 17:34
Zitat von neolithos:
Diese ist fuer das 32Bit Delphi. Und gibt zurueck, dass es sich um gerade Paritaet handelt.
Delphi-Quellcode:
function Parity(Value: Cardinal): Boolean;
asm
   TEST EAX, EAX
   SETP AL
end;
Das gleiche bloss fuer viele Pascal/Delphi Compiler
Delphi-Quellcode:
function Parity(Value: Cardinal): Boolean;
begin
  Value := (Value shr 16) xor (Value and $FFFF);
  Value := (Value shr 8) xor (Value and $00FF);
  Value := (Value shr 4) xor (Value and $000F);
  Value := (Value shr 2) xor (Value and $0003);
  Value := (Value shr 1) xor (Value and $0001);
  Result := Value <> 0;
end;
MfG Florian
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz