Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 11. June 2006, 21:03

Titel: C oder ASM
Beitrag von: thetrue am 11. June 2006, 21:03
moin,

was meint ihr, nützt es heute noch ein OS in ASM zu programmieren?

ist ASM schneller als C?
oder ist C schneller als ASM?

ok, bei ASM ist der nachteil, das man sehr schnell den Durchblik verleiert ....

bitte um eure meinung
Titel: C oder ASM
Beitrag von: hannibal am 11. June 2006, 21:59
Entweder nur Assembler, oder C + Assembler; ganz ohne kommst du nie aus, egal welche Hochsprache du verwendest. Abgesehen davon stehen sich die in Punkto Geschwindigkeit nichts nach, da unser GCC ein Held ist. :P

Lg, Alex
Titel: Re: C oder ASM
Beitrag von: Jidder am 11. June 2006, 22:06
Die Microsoft Compiler und vor allem die Intel Compiler sind dem GCC aber trotzdem noch einiges voraus. Zumindest war das vor 1,5 Jahren so. Kann sich ja geändert haben. Aber meistens wird der GCC selbst für jedes Prozent schnelleren Code, 50% langsamer ^^
Titel: C oder ASM
Beitrag von: Another Stupid Coder am 11. June 2006, 23:24
tinycc(.org) toppt sie in Sachen speed trotzdem (fast?) alle. Ein exellenter Compiler, finde ich. Übrigens auch gut portierbar für eigene Systeme ;-P

So, genug der Werbung...
Titel: C oder ASM
Beitrag von: bitmaster am 11. June 2006, 23:39
Wenn man nicht gerade schlecht in ASM ist und sein OS nur auf x86er laufen lassen möchte, sollte man ASM nehmen (meine Meinung).

bitmaster
Titel: C oder ASM
Beitrag von: scales of justice am 12. June 2006, 14:38
ich denke, dass es am besten wäre, alles in ASM zu machen,
dann weis man genau was vor sich geht und kann auch alles optimieren

der Hacken ist aber, dass das viel mehr Arbeit ist, deswegen würde ich Assembler und C benutzen
Titel: C oder ASM
Beitrag von: Svenska am 12. June 2006, 22:08
Assembler ist näher an der Maschine, daher sind Optimierungen dort bis ins Letzte möglich.
C (und andere Hochsprachen) sind dagegen portierbar, wenn auch vom Programmierer nicht so sehr optimierbar. Das muss dann der Compiler erledigen.

Von der Geschwindigkeit her dürfte sich das mit den neusten Compilern allerdings nicht mehr viel nehmen - außer dem besseren Überblick über den Aufbau (dafür bedeutend mehr Arbeit) sollte man Assembler nur nehmen, wo man wirklich jedes Byte selbst in die Hand nehmen muss (z.B. Bootloader, Hardware-abhängige Routinen, extrem oft wiederholte Routinchen etc.)

Gruß,
Svenska
Titel: C oder ASM
Beitrag von: Termite am 13. June 2006, 08:13
Hi

meiner meinung nach so viel wie möglich in c den rest in asm. Wiel a.) Platformunabhängig, b.) einfacher zu lesen, c.) weniger fehleranfällig d.) warscheinlich schneller als selbstgeschriebener asm code ( es will mir doch wohl keiner sagen, das er alle P4 befehle inclusieve aller hässlichen piplining efekte kennt? es kann z.B. schneller sein paralel beide berechnungen durchzuführen und erst zum schluss zu entscheiden welches ergebniss man verwendet, als vorher zu entscheiden und dann zu berechnen. )

gruss
Titel: C oder ASM
Beitrag von: C#ris am 13. June 2006, 08:44
Zitat von: Termite

meiner meinung nach so viel wie möglich in c den rest in asm. Wiel a.) Platformunabhängig, b.) einfacher zu lesen, c.) weniger fehleranfällig d.) warscheinlich schneller als selbstgeschriebener asm code ( es will mir doch wohl keiner sagen, das er alle P4 befehle inclusieve aller hässlichen piplining efekte kennt? es kann z.B. schneller sein paralel beide berechnungen durchzuführen und erst zum schluss zu entscheiden welches ergebniss man verwendet, als vorher zu entscheiden und dann zu berechnen. )


Das ist im Prinzip auch meine Meinung. Die Frage ob Assembler oder C ist eine ziemlich sinnlose Diskussion.
Jeder, der ein wenig von Software-Entwicklung (nicht das Coding/Hacken, das hier einige betreiben...) versteht wird darüber den Kopf schütteln.
Wer seinem Code ein langes Leben schenken möchte, der macht ihn möglichst allgemeingültig, portabel, sauber, abstrakt...

Und das bedeutet: "Vermeide Assembler wo es nur geht!"  :roll:
Titel: C oder ASM
Beitrag von: nooooooooos am 13. June 2006, 12:08
Naja....
In meinem Asm-Buch steht was von einem Vergleich zwischen der Codegrösse einerskompilierten C-Programms und der eines Asm-Programms. Es ging da um ein kleines Windowsprogramm das ein Fenster erstellt. Und da war das C-Programm 51mal grösser!!!!!


Und für einen Compiler ist es doch ziemlich schwierig, zu wissen welche Variable er in einem Regiser und welche im Speicher abspeichern will. Und da speichert der sicher alle im Speicher ab. Oder nicht.

Und wegen der Pipelineoptimierung usw... Da hilft auch ein guter Assembler und die meisten Befehle (ca. 90%) die ich verwende sind sowiso nur MOVs, ADDs, ANDs, SUBs, ORs...

Mit Asm lerne ich auch sicher mehr über den Aufbau von Computern usw. als wenn ich in C progge und viele sehen ja den Sinn des OS-Proggens im Lernen....


Naja jeder soll selber wissen was er will, aber ich progge in Asm.
Noooooooooooooooos
Titel: C oder ASM
Beitrag von: Jidder am 13. June 2006, 12:16
Zitat von: nooooooooos
Naja....
In meinem Asm-Buch steht was von einem Vergleich zwischen der Codegrösse einerskompilierten C-Programms und der eines Asm-Programms. Es ging da um ein kleines Windowsprogramm das ein Fenster erstellt. Und da war das C-Programm 51mal grösser!!!!!

Das liegt nicht am Compiler, sondern am Linker. Der Code, den der Compiler erstellt ist kaum größer als das Assembleräquivalent, allerdings wird da vom Linker vermutlich die gesamte Bibliothek gegen die exe gelinkt. Außerdem sind wahrscheinlich noch einige Debugginginformationen in der Datei enthalten. Das heisst also, das viel überflüssiges Zeug in die exe kommt, was man aber mit entsprechender Kenntnis der Compilerparameter verhindern kann.


Zitat
Und für einen Compiler ist es doch ziemlich schwierig, zu wissen welche Variable er in einem Regiser und welche im Speicher abspeichern will. Und da speichert der sicher alle im Speicher ab. Oder nicht.

In der Regel nur in der niedrigsten Optimierungsstufe. Mit entsprechendem Optimierungsgrad werden die Register ziemlich effektiv genutzt.


Mit Assembler kann man theoretisch "näher an der Maschine" arbeiten, und besseren Code erzeugen. Aber die meisten können das nicht, weil sie eine Hochsprache gelernt haben und dadurch auch in diesem Milieu denken. Kaum jemand reizt die Möglichkeiten von Assembler aus, weil er die ganzen tollen Befehle/Befehlskombinationen nicht zu nutzen weiss.
Titel: C oder ASM
Beitrag von: kevin am 13. June 2006, 12:57
Zitat von: nooooooooos
Naja....
In meinem Asm-Buch steht was von einem Vergleich zwischen der Codegrösse einerskompilierten C-Programms und der eines Asm-Programms. Es ging da um ein kleines Windowsprogramm das ein Fenster erstellt. Und da war das C-Programm 51mal grösser!!!!!

Erstens: Es gibt einen Unterschied zwischen solchen kleinen Testprogrammen und größeren Brocken.

Zweitens: Wer sagt denn, daß auf Dateigröße optimiert werden soll? Ausführungsgeschwindigkeit oder noch viel mehr Fehlervermeidung, Entwicklungszeit und Wartbarkeit sind doch viel wichtigere Kriterien. Und zumindest bei den letzten beiden Punkten kann mir niemand erzählen, daß ASM im Vorteil ist. Ich würde sogar sagen, daß C da höchstens ein Kompromißlösung ist und man mit anderen Sprachen (z.B. Pascal oder Java) bessere Ergebnisse bekommt.

Drittens: Die heutigen Compiler optimieren so gut, daß ich von Hand sicher nicht hinterherkomme. So gut kenne ich den Prozessor einfach nicht (und ich vermute auch kaum einer von den anderen hier).
Titel: C oder ASM
Beitrag von: thetrue am 13. June 2006, 13:51
ok, hier gibts nun gute meinungen :)

doch nun bin ich verwirt  :roll:

ich war/bin für asm, da ich die ganze controlle habe ...

ich denke, dass asm trotzt schneller ist und besser ...
die meisten, die c nutzen haben nur angst etwas mehr zu tippen und zu überlegen ....

net böse gemeint
Titel: C oder ASM
Beitrag von: Jidder am 13. June 2006, 14:16
Zitat von: thetrue
ich war/bin für asm, da ich die ganze controlle habe ...

Bloß, weil du in C nicht die Assemblerinstruktionen siehst heisst, es nicht, dass du keine Kontrolle hast. Das ist der Sinn von Standards und von Compilern, die nicht Code frei nach Laune sondern nach einem nachvollziehbaren Muster erzeugen.

Zitat
ich denke, dass asm trotzt schneller ist und besser ...

Bevor Assembler schneller und besser ist, musst DU auch schnellen und besseren Assemblercode schreiben können. Unter C musst du nur gute Algorithmen und C können, unter Assembler musst du dich jedoch zusätzlich mit der Architektur auseinandersetzen.

Ich wette, dass kaum ein Assemblerprogrammier sich das Intel Manual komplett durchlesen hat, und nach Optimierungsmöglichkeiten bezüglich Instruktionsanordnung, Pipeline, Alignment, Level-123-Caches und TLB abgegrast hat. Und das Ganze dann für die Verschiedenen Prozessoren und Prozessorgenerationen. Die Entwickler von C-Compilern tun das schon, damit C-Programmier von dem schnelleren Code ihrer Compiler profitieren.
Titel: C oder ASM
Beitrag von: Osbios am 13. June 2006, 15:12
Fakt ist: Ein P4 ist von keinem normlasterblichen, assemblerbenutzendem Menschen Pipeline optimierbar. Aber das beste ist: Er wird auch von Hochsprachen nicht gerade ausgeschöpft.  : P
Die Stärke des P4 ist SSE bzw. SIMD, und das wird meist nur von dafür optimierten Programmen ausgenutzt. Dennnoch werden Hochsprachen vorallem aus CPUs mit komplexen Pipelinesystemen sehr viel mehr herausholen.

Aber in Punkto Codegröße ist ASM ungeschlagen!!! ;)
Titel: C oder ASM
Beitrag von: bitmaster am 13. June 2006, 15:19
Also ich persönlich bin auch fü Assembler. Es mag sein das heutige C Compiler recht gut compilieren können. Aber ich glaube nicht das der C Compiler besseren/schnelleren Code erstellen kann als ein guter ASM Programmierer. Wenn man natürlich kA von ASM hat bzw. nicht damit zu optimieren weiß, würde ich erstmal dies lernen bevor man ASM nutzt. Ich denke C und die anderen Hochsprachen bringen einzig und allein dem Programmierer etwas. Nämlich das sie schneller fertig sind (was aber nicht unbedingt der Fall sein muss). Ich persönlich kenne keinen Compiler der so guten/kleinen/schnellen Code erzeugt wie man es mit ASM machen kann. Wer natürlich sehr schlecht ASM proggt, muss nicht erwarten das sein Programm dann besser als ein C Programm ist. Aber wenn man bloß kleine Sachen wie z.B. ein Spiel etc. schreiben möchte, und man C (oder eine andere Hochsprache) recht gut kann, sollte man diese nehmen. Denn da macht es am Ende auch nichts ob das Spiel jetzt 60 KByte oder 500 KByte groß ist. Aber wer ein OS (Projekt das über Jahre geht) schreiben möchte, sollte sich schon überlegen ob das System am Ende (mit allem, Gui, Kernel, Bibliotheken, Treiber etc.) beispielsweise 50 MByte oder 500 MByte groß sein soll. Man muss als ASM Programmierer nur lernen den Code sauber zu halten (externe Quellcodedateien etc.) damit man nicht den Überblick verliert und das Programm dann auch wirklich besser ist als der von C. Aber das liegt dann wieder beim Programmierer selbst. Also Hochsprachen sind IMO nur für den Programmierer angenehm.

bitmaster


PS: Hochsprachen (finde ich) sind nur im Webbereich gut. (Oder darf man html/php etc. nicht als Hochsprache bezeichnen?).
Titel: C oder ASM
Beitrag von: thetrue am 13. June 2006, 15:29
Zitat von: bitmaster

PS: Hochsprachen (finde ich) sind nur im Webbereich gut. (Oder darf man html/php etc. nicht als Hochsprache bezeichnen?).


nein, html ist eine markup sprache und PHP ist eine scriptsprache ;)
Titel: C oder ASM
Beitrag von: Jidder am 13. June 2006, 15:41
Zitat von: bitmaster
ein guter ASM Programmierer.

Kennst du einen?
Titel: C oder ASM
Beitrag von: thetrue am 13. June 2006, 15:44
Zitat von: PorkChicken
Zitat von: bitmaster
ein guter ASM Programmierer.

Kennst du einen?


der admin vieleicht? also roshl
Titel: C oder ASM
Beitrag von: Jidder am 13. June 2006, 15:56
Warum? Von ihm habe ich noch keinen Assembler Code gesehen. Wenn er gut ist wäre es ja wirklich mal interessant, was zu sehen.
Titel: C oder ASM
Beitrag von: nooooooooos am 13. June 2006, 16:05
Egal....
Soooooooooooo schwierig ist jetzt Asm auch wieder nicht und ein bisschen Hirn für die Optimierung hat jeder übrig.

Und mit Asm lernst du viel mehr als wenn du einfach alles in C schreibst.
Ich schreibe die unteren Module meines OS sicher in Asm und die höheren warscheinlich mit Java oder so....

Und wenn man Asm-Code schön optimiert und übersichtlich anordnet, dann checkt man den Code auch noch relativ einfach
Titel: C oder ASM
Beitrag von: Termite am 13. June 2006, 16:05
Na ich weis nicht.

sauberen und schnellen und gut lesbaren asm code zu schreiben ist nicht möglich. Da werden soviele tricks und kniffe angewendet, das kann nur unübersichtlich werden. z.B. wieso wird eine variable die aus dem Speicher in ein Register geladen wurde 3 befehle später verwendet.

und was ist heutzutage schon speicher? kostet doch nix mehr, ich kenn da noch zeiten, da hat das MB 1000 DM gekoster.  reden wir hier also über 64Kb rom und 512byte ram? (80c51und derivate) oder über ein bischen mehr? Vista soll ja angeblich bis zu 20GB festplattenplatz brauchen.  :shock:

ASM ist ja auch gut zum lernen. Nur in der Praxis wird kaum noch asm gecoded. wieso auch. Es bringt mehr nachteile als vorteile. ( kleinere Code size und ggf schnelleren Code) für einen schlechtwartbaren code, der nicht portabel ist, Fehleranfälliger und für den man auch noch länger braucht zum erstellen? Dazu sollte man noch wissen, das 90% der rechenzeit in nur 10% des Codes verbraucht werden. ( so grob über den daumen ). und meistens lässt sich der grosse zeitverbrauch auf einen schlechten ALG zurückführen. Und wenn, dann wird das bestehende c - programm disasembliert und mit dem ASM optimiert, fals der compiler doch schrott gebaut haben sollte.

aber jedem das seine.

ps. ASM oder OS Proger wollen am liebsten alles selber machen. Sieht man ja auch daran, das manche ihr CMS oder wiki lieber selber schreiben. als was bestehendes an seine bedürfnisse anzupassen.

[edit]
@noooooos: ich kanns mir nicht verkleifen. java im os, da hast du aber noch viel vor. vorallem da java ne vm braucht.
Titel: C oder ASM
Beitrag von: bitmaster am 13. June 2006, 17:05
@PorkChicken: jo
Titel: C oder ASM
Beitrag von: bitmaster am 13. June 2006, 17:19
Ach ja, noch was. Das laden von Sektore einer Festplatte dauert länger als schlechter ASM Code (piplines etc).

bitmaster
Titel: C oder ASM
Beitrag von: Jidder am 13. June 2006, 17:50
und nachts ist es kälter als draussen
Titel: C oder ASM
Beitrag von: bitmaster am 13. June 2006, 18:22
Zitat von: PorkChicken
und nachts ist es kälter als draussen
Nee, ebend nicht. Da scheinst du was nicht ganz verstanden zu haben.

bitmaster
Titel: Re: C oder ASM
Beitrag von: Jidder am 13. June 2006, 18:31
Erklär es mir bitte. Bis dahin gehe ich davon aus, dass nicht über Zugriffe auf Festplatten sondern über Assembler und C diskutiert wurde.
Titel: C oder ASM
Beitrag von: kevin am 13. June 2006, 19:19
bitmasters Standardargument ist, daß das Laden von ASM-Dateien (weil kleiner) schneller geht und das dann einen signifikanten Unterschied zu C-Programmen macht. Was natürlich spätestens dann Unsinn ist, wenn das Programm länger als fünf Sekunden läuft...

Zitat
Egal....
Soooooooooooo schwierig ist jetzt Asm auch wieder nicht und ein bisschen Hirn für die Optimierung hat jeder übrig.

Doch, ASM ist soooo schwer. Erzähl doch mal, was du bei deiner händischen Optimierung alles miteinbeziehst.

Zitat
@noooooos: ich kanns mir nicht verkleifen. java im os, da hast du aber noch viel vor. vorallem da java ne vm braucht.

gcj? Zugegeben, noch nie selbst benutzt.
Titel: C oder ASM
Beitrag von: Termite am 13. June 2006, 19:40
Hi

gcj ist ja sicher toll. nur der übersetzt der ein java prog in nativ code und nicht in java byte code. erspart mir somit den jit ( just in time ) compiler und das cashen der native cods. den rest den die vm noch leistet wie netzwerk, GUI, GC, Typüberprüfung zur laufzeit, ... brigt er auch mit nur als lib die er dazulinkg.

".. daß das Laden von ASM-Dateien (weil kleiner) schneller geht und das dann einen signifikanten Unterschied zu C-Programmen macht ... " *hust* bei transfährraten von 20mb in der sekunde?  soviel schaffen moderne Festplatten locker. und jetzt komm bitte keiner mit nem diskettenlaufwerk. Die dinger sind doch schon am aussterben. zugriff auf massenspeicher ist zwar immer noch ein nadelöhr. aber bei weitem nicht mehr der wie vor 15 Jahren.

gruss
Titel: C oder ASM
Beitrag von: Osbios am 13. June 2006, 21:04
Dass mit den Zugriffszeiten der Massenspeicher ist natürlich nicht wirklich relevant. Ich benutze jedoch gerne ASM weil auch Initialisierungscode der nur einmalig benutzt wird sehr viel kleiner ist. Da ich sowie so nicht optimiere (wer soll das dann noch lesen können?) ist der zwar langsammer, aber die par ns sind mir egal.
Titel: C oder ASM
Beitrag von: Coffee am 13. June 2006, 21:24
naja ich benutz auch asm weil ich das besser kann als c^^
Titel: C oder ASM
Beitrag von: nooooooooos am 13. June 2006, 21:37
Sicher ich hab noch seeeeeeeeeeeeeeeeeeeehr viel vor!!!!
Nachdem ich ein paar wichtige Treiber zur Grundlage gemacht hab, mach ich das Java und damit Programme die auf die Treiber zurückgreifen...(GUI, Office...)

Optimieren kann man sehr wohl, weil wie gesagt mein Code zu 90% aus diesen MOVs usw. besteht.
Und da hat man in Sachen Speicherzugriff, Schleifen, und Verzweigungen klar Vorteile...Meine Meinung
Titel: C oder ASM
Beitrag von: bitmaster am 13. June 2006, 23:53
Mit Sektore laden meinte ich eigentlich das Laden eines ganzen Betriebssystem. Ein in ASM geproggtes OS läd sich viel schneller als ein in C geproggtes (da 10 mal kleiner oder so). Und außerdem verbraucht notepad alleine schon über 300 KByte Arbeitsspeicher, was man mit ASM gut auf 60 KByte oder so hätte reduzieren können. Und das gleiche dann bei ein ganzes OS. Ja das gibt schon ein großer Unterschied.

bitmaster
Titel: C oder ASM
Beitrag von: hannibal am 14. June 2006, 05:50
Ich hab keine Ahnung wieso ihr alle von Assembler und vor allem von euch selbst so ueberzeugt seid. "Mein Assembler Code ist viel schneller/kleiner/besser/toller als dein C Code" - blah.
Was ich eigentlich ganz am Anfang schreiben wollte, bevor Opera sich verabschiedet hat: " WHAT THE FUCK? "

Man braucht einfach das richtige Werkzeug fuer die Arbeit, die man gerade verrichtet. Wenn man mit einem Vorschlaghammer irgendwas zertruemmern muesste, wird man hoffentlich nicht mit einem Zahnstocher arbeiten. Wenn man ein Loch boren will, verwendet man auch hoffentlich keine Kreissaege, sondern eine Bohrmaschine.

Abgesehen davon, kann man sich mit C ein Bein wegschiessen, wenn man will. Zeig mir das in Assembler, das ist viel zu viel Arbeit dort! :P
Titel: C oder ASM
Beitrag von: maumo am 14. June 2006, 12:05
meine meinung ist: es geht ja wohl um das verstehen des computers, und nicht um das einhacken von mnemonics! wenn ich weiss ich muss zum text schreiben an eine bestimmte addresse die nachricht im bestimmten format schreiben, dann hab ich das in C mit einem pointer fertig, und damit auch verstanden, in asm muss ich erst das richtigen segmente und die richtige effektive addressen laden -> der lern erfolg ist der gleiche, und da es mir NUR um das lernen geht, ist mir C(++) lieber.

@bitmaster: bei der programm größe kommt es eher auf das dateiformat an, auf die symbole und die bibliotheken. in asm hast du ja nur deine interrupts, du benötigst keine relocations in deinen programmen, hast ja kein dateiformat und keine libs und deshalb ist es bei dir alles n bischen schneller. aber: die schnelligkeit sieht man bei den heutigen prozessoren sicherlich nicht mehr. außerdem sind die meisten windows programme in VBasic geschrieben und deshalb so groß, da anscheinend vbasic code etwas anders aufgebaut ist (ich hab da so ziemlich keine ahnung...)
Titel: C oder ASM
Beitrag von: bitmaster am 14. June 2006, 14:11
Na ja, ihr habt ja recht. Jeder das seine. Ich progge in ASM, andere von euch in C(++), und mein kleiner Bruder (den es nicht gibt) proggt in Pascal und Basic. ^^

bitmaster
Titel: C oder ASM
Beitrag von: C#ris am 14. June 2006, 15:37
Zitat von: Termite

@noooooos: ich kanns mir nicht verkleifen. java im os, da hast du aber noch viel vor. vorallem da java ne vm braucht.

Ich prophezei mal, dass das die Zukunft ist...Abstrahierte OOP-Sprachen in plattformunabhängigen Bytecode -> Microsoft macht das mit .NET ja genauso...
Man hat eben tausende Vorteile dadurch... :roll:
Titel: C oder ASM
Beitrag von: Termite am 14. June 2006, 15:48
Hi

es ist für mich ein unterschied, ob ein OS java-bytecode oder .Net Code ausführen kann, oder ob es darin geschrieben ist. Das was MS mit .Net vorhat ist ja nichts anderes als wie wenn jeder sich das Framework installieren würde. nur das es bereits bestandteil des OS ist (man könnte auch von zwang reden). Wobei jetzt dann wieder die frage zu klähren ist, was gehört zum os / Kernel. So wie es MS definiert ( bei vista sind 20GB )  mit Internetexplorer, Mediaplayer, ..... oder wie bei linux, wos nur ein, zwei MB sind. ( der linux kernel selber ist nicht gross, nur das drumherum, Treiber, GUI, Dienste, ... sorgen für die nötigen MB/GB einer linux installation )

gruss
Titel: C oder ASM
Beitrag von: nooooooooos am 14. June 2006, 16:00
OK nochmal:

DefinitionMS - DefinitionLinux = In Java geschrieber Teil meines OS
Titel: C oder ASM
Beitrag von: Svenska am 14. June 2006, 18:57
Ich habe neulich einen Artikel in der Gamestar/dev gelesen und es ist schon recht interessant, was der Programmierer der FarCry2-Engine dazu zu sagen hat.
Vor ein paar Jahren war es so, dass man ein Programm optimieren konnte, nicht nur durch Verwendung passender Programmiersprachen, sondern durch intensives Anwenden von Gehirnschmalz in der Programmlogik.
Inzwischen sieht es anders aus. Die Hardwareentwicklung schreitete und schreitet zu schnell voran, als dass die Besten Coder noch optimieren könnten. Außerdem sind sehr viele Fälle zu berücksichtigen, jede GPU/CPU/FPU etc. will anders programmiert werden. Selbst Leute, die aus logischen Gründen optimieren müssten, lassen das (vom Compiler) erledigen.

Warum läuft <Spiel hier> nicht auf ner GeForce4 ? Weil die Entwickler nicht darauf optimiert haben und die rohe Rechenleistung zu gering ist, dank ineffizientem Code.
Warum verlangt <anderes Spiel hier> einen Prozessor über 3 GHz? Weil die Rechenleistung verbraten wird, ohne das einzudämmen.
Warum laufen auf einer Playstation mit 33 Mhz und 4 MB RAM Spiele, die auf einem gleichartig ausgestattetem PC nie laufen könnten? Weil auf Konsolen dank identischer Hardware optimiert werden kann.

Hier könnte ich fortfahren, es gibt noch weitere Gründe, die das Schreiben von Software in der heutigen Zeit schwierig machen, wenn man die Leistungsgrenzen ausreizen will. Eine DualCore-CPU hat zwar zwei Hardware-Threads, aber der eine blockiert tlws. den anderen; im Gegensatz zu "echtem" Multitasking. Will man die CPU ausreizen, muss man das berücksichtigen und so weiter und so fort.

Was ich damit sagen will: Wäre die Hardwareentwicklung nicht so schnell am voranschreiten, würden wir mit bedeutend weniger Rechenleistung gleiche und bessere Resultate erzielen, einfach, weil viele Programmierer die Innereien besser kennen würden.

Was interessiert heute noch der Unterschied zwischen MOV AX,0 und XOR AX,AX ? Das macht ein guter Assembler gleich mit weg. Optimierung beginnt viel tiefer, nämlich im Konzept.

Und später ist die Implementierung in einer höheren Sprache übersichtlicher. Assembler ist nicht tot, wird nie sterben, aber die Benutzung sollte auf ein Minimum reduziert werden.
Das sage ich, der ich Assembler kann und C nicht. Aber so ist die Realität, verursacht durch Marktwirtschaft.

Gruß,
Svenska
Titel: C oder ASM
Beitrag von: Legend am 14. June 2006, 20:30
Jop, im Extremfall könnte man es so sagen das ein C/C++-Programmierer durchaus über die Performance des Programmes eines ASM-Programmierers lachen kann, wenn der ASM-Programmierer sein Programm dauerend in einer Liste suchen lässt und der C/C++-Programmierer Bäume benutzt. Denn die (sind wir mal extrem großzügig) 30% mehr rohes Tempo vom ASM-Programm machen den Unterschied zwischen linearer und logarithmischer Laufzeit bei weitem nicht wett.

Nun kann man zwar sagen, was ist wenn der ASM-Programmierer Bäume benutzt ... nun, das wäre wahrscheinlich die Non-Plus-Ultra Lösung, aber wahrscheinlich auch schwerer zu lesen als beide Programme oben zusammen.

Von daher ASM hin oder her - eure Programme sind lahm wenn eure Algorithmen lahm sind und werden es dann auch mit jeder verrückten Optimierung in ASM bleiben.
Titel: C oder ASM
Beitrag von: bitmaster am 15. June 2006, 13:37
Zitat
Von daher ASM hin oder her - eure Programme sind lahm wenn eure Algorithmen lahm sind und werden es dann auch mit jeder verrückten Optimierung in ASM bleiben.
Ha ha ha, dann sind wir wieder da wo ich angefangen habe. Ich sagte C/C++ hat nur für den Programmierer einen Vorteil. Ein guter ASM Programmierer (der auch gute Algorithmen schreibt etc.) schaft bessere Programme als ein C/C++ Programmierer. C/C++ macht es halt einfacher ein Programm fertig zu bekommen. Natürlich, wenn ein ASM Programmierer zu blöd ist seinen Code sauber/lesbar/gute Algorithmen einzubauen dann kann das C/C++ Programm vielleicht sogar schneller bzw. fast so schnell sein wie das ASM Programm. Aber mit ASM kann man halt sein Programm wirklich so schnell wie es nur geht machen. Bei C/C++ geht das nicht.

bitmaster

PS: Lassen wir es doch so: Jeder das was er möchte. OK?
Titel: C oder ASM
Beitrag von: Biehler Productions am 15. June 2006, 22:17
Jeder sollte die Sprache wähöen, die er am besten kann.
Wenn jemand ein Brainfuck Genie ist, soll er sein OS in BF schreiben, wenn er will.
Es hat keinen Zweck, sein OS mit C zu schreiben, wenn man gerade mal eine IF Konstruktion in C schrieben kann...
Titel: C oder ASM
Beitrag von: Legend am 15. June 2006, 22:39
Zitat von: bitmaster
Zitat
Von daher ASM hin oder her - eure Programme sind lahm wenn eure Algorithmen lahm sind und werden es dann auch mit jeder verrückten Optimierung in ASM bleiben.
Ha ha ha, dann sind wir wieder da wo ich angefangen habe. Ich sagte C/C++ hat nur für den Programmierer einen Vorteil. Ein guter ASM Programmierer (der auch gute Algorithmen schreibt etc.) schaft bessere Programme als ein C/C++ Programmierer. C/C++ macht es halt einfacher ein Programm fertig zu bekommen. Natürlich, wenn ein ASM Programmierer zu blöd ist seinen Code sauber/lesbar/gute Algorithmen einzubauen dann kann das C/C++ Programm vielleicht sogar schneller bzw. fast so schnell sein wie das ASM Programm. Aber mit ASM kann man halt sein Programm wirklich so schnell wie es nur geht machen. Bei C/C++ geht das nicht.


Und so ist es halt auch.

Absolutes Optimum: (Gutes) ASM + gute Algorithmen
Aber: C++ + gute Algorithmen >> ASM + schlechte Algorithmen

Zitat
PS: Lassen wir es doch so: Jeder das was er möchte. OK?


Jop. Für die meisten werden C/C++ Programme aber lesbarer sein als ASM Programme, auch bei gleicher eigentlicher Qualität des Codes.

 Aber zu sagen ich schreibe meine OS in ASM, meins wird also automatisch vieeeeeeel schneller sein, ist nun mal vollkommener Blödsinn. Dazu gehört mehr als sein OS in ASM zu schreiben.
Titel: C oder ASM
Beitrag von: C#ris am 16. June 2006, 10:46
Zitat von: Legend

 Aber zu sagen ich schreibe meine OS in ASM, meins wird also automatisch vieeeeeeel schneller sein, ist nun mal vollkommener Blödsinn. Dazu gehört mehr als sein OS in ASM zu schreiben.

Sehr richtig!
Die Leute, die in der Lage sind, in ASM schnelleren Code zu schreiben als nen Durchschnittlicher C Programmierer + GCC -O0 kann man in diesem Forum vermutlich an einer Hand abzählen... :twisted:  Aber jeder soll machen, was er für richtig hält... :wink: