![]() |
[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:
Bei folgendem Code allerdings sagt Assembler das sie nicht gleich sind, obwohl sie die gleichen Werte enthalten (Es gilt: Image1[0] = Image2[0]):
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
Delphi-Quellcode:
Klar, die Variablen ansich sind nicht gleich, aber deren Inhalt...Wieso sind sie denoch nicht gleich?
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; 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: |
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) |
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 01:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz