PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler-Labels unter C++


Lord_Otter
28.07.2002, 18:55
Hi Leute,
ich schreibe in letzter Zeit viele Assembler-Routinen in C++.
Allerdings muss ich die Labels immer auserhalb des asm-Blocks deklarieren.
Beispiel:

int visible=0;
int fehler=0;
...
void show()
{
asm {
mov ax,visible
cmp ax,0
jne ende // Nur anzeigen, wenn noch nicht sichtbar ist
/* Anzeigen */
...
mov ax,1
mov visible,ax
xor ax,ax
mov fehler,ax
}
ende:
asm {
mov ax,1
mov fehler,x
}
}


Geht das nicht besser ?
Wenn ich die Labels direkt in den Assemblerblock schreibe, denkt C++, das das Label nicht deklariert ist.:mauer: :mauer:
In einer anderen Sprache, Pascal, musste man einfach ein @ vorranstellen, hat aber in C++ auch nicht gefunzt.
Weiß jemand, wie das geht ?


Felix Kaiser
28.07.2002, 18:59
Versuch mal in dem du die Variablenbezeichnung mit einem @ anfangen lässt, also @Exit: In Pascal gings nur so, z.B. ...

Lord_Otter
29.07.2002, 15:05
Du meinst so ?

int visible=0;
int fehler=0;
...
void show()
{
asm {
mov ax,visible
cmp ax,0
jne @Exit // Nur anzeigen, wenn noch nicht sichtbar ist
/* Anzeigen */
...
mov ax,1
mov visible,ax
xor ax,ax
mov fehler,ax
@Exit: // Das wäre gut, so wie in Pascal
mov ax,1
mov fehler,x
}
}


Das geht leider auch nicht.:confused: :confused:

Felix Kaiser
29.07.2002, 16:39
Ich hab jetzt nochmal nachgeschaut und ein vernünftiger C Compiler sollte normale Assemblerlabels unterstützen, da dies auch die Regel ist. Ich habs mit dem Borland C++ Compiler 5.5 getestet, hat er auch gefressen. Welchen Compiler benutzt du?

Lord_Otter
29.07.2002, 19:13
Ich benutze C++ 3.0.
Ich kann's ja mal mit 5.5 probieren, die habe ich auch, aber momenttan nur auf dem Rechner von meinem Vater, da geh' ich nicht oft ran.
Kann man eigentlich in C++ auch OBJ-Dateien einbinden, so wie in Turbo Pascal ? Ich hätte noch so viele...

Felix Kaiser
29.07.2002, 22:22
Klar, kein Thema. Muss nur von der Architektur und vom Betriebsmodus her passen. Du kannst keinen Realmode Code in Windows verwenden oder 16-Bit Win Code inne 32-Bit Anwendung linken. Ist zwar gefitze, aber technisch kein Problem!

Lord_Otter
30.07.2002, 06:43
Ja, und mit welchem Befehl geht das dann ?

Felix Kaiser
30.07.2002, 13:44
Hab ich noch nicht probiert :) Du kannst den Compiler über die Optionen anweisen, OBJ Files zu erstellen. Mit dem Linker kann man die denke ich sicher so wie früher bei z.B. Turbo C, zusammen linken.