Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Assemblercode in C# einbinden
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

Assemblercode in C# einbinden

beantworten | zitieren | melden

Hallo!
Weiß jemand wie ich Assemblercode in C# einbinden kann? Also direkt in den C#-Code integrieren? Kennt jemand den/die Befehl/e dafür?


Code-Hacker
private Nachricht | Beiträge des Benutzers
alexander
myCSharp.de - Member

Avatar #avatar-1566.gif


Dabei seit:
Beiträge: 2324
Herkunft: Wendlingen (Stuttgart)

beantworten | zitieren | melden

mhh leider nein, aber ich schau mal ob ich was finde
(oder such doch mal bei msdn)
Viele Grüße
Alexander
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Ich hatte ja die Library dabei, hatte da irgendwas gefunden, weiß aber nicht ob es das richtige ist. Sah mir nicht so danach aus. Da ich erst Donnerstag wieder zuhause bin weiß ich den Befehl leider nicht mehr.


Code-Hacker
private Nachricht | Beiträge des Benutzers
alexander
myCSharp.de - Member

Avatar #avatar-1566.gif


Dabei seit:
Beiträge: 2324
Herkunft: Wendlingen (Stuttgart)

beantworten | zitieren | melden

mhh hab bis jetzt noch nix gefunden, aber geb mir zeit
Viele Grüße
Alexander
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Wie soll das denn gehen, nativen Assemblercode? Oder meinst du IL-Code? Selbst den kann man nicht direkt in eine C# Quellcode-Datei schreiben. Du kannst aber IL Quellcode mit ilasm.exe compilieren.
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Also ich meinte so einbinden wie in C++. Was ist IL-Code???


Code-Hacker
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Es gibt kein Assembler in .Net, sondern nur Metadaten und IL - Intermediate Language - die Zwischensprache, in die alle .Net-Sprachen übersetzt werden. Das ist auch der Grund, warum es egal ist, in welcher Sprache man programmiert. Alles wird in IL übersetzt und zur Laufzeit in Maschinencode JIT compiliert.

Jede Assembly wird beim Laden auf ihre Standard-Konformität und Korrektheit überprüft. Wird nicht konformer IL Code gefunden, kann die Assembly nicht ausgeführt werden. Wenn die Assembly direkt Maschinencode enthalten würde, könnte diese Überprüfung nicht stattfinden.

U.a deshalb kannst du keinen Assemblercode in .Net benutzen. IL Quellcode kannst du auch nicht direkt in C# Code verwenden. Da bin ich mir aber nicht ganz sicher.
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Na eigentlich bin ich mir doch sicher. Es müsste ein Schlüsselwort zum Einfügen von IL existieren. Gibt es aber nicht.
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Ich habe eben gesehen das man in C nur die Module einbinden kann über extern. Das hatte ich übersehen, also das extern. Die haben nämlich den Code direkt unter das Programm gepackt.
Oder soll ich das für C# (und .NET allgemein) jetzt so verstehen das das auch nicht geht? Wäre sehr schade, weil ich besonders Assemblercode immer gerne versuche zu optimieren und damit könnte man wesentlich schneller diverse Berechnungen oder so durchführen.


Code-Hacker
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Nur DLLs über P/Invoke soweit ich weiss, also keine Libs oder so. Du musst aufpassen, dass nicht oder wenig gemarshalt wird, sonst geht dir deine ganze Assembler-Optimierung da schon wieder flöten ;-)

In der Hilfe steht ein bisschen was zu blit-fähigen Typen und >Fixieren statt Kopieren>.

Frag aber mal lieber jemanden, der C++.Net programmiert, ich glaube Maroi oder VizOne z.B., die wissen bestimmt genaueres.
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Ich werde im 4. Sem. eh noch C++ lernen. Deswegen habe ich beschlossen mir einen neueren C++ Builder zu holen und werde erstmal meine Original Version vom einfachen C++ Builder benutzen. und C++ weiter zu lernen. Nebenbei weiß ich ja schon wie man Assembler einbindet, was wir dann ja auch machen. Ist zwar etwas Schade weil mir C# an sich wirklich gut gefällt, aber so bleibe bzw. gehe ich dann doch lieber wieder in Richtung C++. Was jetzt nicht heißt das ich C# nicht mehr programmieren werde, ganz im Gegenteil, das wird sich nicht ändern. Ist zwar etwas Schade drum doch was soll´s...


Code-Hacker
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 771
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Zitat
Original von Code-Hacker
Ich werde im 4. Sem. eh noch C++ lernen. Deswegen habe ich beschlossen mir einen neueren C++ Builder zu holen und werde erstmal meine Original Version vom einfachen C++ Builder benutzen. und C++ weiter zu lernen. Nebenbei weiß ich ja schon wie man Assembler einbindet, was wir dann ja auch machen. Ist zwar etwas Schade weil mir C# an sich wirklich gut gefällt, aber so bleibe bzw. gehe ich dann doch lieber wieder in Richtung C++. Was jetzt nicht heißt das ich C# nicht mehr programmieren werde, ganz im Gegenteil, das wird sich nicht ändern. Ist zwar etwas Schade drum doch was soll´s...

heutige Compiler generieren schon von Haus aus, sehr guten Code
Was willst du da noch mit Assembler machen
Interruptsaufrufe funktionieren eh nicht; das einzige was ich mit vorstellen kölnnte wären Optimierungen, aber das machen die Compiler eh schon von selbst
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Naja, ich programmiere gerne Assembler. Solange ich damit keine Windowsanwendungen proggen kann mache ich Berechnungen, Stringverarbeitungen und solche Sachen. Nebenbei kann ich meine Funktionen so anpassen wie ich sie gerne hätte.
Das die Compiler gut oder sehr gut sind stelle ich damit ja auch gar nicht in Frage nur ich mag Assembler, bleibe in der Übung und habe noch mehr spass am proggen.
Ich werde mit Sicherheit auch nicht alle Programme mit Assembler schreiben, gerade deswegen werde ich C# ja weiter programmieren und auch weil ich damit ja ASP.NET progge bzw. proggen möchte.
Was die Interrupts angeht so ist das nicht richtig. Das geht sehr wohl. Ich habe in meinem Buch ein Beispiel in dem wird ein Assembler-Modul in ein C-Programm eingebunden. In dem Assemblercode befindet sich auch ein Interruptaufruf.


Code-Hacker
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Was studierst du denn? Ich habe Informatik studiert. Da werden keine konkreten Programmiersprachen gelehrt. Die muss man schon können oder sich nebenbei aneignen.
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Ich bin Berufsfachschüler und mache meinen technischen Assistenten für Informatik, müsste auch im Profil stehen. Wir lernen in den Verschiedenen Semester auch Programmiersprachen. In den ersten beiden als Einführung TP. Hier kannst du dir den Lehrplan ansehen, dau musst du das PDF >Informatik-Assistenten (Vorlesungsplan)> anklicken.
Was hast du denn genau studiert? Ich kenne bei uns keinen Studiengang wo die nicht das Programmieren beigebracht bekommen anhand von konkreten Sprachen (sprich noch etwas ausfühlicher als ich es im Moment lerne). Kannst dir hier ja mal die Infos zu den Informatikstudiengängen ansehen. Natürlich kommt es bei Unis darauf an worauf man sich spezialisiert. Aber Programmieren in TP gehört bei uns zur Grundausbildung...


Code-Hacker
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 771
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Zitat
Original von Code-Hacker

Was die Interrupts angeht so ist das nicht richtig. Das geht sehr wohl. Ich habe in meinem Buch ein Beispiel in dem wird ein Assembler-Modul in ein C-Programm eingebunden. In dem Assemblercode befindet sich auch ein Interruptaufruf.

das würde nur unter Windows 9x funktionieren
Windows NT/2k/XP gestatten keine direkten Interruptsaufrufe
probiers

dann kommt dann eine Fehlermeldung
private Nachricht | Beiträge des Benutzers
alexander
myCSharp.de - Member

Avatar #avatar-1566.gif


Dabei seit:
Beiträge: 2324
Herkunft: Wendlingen (Stuttgart)

beantworten | zitieren | melden

mhhhhhh @ hauptmann klappts jetzt bei dir?
Viele Grüße
Alexander
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 771
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Zitat
Original von alexander
mhhhhhh @ hauptmann klappts jetzt bei dir?

was denn? Ç
ich habe Windows 2000, und habe das mit den Interrupts schon ausprobiert(in C++ )

die einzige Möglichkeit Interrupts auch in WinNT/2k/XP zu verwenden ist, das Programm mit einem DOS Assembler zu compilieren
dann funktioniert es
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Hallo!

Ich habe hier eine Seite gefunden in der Beschrieben ist wie Assembler in C# funktioniert.


Code-Hacker
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Genau das meinte ich mit PInvoke. Man definiert externe Methoden und gibt ihre DLL-Einsprungspunkte über DllImport-Attribute an.

Das Problem ist nur, dass dabei, wenn man nicht aufpasst, böse gemarshalt wird. Dadurch geht der Geschwindigkeitsvorteil durch die Assembleroptimierung gleich wieder verloren. Man muss darauf achten, dass man nur blit-fähige Typen verwendet und dass die Daten im Heap gepinnt werden.

Das steht auch alles in der .Net-Doku.
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 771
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Zitat
Original von Code-Hacker
kann mache ich Berechnungen, Stringverarbeitungen und solche Sachen. Nebenbei kann ich meine Funktionen so anpassen wie ich sie gerne hätte.

Berechnungen: #include<math>
String: #include <string>
die Standardlib von C++ bietet dir eigentlich alles schon
private Nachricht | Beiträge des Benutzers
Vellas
myCSharp.de - Member



Dabei seit:
Beiträge: 854

Themenstarter:

beantworten | zitieren | melden

Jo ist klar. Nur wie gesagt, ich mache es da mir Assembler spass macht. Ich habe gestern in Linux festgestellt das man bei Inline-assembler div nicht benutzen kann, nach mehreren versuchen ist dann Kylix abgestürzt. Gilt das für alle mathematischen Operationen?

EDIT: Hat sich erledigt. Hab gesehen das als einziger Rechenbefehl nur ADD geht. Ansonsten geht das von der Anzahl Befehle.


Code-Hacker
private Nachricht | Beiträge des Benutzers