Seite 1 von 1

test()="a" erzeugt ASM-Error

Verfasst: 20.02.2007 21:06
von PureLust
Hallo zusammen,

bei folgendem Code erhalte ich bei aktiviertem InlineASM einen Assembler-Error: "Invalid Operand".

Code: Alles auswählen

NewList TEST.s()
AddElement(Test())
Test() = "a"
Das sich beim o.g. Code wohl irgendwas mit einer bereits definierten ASM_Prozedur beisst ist wohl klar (evtl. mit der Test()-Prozedur aus der Online-Hilfe?).

Aber ist das im Sinne der Erfinders, dass in PB irgendwo bereits eine Prozedur mit dem sehr aussagekräftigen Namen "Test()" vordefiniert ist?

Greetz, PL.

Verfasst: 20.02.2007 21:13
von Kaeru Gaman
ich schätze eher mal, dass TEST ein x86-ASM-command ist....

Verfasst: 20.02.2007 21:13
von DarkDragon
Ist TEST nicht ein ASM Schlüsselwort?

Verfasst: 20.02.2007 21:22
von PureLust
Hello again,

hmmm, ... wenn es ein reserviertes ASM-Commando wäre, dann dürfte ja eigentlich auch nicht das Beispiel aus der Hilfe laufen. :roll:

>>Nachtrag<<

Das Beispiel aus der Hilfe tut es tatsächlich nicht und meldet den gleichen Fehler:

Code: Alles auswählen

Procedure Test(*Pointer, Variable)
    ! MOV dword [p.p_Pointer], 20
    ! MOV dword [p.v_Variable], 30
    Debug *Pointer
    Debug Variable
EndProcedure
  
Test(0, 0)

Verfasst: 20.02.2007 21:28
von ts-soft
Wenn nicht benötigt, InlineASM unbedingt ausschalten. Ansonsten lieber DirectASM nutzen.
Unter anderem bereiten folgende worte Probleme: test, str, xor
und ein paar mehr.

Verfasst: 20.02.2007 21:37
von PureLust
ts-soft hat geschrieben:Unter anderem bereiten folgende worte Probleme: test, str, xor und ein paar mehr.
Aha ... thanks Thomas (bei str und xor ist das ja auch halbwegs verständlich).

@Andrè: Gibt's da irgedwo eine Auflistung drüber welche Wörter durch den InlineASM reserviert sind und wäre das nicht evtl. noch was für die Online-Hilfe (auch weil ja das bereits o.g. Beispiel aus der OH zum InlineASM nicht funktioniert)?

Verfasst: 20.02.2007 21:55
von Kaeru Gaman
> auch weil ja das bereits o.g. Beispiel aus der OH zum InlineASM nicht funktioniert

doch, tut es.

das beispiel ist für extra-commandos, die mit ! eingeleitet werden.
bei aktiviertem inline-asm braucht man das ! nicht.
außerdem müssten die argumente dann anders aussehen.

Verfasst: 20.02.2007 22:04
von ts-soft
Das beigefügte Beispiel nutzt InlineASM. Enthält aber auch keine Procedure test :wink:
Der Hilfetext zu InlineASM Procedure.l MyTest() ist InlineASM und funktioniert.
Der zweite Hilfetext bezieht sich auf DirektASM und ist als solcher auch korrekt.

Die ASM-Schlüsselwörter sollte jeder ASM Progger kennen, sonst nützt ihm
InlineASM nämlich nicht viel, ein Abdruck in der Hilfe also IMHO nicht nötig.