Hallo Matthias
Applikation:
Hier sollte man dem Applikations-Programmierer Berufsverbot
erteilen WEIL er so etwas macht, oder dem
Compiler-Programmierer weil er es NICHT gemacht hat !
Hier fände ich einen kontextsensitiven Editor gut , das es
etwas einfacher wird und komplette Anwendungen auch in
Assembler schreiben kann . Ich habe ein vb5.Professionell und
masm 6.11(mit update6.13) , ich kann mit Assembler dll´s
schreiben ( nach vielen Fehlern ) …
Den Systemcode wollte ich eigentlich nicht verändern , bei
Microsoft stellen die mich dafür im Leben nicht ein …
Die heutigen, optimierenden, C-Compiler erzeugen sehr effizienten Code, welcher nur unwesentlich langsamer als ein entsprechendes Assembler-Programm ist. Wenn du die Zeit berechnest welche du benötigst um ein Programm zu schreiben und zu debuggen welches dann ca 5-10% schneller läuft, rechnet sich die Entwicklung in Assembler nicht !
Inline-Code:
Ist eine ziemliche Bastelei, welche eigentlich nur Probleme
verursacht:
Wenn man die Assemblersprache, die Segmentierung und den
Linker nicht beherscht, sollte man die Finger davon lassen;
Ja , der Linker war irgendwie mangelhaft dokumentiert , ich
mußte mir was aus dem Internet laden . Die Segmentierung ist
heute bei win32 überfällig . (flat32)Bereitet mir leichtes
Grausen .
Ich meine hier nicht die Segmentierung (Speicherverwaltung) der CPU, sondern die Segmentierung des Programmcodes also des Speichersegments in welchem der Code abgelegt (sollte ReadOnly gesetzt werden und muss vom Betriebssystem nicht ausgelagert werden wenn Platz im Hauptspeicher benötigt wird, sondern kann aus der Programm-Datei nachgeladen werden), das Segment in welchem Konstanten abgelegt werden (wird wie das Code-Segment behandelt) und das Segment in welchem sich die Daten befinden (dieses MUSS ausgelagert werden, wenn im Hauptspeicher Platz benötigt wird). Dann ist da noch das „kleine“ Problem, welches die meisten Programmierer nicht beherschen, dass die Routine welche zum „Aufräumen“ einer DLL benötigt wird immer im SPeicher gehalten werden muss, sonsst kann man das Programm nicht mehr beenden wenn der Speicher voll ist.
Die Funktion ist nicht optimierbar;
?? welche ?
Normalerweise optimiert ein Compiler die Belegung der CPU-Register mit lokalen Variablen und Schleiffen werden auch umgestellt so, dass sie schneller abgearbeitet werden können. Ist nun auch nur eine Zeile Inline-Assembler innerhalb einer Funktion vorhanden, so müssen diese Optimierungen abgeschaltet werden.
Der Code ist nicht auf einen anderen Compiler portierbar;
In einer Multitasking-Umgebung sind direkte Speicher- oder
I/O-Zugriffe sowieso nicht gestattet.
Das sind aber auch Eigenschaften des protected-mode ,
multitasking hin oder her .
Zu zäummst hier das Pferd am Schwanz auf.
Der Protectet-Mode wurde von Intel beim 80286 eingeführt um Tasks voneinander zu trennen, das heisst ein Task kann nicht auf den Code- oder Daten-Bereich eines anderen zugreiffen und dort versehentlich (Hacker machen es mit absicht) etwas zu verändern (Andere CPU’s, insbesondere Grossrechner konnten das schon länge). Microsoft hat das nur bei Windows NT richtig implementiert, bei Win95/98 ist diese Trennung nur mangelhaft implementiert.
„richtiger Assembler“:
Wenn du ein Modul in Assembler erstellst, ist es aus der Sicht
des C-Compilers nicht von einem Modul welches in C geschrieben
wurde zu unterscheiden.
Danke , ich hoffe Du meinst .dll´s
Eigentlich nicht nur. Wie der Name schon sagt (DLL = Dynamic Link Library) ist das eigentlich eine normale Bibliothek, oder eben ein Modul, welches erst, wenn es zur Laufzeit wirklich benötigt, geladen wird. Das gegenteil ist eine statisch gelinkte Bibliothek, welche dann meist direkt in deiner EXE-Datei abgelegt wird. Der Vorteil einer DLL ist, dass sie nur einmal im System (auf der Disk) abgelegt werden muss und dann von allen Programmen benutzt werden kann und somit PLatz gespart werden kann, Das ganze wird mit etwas mehr Zeit für jeden Aufruf der Funktionen erkauft, da im Programm-Code nicht feste Sprungadrssen abgelegt werden können. Zudem kann es Probleme geben wenn eine DLL dur eine andere Version ersetzt wird, welche nicht ganz kompatibel zur bestenden ist, dann funktionieren plötzlich alle Programme die diese DLL verwenden nicht mehr richtig.
Module bedeutet auch, dass ich mein Programm (Source Code) NICHT in eine einzige Datei packe, sondern in einzelne Teile gruppiere, welche dann auch einzeln Compiliert werden können. Einerseits spart man sich damit Zeit beim Compilieren (es müssen nur diejenigen Module neu compiliert werden, welche verändert wurden) andererseits erreicht man eine gewisse Kapselung (lokale Funktionen und Daten können von ausserhalb nicht aufgerufen werden und man ändert nicht etwas, was dann ausserhalb des Moduls zu Problemen führt).
Bei Microsoft gibt es dem Masm nur noch als Zugabe für Visual
C++ . Anscheinend soll Assembler sterben , und auch die
Betriebssysteme werden zum großen Teil mit C erstellt .
Wie weiter oben schon gesagt, ist Assembler etwas für die
Profis und somit macht es auch Sinn den Assembler nur mit der
Profiversion auszuliefern.
Ja kann sein , aber ich glaube eher , das man Beratungszwänge
bei Microsoft oder hilflose,bzw. „unproduktive“ Programmierer
vermeiden möchte . Ich bin zum Beispiel echt sauer , das
manche Sachen im Windows nicht schneller gehen (windows
scrollen , Grafik-api )
Das liegt vor allen daran, dass Microsoft eigentlich kein Ahnung von Betriebssystemen hat:
der Source-Code für MS-DOS wurde eingekauft und dann hat man nur daran rumgebastelt bis zu WIN 98.
Für Win NT hat man eine Betriebssystem-Entwickler-Mannschaft, die waren vorher bei DEC wenn ich mich recht erinnere, abgeworben.
Schau dir mal andere Betriebssysteme an welche auch auf deiner Hardware laufen, die sind kleiner, schneller und stabiler.
Werden bei C Programmieren Include-files für Assembler
verwendet ?
Diese Frage verstehe ich nicht ? Meinst du ob Include-Dateien
auch in einem Assembler-Programm verwendet werden oder ob eine
Include-Dateie für ein in Assembler geschriebenes Modul
erstellt wird ??
Die Frage hat sich etwas erledigt , die C- Programmierer haben
ja diese .H Files und ähnliches ( bin nicht sehr bei C
bewandert ) , das .inc Files in Assembler verwendet werden ,
weiß ich so , außerdem Tippfehler: „bitte C Programmierern“ .
In C gibt es im Prinzip 3 Arten der Verwendung von .H (H = Header) Dateien:
- Man definiert darin die öffentlichen Funktionsaufrufe, Konstanten und Datenstrukturen für ein bestimmtes Modul. Dadurch kann der Compiler diese überprüffen.
- Man definiert darin Macros, Konstanten und Datenstrukturen damit man die nicht immer wieder neu eintippen muss und man hat dadurch nur eine Datei in welcher man anpassungen vornehmen muss.
- Man kann damit Code-Fragmente in eine Funktion einsetzten.
Im Prinzip ist es genau das gleiche was du schon von deinen .INC-Dateien kennst.
MfG Peter(TOO)