Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [asm] Variablenwerte vergleichen (https://www.delphipraxis.net/66398-%5Basm%5D-variablenwerte-vergleichen.html)

Flips 29. Mär 2006 08:43


[asm] Variablenwerte vergleichen
 
Hi @.
Habe ein Problem mit Assembler.
Über den Befehl [i]cmp v1,v2[i] lassen sich ja 2 Variablen vergleichen. Allerdings gibt folgender Code gibt auch richtiger Weise bei dem Befehl je aus, dass die Variablen gleich sind:
Delphi-Quellcode:
asm
  push ebx
  push edx
  mov ebx,Image1[0] ;Pixelarray, eigentlich ein ganz normales Integerarray, undynamisch
  mov edx,Image1[0]
  cmp ebx,edx
  je @gleich      ;Springt zur Stelle "gleich"
  pop edx
  pop ebx
Bei folgendem Code allerdings sagt Assembler das sie nicht gleich sind, obwohl sie die gleichen Werte enthalten (Es gilt: Image1[0] = Image2[0]):

Delphi-Quellcode:
asm
  push ebx
  push edx
  mov ebx,Image1[0] ;Pixelarray
  mov edx,Image2[0]
  cmp ebx,edx
  je @gleich      ;Springt zur Stelle "gleich"
  pop edx
  pop ebx
end;
Klar, die Variablen ansich sind nicht gleich, aber deren Inhalt...Wieso sind sie denoch nicht gleich?
Kenne mich in Asm nicht gut aus, vll liegt es ja an den gewählten Speicherplätzen (ebx,edx).

:arrow: Also wie kann ich in Assembler nicht die Variablen, sondern deren Werte vergleichen? :?:

Danke im Vorraus!!! :wink:

brechi 29. Mär 2006 10:46

Re: [asm] Variablenwerte vergleichen
 
Ich hatte dir bei der gleichen Sache schonmal geholfen.

Du vergleichst hier POINTER die sind eben nicht gleich. Sie zeigen nur auf ein array.
Du musst jedes Element in diesem array vergleichen, wie du es auch mit einem normalen array machen würdest.

Code:
asm
  pushad
  mov ebx, Image1[0] //Pixelarray
  mov edx, Image2[0]
  mov ecx, DWORD PTR [count] //wobei count = image1.width*image1.height*bytesperpixel (24bit = 3)

  jmp @@inschleife
@@weiter:
  mov ax, [ebx]
  cmp ax, byte ptr [edx] //erstes byte ist gleich
  jne @@nichtgleich
  dec ecx
  inc ebx
  inc edx
@@inschleife:
  test ecx, ecx
  jnz @@weiter
@@gleich:
  xor eax, eax
  inc eax
  popad
  ret
@@nichtlgleich:
  xor eax, eax
  popad
  ret
end;

wobei das noch langsamer ist als compremem wie ich dir das vorgeschlagen hatte
schau dir einfach mal comparemem an (assembler repeat cmp)

Flips 29. Mär 2006 13:10

Re: [asm] Variablenwerte vergleichen
 
Danke für den Tipp, werde mich gleich an die Arbeit machen !!! :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 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