ASM wirklich ein Vorteil?
-
Hi
hab mich gerade mal ein bisschen in ASM eingelesen. Dabei bin ich darauf gestosen das ASM Prozessor abhängig ist. Soll das jetzt heissen das ich jedes Programm 5 mal schreiben muss damit es auf jeden Prozessor abgestimmt ist?
-
Nein, eigentlich nicht.
Nur wenn du unbedingt die speziellen Befehle einer bestimmten Prozessoren Archtitektur nutzen willst, laufen diese natürlich nicht unter anderen Architekturen. Wenn du beispielsweise nur absolut x86'er Code schreibst, lässt sich der auf ziemlich vielen Prozessoren ausführen (eben auf allen, die x86-kompatibel sind). Ich denke du kannst aber auch ohne größere Bedenken den i386'er Befehlssatz nutzen. Erst wenn du spezielle Befehle neuerer Prozessoren (z.B. IA-64) nutzt, laufen die Programme natürlich nicht auf älteren Prozessoren.
BTW, natürlich ist jedes Programm gewissermaßen prozessorenabhängig. Ein Programm, das auf wirklich jeder Prozessoren Architektur läuft gibt es logischerweise nicht.
-
Ja
Natürlich wird ein Programm, das nur den Standard-X86-Befehlssatz nutzt auch auf allen X86-Prozessoren lauffähig sein.
-
S!K schrieb:
Hi
hab mich gerade mal ein bisschen in ASM eingelesen. Dabei bin ich darauf gestosen das ASM Prozessor abhängig ist. Soll das jetzt heissen das ich jedes Programm 5 mal schreiben muss damit es auf jeden Prozessor abgestimmt ist?
Das musst du nur machen, wenn du wirklich das letzte bisschen Performance aus deinem Prozessor raus holen willst. Die Taktzyklen, die der Prozessor für einen bestimmten Befehl benötigt, sind von Prozessor zu Prozessor verschieden. Nicht um sonst kennt der GCC optimierungs schalter für 386er, Pentium, Pentium 2, Pentium 3, Pentium 4, AMD Athlon usw. Die brauchen halt für die gleichen Befehle unterschiedlich lange, obwohl sie alle x86 Prozessoren sind.
-
assembler ist nicht prozessorabhängig, es ist architekturabhängig. es läuft auf den prozessoren die den befehlssatz unterstützen den du benutzt hast, möchtest du dass ein programm zusätzlich auf mehreren oder erweiterten befehlssätzen lauffähig ist, so must du selbst dafür sorge tragen, dass die kompatibilität zwischen denen erhalten bleibt.
rapso->greets();
-
S!K schrieb:
ASM wirklich ein Vorteil?
Die Frage hat eigentlich mit deinem Text nicht viel gemeinsam. Aber in den allermeisten Fällen lautet die Antwort "nein".
-
ASM ist nur nützlich wenn du ein Betriebssystem erproggen willst. Und dort braucht man es auch nur ziemlich wenig.
-
Naja ein paar mehr Einsatzbereiche gibt's schon noch, z.B.:
Wenn man an einer Skriptsprache arbeitet und von dieser aus C-Funktionen aufrufen will, kommt man nicht um ein bisschen Assembler herum. Oder man arbeitet an einem JIT-Compiler. Für zentrale Funktionen in Codecs wird's auch noch gern verwendet (auch wenn man es dort wahrscheinlich großteils durch Intrinsics ablösen könnte).
-
.prog schrieb:
ASM ist nur nützlich wenn du ein Betriebssystem erproggen willst. Und dort braucht man es auch nur ziemlich wenig.
Also über das "nur" lässt sich streiten, ein "beispielsweise" wäre hier vielleicht angebrachter.
Hast du z.B. schonmal versucht einen Bufferoverflow-String ohne Assembler Kentnisse zu schreiben? Oder auch einem Programm zur Festplattenformatieren würden Assembler Elemente gut tun, ebenso wie einem Packprogramm/-algorithmus. Auch bei modernen 3D Grafik Anwendungen kann etwas Inline-Assembler manchmal viel bewirken. Und sogar große Grafik-APIs wie beispielsweise DirectX nutzen gelgentlich Inline-Assembler. Also, auch wenn du persönlich im Programmieralltag kein Assembler brauchst - hier und dort ist es eben doch noch ganz praktisch (oder teilweise sogar notwendig). Also, ich wäre mit solchen Aussagen vorsichtiger. Was für dich gilt, gilt nicht für jeden.
-
Overflow schrieb:
Oder auch einem Programm zur Festplattenformatieren würden Assembler Elemente gut tun
Wozu das denn?
-
Ringding schrieb:
Overflow schrieb:
Oder auch einem Programm zur Festplattenformatieren würden Assembler Elemente gut tun
Wozu das denn?
Na weil man auf die Hardware doch nur mit Assembler zugreifen kann, weißt du das nicht!?
-
Eigentlich sollte das nur ein Beispiel für ein zeitaufwendiges Problem sein, bei dem es ratsam ist (bzw. wünschenswert) gut optimierten Code zu schreiben.
-
Weil heutige Platten plötzlich um so viel schneller sind als die CPU?
-
Naja, wenn man 30 Millionen Cluster oder mehr mit einem Algorithmus bearbeiten will, der die wirklich schnellste Verschiebereihenfolge ermittelt, kann das schon etwa rechenintensiv werden, denke ich mal.
-
Braucht man auch um Pixel-Shader zu schreiben.
-
ps3 schrieb:
Braucht man auch um Pixel-Shader zu schreiben.
Ich hab gehört, dass man das seit neuestem auch in C, oder so was machen kann.
-
Aufm PC-Markt ist der Einsatz heute wirklich stark eingeschränkt, aber es gibt ja noch viele andere Gebiete wo auch heute noch Assembler zum Einsatz kommt.
Wobei selbst für die meisten Microcontroller inzwischen C-Compiler verfügbar sind.Und Assembler kann dir auch beim debuggen und optimieren von großem Nutzen sein.
-
3D-Engines? Bootloader?
-
ich brauche assembler nur um zu sehen was der compiler macht. manchmal generiert er code der nicht das macht was im c++ source steht. manchmal muss man den assembler einer architektur kennen um zu wissen was für ein compilat entsteht und wie die cpu damit umgehen kann.
manchmal muss man auch assembler benutzen weil es keine andere möglichkeit gibt eine optimierung zu benutzen, bei hlsl z.b. texoffset. dafür gibt es afaik keinen befehl wie bei z.b. glsl.
zudem kann assembler nützlich sein, weil man sich beim programmieren mehr mit der hardware auseinander setzt, nicht nur der cpu, damit weiß man dann z.b. mit den verschiedenen calling conventions was anzufangen.
für schnellen code an sich sind aber oft templates besser, weil der compiler dort sehr viel code weglassen kann, wenn er merkt dass man den nicht braucht. wenn man z.b. ein vectorprodukt ausrechnet und dann nur eine komponente des ergebnisvectors benutzt muss man beim assembler entweder davon ausgehen dass viel code nutzlos für die anderen komponenten durchlaufen wird oder man ne spezielle version schreiben muss. bei templates wird es wegoptimiert wenn man es nicht braucht, und wenn es möglich ist das ergebnis zur compilezeit zu erhalten, dann wird alles durch eine konstante ersetzt.man kann durch assemblerwissen eigentlich keine nachteile haben ;). manchmal ist es sehr nützlich.
rapso->greets();