Probleme mit ASM

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Arrag0n
Beiträge: 32
Registriert: 24.06.2005 20:49
Wohnort: Austria
Kontaktdaten:

Probleme mit ASM

Beitrag von Arrag0n »

Hallo

Habe hier eine Funktion die ich irgendwo mal im Board gefunden habe die es ermöglicht eine gesammte strucktur zu übergeben. Unter PB 3.94 hat sie perfekt funktioniert. Habe den Source auf Version 4 Adaptiert, jedoch bekomme ich immer eine ASM Fehlermeldung das ein undefiniertes Symbol sei?? :o
Das verstehe ich nicht. Ist es möglich das die Struckturen nicht mehr global sind?
Wenn ich den code der in DisplayAndHandle() ist lokal lasse funzt es perfekt!

Code: Alles auswählen

Structure wettkampf 
  Spielort.s 
  datum.s 
  gegner.s 
  Ergebnis.s 
  Spieler_1.s 
  Spieler_2.s 
  Spieler_3.s 
  Spieler_4.s 
  Spieler_5.s 
  Spieler_6.s 
  Spieler_7.s 
  Spieler_8.s 
  Spieler_9.s 
  Spieler_10.s 
  Spieler_11.s 
  Spieler_Ersatz1.s 
  Spieler_Ersatz2.s 
  Schiedsrichter.s 
EndStructure 

Global match.wettkampf 
Global Dim  jahresergebnisse.wettkampf(50) 
Global Dim statistik.wettkampf(1000) 

Procedure CopyStructure(source,dest,Size,StructureMap) 
  Protected i, StructureMapOffset 
  StructureMapOffset = 0 
  For i = 0 To Size-1 
    If PeekL(StructureMap+StructureMapOffset) = i 
      MOV Ecx, i 
      MOV Edx, Ecx 
      ADD Ecx, dest 
      ADD Edx, source 
      MOV Edx, dword[Edx] 
      CALL SYS_FastAllocateStringFree 
      
      StructureMapOffset+4 
      i+3 
    Else 
      PokeB(dest+i,PeekB(source+i)) 
    EndIf 
  Next 
EndProcedure 

Procedure DisplayAndHandle()
  Debug Str(@match\Spielort)+" :"+match\Spielort 
  Debug Str(@jahresergebnisse(8)\Spielort)+" :"+jahresergebnisse(8)\Spielort 
  Debug "Copy..." 
  
  CopySrc = @match 
  CopyDest = @jahresergebnisse(8) 
  CopySize = SizeOf(wettkampf) 
  CopyStructureMap = 0 
  !MOV dword[p.v_CopyStructureMap], p.s_wettkampf ;s_<Structure> 
  CopyStructure(CopySrc,CopyDest,CopySize,CopyStructureMap) 
  
  
  Debug Str(@match\Spielort)+" :"+match\Spielort 
  Debug Str(@jahresergebnisse(8)\Spielort)+" :"+jahresergebnisse(8)\Spielort 
  
EndProcedure


match\Spielort = "Wiesbaden" 
match\datum = "24.7.2004" 
match\gegner = "GSV" 
match\Ergebnis = "2:4" 
match\Spieler_1 = "Huber" 
match\Spieler_2 = "Müller" 
match\Spieler_3 = "Eszgön" 
match\Spieler_4 = "Krallmann" 
match\Spieler_5 = "König" 
match\Spieler_6 = "Lindauer1" 
match\Spieler_7 = "Lindauer2" 
match\Spieler_8 = "Schwieken" 
match\Spieler_9 = "Rülberg" 
match\Spieler_10 = "Steenken" 
match\Spieler_11 = "Schwelm" 
match\Spieler_Ersatz1 = "Zeppelin" 
match\Spieler_Ersatz2 = "Barth" 
match\Schiedsrichter = "von Weilen" 

DisplayAndHandle()
Arrag0n
Zuletzt geändert von Arrag0n am 09.04.2006 12:33, insgesamt 1-mal geändert.
Aus den Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Variablen in einer Procedure beginnen jetzt mit "p." (dword[p.v_CopyStructureMap])
Benutzeravatar
Arrag0n
Beiträge: 32
Registriert: 24.06.2005 20:49
Wohnort: Austria
Kontaktdaten:

Beitrag von Arrag0n »

Ja, Danke.

Ändert aber an der Situation nix. :?

Arrag0n
Aus den Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

wettkampf ist keine Variable!
Also

Code: Alles auswählen

!MOV dword[p.v_CopyStructureMap], s_wettkampf
Benutzeravatar
Arrag0n
Beiträge: 32
Registriert: 24.06.2005 20:49
Wohnort: Austria
Kontaktdaten:

Beitrag von Arrag0n »

@ hallodri
Sorry, habs erst jetzt verstanden.

@HeX0R
Vielen Dank! Das wars.
Bin in Sachen ASM leider noch nicht so bewandert!

Arrag0n
Aus den Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Kann man strukturen nicht einfach mit copymemory()
copieren????
Benutzeravatar
Arrag0n
Beiträge: 32
Registriert: 24.06.2005 20:49
Wohnort: Austria
Kontaktdaten:

Beitrag von Arrag0n »

@Konne
Soweit ich das verstanden habe würde man bei strings nur den Verweis auf den Speicherbereich kopieren wo er liegt, und nicht den String.
Wenn man allerdings nur bytes, words, longs hat sollte es funzen.

Grüße Arrag0n
Aus den Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen.
Gesperrt