64 bit Assembler convert zu c++
-
Das braucht man nicht, man kann Assembler recht problemlos dazulinken. Nur inline geht es halt nicht. Nervig, aber kein Weltuntergang.
-
@Bushmaster sagte in 64 bit Assembler convert zu c++:
wahrscheinlich nur so lange, bis kein drittanbieter eine eine entsprechende extension anbietet.
cl
kann es nicht und kennt auch keine Extensions.
-
@manni66 Kennst du einen anderen Compiler mit dem
_asm sidt idtr
einfach so mitten in einer Funktion geht?
-
Aber ja, @spiegelbirke1, wenn du so Misverständnisse in Zukunft vermeiden willst, dann wäre es gut im richtigen Forum zu posten und/oder dazuzuschreiben warum du bei der Umstellung von 32 auf 64 Bit überhaupt was ändern musst. Also in diesem Fall vermutlich dass MSVC im 64 Bit Mode eben keinen inline Assembler "kann".
-
@Bushmaster sagte in 64 bit Assembler convert zu c++:
@hustbaer sagte in 64 bit Assembler convert zu c++:
habt ihr schonmal probiert inline Assembler mit Visual Studio in einem 64 Bit Programm zu verwenden? Det geht nämlich nicht.
wahrscheinlich nur so lange, bis kein drittanbieter eine eine entsprechende extension anbietet.
Der "Fachliche" Teil wurde ja schon von @Swordfish abgedeckt. Davon abgesehen macht der Satz aber auch keinen sinn. "nur so lange, bis kein drittanbieter" - hä? Wenn du das ",bis " weglässt, dann wird ein Schuh draus.
-
@Finnegan Not implemented: https://developercommunity.visualstudio.com/idea/701689/add-back-inline-assembler-for-x64.html
-
@hustbaer sagte in 64 bit Assembler convert zu c++:
@Bushmaster sagte in 64 bit Assembler convert zu c++:
@hustbaer sagte in 64 bit Assembler convert zu c++:
habt ihr schonmal probiert inline Assembler mit Visual Studio in einem 64 Bit Programm zu verwenden? Det geht nämlich nicht.
wahrscheinlich nur so lange, bis kein drittanbieter eine eine entsprechende extension anbietet.
Der "Fachliche" Teil wurde ja schon von @Swordfish abgedeckt. Davon abgesehen macht der Satz aber auch keinen sinn. "nur so lange, bis kein drittanbieter" - hä? Wenn du das ",bis " weglässt, dann wird ein Schuh draus.
es ist doch möglich, dass jemand die fehlende x64-assembler-unterstützung als mangel empfindet und ein plugin baut.
-
@Swordfish sagte in 64 bit Assembler convert zu c++:
cl kann es nicht und kennt auch keine Extensions.
visual studio ist erweiterungsfähig. eine x64-asm-unterstützung wäre möglich. vielleicht nicht als inline-assembler, aber so old-school mäßig .asm-dateien zu .obj compilieren.
-
@Bushmaster sagte in 64 bit Assembler convert zu c++:
es ist doch möglich, dass jemand die fehlende x64-assembler-unterstützung als mangel empfindet und ein plugin baut.
IMO sollte ein Inline-Assembler voll in den Compiler integriert sein, damit die Assembler-Passagen auch an Code-Transformationen für Optimierungen (Inlining, Umsortieren der Instruktionen und sowas) oder solchen Sachen wie Register-Allokationen teilnehmen können (GCC macht das z.B.).
Das zu implementieren ist schon aufwändig - andernfalls wäre aber der einzige Vorteil, dass man den ASM-Code dann eben in der .cpp stehen hat (wenn man das überhaupt als Vorteil sieht). Das fände ich nicht der Mühe wert.
-
@Finnegan sagte in 64 bit Assembler convert zu c++:
Das zu implementieren ist schon aufwändig
für jemanden, der einen c++ compiler programmiert, wohl eher nicht.
aber ohne ihn belästigen müssen, können andere leute compiler für andere sprachen schreiben. dem linker ist es letztlich egal, welcher compiler eine .obj-datei erzeugt hat.
-
@Bushmaster sagte in 64 bit Assembler convert zu c++:
vielleicht nicht als inline-assembler, aber so old-school mäßig .asm-dateien zu .obj compilieren.
<°)))><(
Als ob das nicht (schon immer?) ohne irgendwelche "Extensions" mit Visual Studio gehen würde.
MASM for x64 (ml64.exe) - Add an assembler-language file to a Visual Studio C++ project.Was anderes: Du kannst natürlich die Constraints immer weiter abändern wie es Dir passt, rechne bloß nicht damit daß Deine Diskussionspartner dann all zu lange Laune haben mit Dir zu reden. Es ging um inline-Assembly und da hast Du mit dem Microsoft-Compiler einfach Pech gehabt. Geld nehmen, Intel Compiler†) kaufen und glücklich sein.
†) Wegen der Integration in VS.
-
@Swordfish sagte in 64 bit Assembler convert zu c++:
Es ging um inline-Assembly
nee, es geht um eine funktion namens get_idt_base, die's nicht unter x64 tut.
inline-asm ist nicht die einzige möglichkeit das zu fixen.
-
@Bushmaster sagte in 64 bit Assembler convert zu c++:
nee, es geht um eine funktion namens get_idt_base, die's nicht unter x64 tut.
Das wurde im fünften Post behandelt und vom OP war seitdem nichts zu hören. Danach geht es offensichtlich darum daß der MS-Compiler kein inline assembly kann.
<°)))><(
-
-
-
@Bushmaster
Es ging um Inline-Assembler. Und der muss voll in den Compiler integriertsein, weil sonst wäre es ja kein Inline-Assembler. Und das geht mit VS zwar wenn man andere Compiler integriert, aber es geht mit MSVC aka "cl.exe" nicht.Das zu implementieren ist schon aufwändig
für jemanden, der einen c++ compiler programmiert, wohl eher nicht.
Da täuscht du dich aber gewaltig.
aber ohne ihn belästigen müssen, können andere leute compiler für andere sprachen schreiben. dem linker ist es letztlich egal, welcher compiler eine .obj-datei erzeugt hat.
Klar. Gibt es ja auch alles. Ein Compilerwechsel ist aber etwas was man normalerweise nicht machen möchte, wenn man bloss ein paar Zeilen Assemblercode integrieren möchte.
-
@hustbaer
wenn es unbedingt inline sein soll, dann könnte er vielleicht den _emit-befehl verwenden.
https://docs.microsoft.com/en-us/cpp/assembler/inline/emit-pseudoinstruction?view=vs-2019
so als letzter ausweg vor dem compilerwechsel.
-
@Bushmaster
_emit
ist ein Inline-Assembler Feature. Wird er sich schwer tun das zu verwenden wenn Inline-Assembler einfach nicht implementiert ist. Und das Problem wurde ja auch schon gelöst: einfach__sidt
ausintrin.h
verwenden.