Hallo,
Ok der Aufwand ist mir nicht so wichtig dass ergebnis zählt. (Zumindest bei mir)
Du wirst in Assembler (und x86) mit ziemlicher Sicherheit schlechtere Ergebnisse erzielen als in C. Das fängt schon an, wenn du mal eine Division (oder auch Multiplikation) brauchst, die die CPU nicht in Hardware unterstützt. Der Compiler fügt dann automatisch hochoptimierten Code ein...
Soweit ich es aus meinem Lernbuch für Assembler aufgenommen habe, ist der Unterschied zwischen Assembler und Hochsprachen, dass Assembler direkt (fast alle Befehle) vom Prozessor ausgeführt werden können.
Jaein. Fast jeder Assemblerbefehl lässt sich 1:1 in einen Maschinenbefehl für den Prozessor übersetzen. Die Übersetzung von Quelltext in Machinencode erledigt der Assembler.
In Hochsprachen müsse erst der Code durch den Compiler, der dass dann erst "Verwendbar" für den PC macht. Ist dies richtig oder bekomme ich da was in den falschen Hals?
Das ist richtig. Die Übersetzung von Quelltext in Maschinencode erledigt hier der Compiler.
Wenn ich z.B. in Assembler nicht if verwende, da dies kein echter Prozessorbefehl ist und nicht so schnell ausgeführt wird, sondern mühsames zusammenfügen vom cmp vergleichen mache, was von beiden wäre schneller?
Wenn du einem C-Compiler ein komplizierteres if gibst, wird er daraus wahrscheinlich besseren Code erzeugen als deine handgestrickte Variante mit CMP und JMP, wenn du nicht gerade viel Erfahrung in Assembler hast. Dafür versteht man ein paar Zeilen if/else im Quelltext besser und vor allem schneller als eine Seite mit CMPs/JMPs quer durch das Programm.
Theoretisch wäre die cmp methode besser, da die if ja erst compiliert werden muss. Oder macht die Compilierung nicht so viel aus?
C wird nicht zur Laufzeit kompiliert, d.h. der Compiler läuft nur
einmal, wenn du das Programm erzeugst. Das funktioniert genauso wie mit Assembler, denn auch den rufst du genau
einmal auf, um das Programm zu erzeugen.
Was du meinst, sind interpretierte Sprachen (die meisten Scriptsprachen, u.a. auch Batch), wo
zur Laufzeit (also bei jedem Aufruf) der Quelltext gelesen, analysiert und ausgeführt wird. Das ist natürlich deutlich langsamer. Irgendwo in der Mitte liegen dann JIT-Compiler.
Assembler kann schneller sein als das Ergebnis eines C-Compilers, aber so gut kannst du nicht Assembler programmieren.
Was wäre denn die Perfekte Assembler Programmierung? Ich weis auch nicht ob man darauf überhaupt antworten kann
Kann man auch nicht. Aber die Leute, die Compiler schreiben, kennen die CPU besser als der durchschnittliche Programmierer, der bei Hochsprachen dadurch profitiert. Ausnahmen, wo man auch heute noch Assembler benutzt, sind extrem hardwarespezifische Sachen (Interrupthandler, Startup-Code) und zeitkritische Berechnungen bei begrenzter Hardware (Video-Codecs, digitale Signalverarbeitung). Aber auch letzteres können Compiler inzwischen besser.
Und eine Frage vor allem: Würden Hochsprachen denn nicht mehr Ressurcen als Assembler verbrauchen?
Kommt auf die Hochsprache und die Verwendung an. Ein ungeeigneter Algorithmus macht mehr kaputt als du durch Assembler gewinnen könntest; dafür macht dir Assembler die Verwendung ungeeigneter Algorithmen einfacher.
Gruß,
Svenska