AGB  ·  Datenschutz  ·  Impressum  







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

[asm] Variablenwerte vergleichen

Ein Thema von Flips · begonnen am 29. Mär 2006 · letzter Beitrag vom 29. Mär 2006
Antwort Antwort
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#1

[asm] Variablenwerte vergleichen

  Alt 29. Mär 2006, 08:43
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).

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

Danke im Vorraus!!!
Philipp F.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: [asm] Variablenwerte vergleichen

  Alt 29. Mär 2006, 10:46
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)
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#3

Re: [asm] Variablenwerte vergleichen

  Alt 29. Mär 2006, 13:10
Danke für den Tipp, werde mich gleich an die Arbeit machen !!!
Philipp F.
  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 06:57 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