MASM hat Probleme mit LOCALen Variablen

Offizieller deutscher Support für das MASM32 SDK. Download FAQ

Moderatoren: crack, Krüsty, Marwin

MASM hat Probleme mit LOCALen Variablen

Beitragvon Dinkelchen » Samstag 3. März 2007, 01:35

Hi Leude

Also ich min zur Zeit dabei ne GUI für mein Schachprogramm zu entwickeln mit Masm32 unter Windows XP. Ich bin der Meinung,
dass das Thema hier her gehört, da es sich um ein "MASM-Problem"
handelt, welches ich in meinen folgenden Erläuterungen zu beweisen
versuche, es sei denn es überzeugt mich jemand vom Gegenteil.

Jedenfalls ist mir gestern ein Riesenprblem mit LOKALEN VARIABLEN in oder unter meiner WndProc
aufgefallen:
Ich habe in eine lokale 32Bit-Variable einen Wert 00000000h gemovt,
in der Bearbeitungsschleife für die Windows-Nachricht WM_MOUSEMOVE.
In der Bearbeitungsschleife für die Windows-Nachricht WM_PAINT habe ich diese lokale Variable als ein Koordinaten-Parameter für ne BitBlt-API Fnktion verwendet.

Der ganze Code ließ sich dann auch ohne Rumgequese von MASM als
*.EXE compilieren, jedoch wurde das Bild was mit BitBlt erzeugt werden sollte garnicht erst angezeigt.

Also folgte meine Behandlung mit Nebenwirkungen:
Ich habe nichts weiter gemacht, als diese eine Variable aus der WindProc entfernt, das LOCAL davor natürlich auch und als globale Variable in .data? eingetragen.
Und siehe da,das Bild wurde ab Koordinate 00 angezeigt.
HEUREKA!! Oder nicht?: Jetzt frage ich mich natürlich woran das liegt? Jedenfalls bedeutet das, dass ich mit lokalen Variablen in einer Prozedur nichts anfangen kann, was eine gewisse Objektorientiertheit in MASM erheblich erschwert.

Achso. Übrigens kann man Sprunglabels in Prozeduren auch nicht LOCAL(isieren). Und anders herum kann man Variablen in Macros nicht als LOCAL deklarieren. In dieser Hinsicht ist MASM auch nicht unbedingt
intuitiv oder sogar logisch aufgebaut, oder?Das sei aber nur nebensächlich.

Gruß Dinkelchen
Um so mehr Ich weiß, um so mehr Fragen
fange ich an zu stellen.
Dinkelchen
Newbie
 
Beiträge: 3
Registriert: Samstag 3. März 2007, 01:00
Wohnort: wird es in 60 Jahren nicht mehr geben

Beitragvon CDW » Montag 5. März 2007, 01:05

WndProc läugt nicht "ewig". Es wird letzendlich bei einem Ereignis von Windows aufgerufen. Die Prozedur kehrt nach der Abarbeitung wieder "ins System" zurück. D.h dass der Stackspeicher wieder freigegeben wird und dieser Speicher dann von Windowsroutinen überschrieben werden kann - somit ändert sich auch der Wert der Variablen. Das wäre auch in C nicht anders - lokale Variablen sind nur innerhalb der Prozedur gültig und behalten ihre Werte nicht darüber hinaus ;)
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon Dinkelchen » Montag 5. März 2007, 20:12

Ja, danke für die Antwort! Mittlerweile bin ich aber auch schon drauf gestoßen.

Wäre aber trotzdem nicht schlecht, wenn Masm sowas wie "Virtual"-LOCAL kapieren würde.
Ich meine damit,dass er theoretisch gesehen Variablen in Prozeduren
oder sogar Macros trotzdem als Globalen ansieht, sie aber von anderen
Macros und Proc's mit gleichen Namen differenziert. So kann eine bessere
Objektorientierung gewährleistet werden!
Warum kann man eigentlich keine Sprunglabes in Proc's als LOCAL deklarieren?
Um so mehr Ich weiß, um so mehr Fragen
fange ich an zu stellen.
Dinkelchen
Newbie
 
Beiträge: 3
Registriert: Samstag 3. März 2007, 01:00
Wohnort: wird es in 60 Jahren nicht mehr geben

Beitragvon CDW » Montag 5. März 2007, 22:07

Warum kann man eigentlich keine Sprunglabes in Proc's als LOCAL deklarieren?

Code: Alles auswählen
hallo: <- lokal
hallo:: <- global

die mit einem ":" sind nur innerhalbt der Proc sichtbar, mit zwei ":" dagegen global.
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon Nordwind64 » Montag 30. April 2007, 14:10

Du kannst Daten direkt zwischen deinen Code packen, diese Daten werden global behandelt und intern packt MASM32 sie in das Datensegment:

...hier dein code...

jmp weiter

varaible dd 0

weiter:

...hier weiter im code...
Nordwind64
Newbie
 
Beiträge: 5
Registriert: Freitag 28. Oktober 2005, 17:28


Zurück zu MASM32-Package

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag
  • Probleme mit MASM-Package
    von Gast » Dienstag 12. Oktober 2004, 15:50
    10 Antworten
    1575 Zugriffe
    Letzter Beitrag von meah Neuester Beitrag
    Donnerstag 3. März 2005, 15:39
  • Probleme beim Linken
    von Gast » Dienstag 29. Juni 2004, 18:28
    5 Antworten
    1003 Zugriffe
    Letzter Beitrag von Marwin Neuester Beitrag
    Samstag 10. Juli 2004, 14:18
  • Probleme beim Linken
    von Marwin » Montag 11. Juli 2005, 20:21
    13 Antworten
    7837 Zugriffe
    Letzter Beitrag von TheShadowdx Neuester Beitrag
    Freitag 30. November 2007, 17:34
  • masm und gcc
    von Gast » Dienstag 2. März 2004, 22:23
    1 Antworten
    944 Zugriffe
    Letzter Beitrag von Marwin Neuester Beitrag
    Mittwoch 3. März 2004, 14:10
  • Handbuch zu MASM?
    von Gast » Samstag 17. Mai 2003, 23:20
    6 Antworten
    1675 Zugriffe
    Letzter Beitrag von CDW Neuester Beitrag
    Freitag 24. Oktober 2003, 18:18

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron