Autor Thema: C oder ASM  (Gelesen 20020 mal)

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« 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
thetrue way is my way

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #1 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
\\o
o//
\o/

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 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 ^^
Dieser Text wird unter jedem Beitrag angezeigt.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #3 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...

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #4 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
In the Future everyone will need OS-64!!!

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #5 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

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #6 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

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #7 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

C#ris

  • Beiträge: 47
    • Profil anzeigen
    • http://www.xerxys.org
Gespeichert
« Antwort #8 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:

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #9 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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #10 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.
Dieser Text wird unter jedem Beitrag angezeigt.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #11 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).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #12 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
thetrue way is my way

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #13 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.
Dieser Text wird unter jedem Beitrag angezeigt.

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #14 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!!! ;)
db 0x55AA

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #15 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?).
In the Future everyone will need OS-64!!!

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #16 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 ;)
thetrue way is my way

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 13. June 2006, 15:41 »
Zitat von: bitmaster
ein guter ASM Programmierer.

Kennst du einen?
Dieser Text wird unter jedem Beitrag angezeigt.

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #18 am: 13. June 2006, 15:44 »
Zitat von: PorkChicken
Zitat von: bitmaster
ein guter ASM Programmierer.

Kennst du einen?


der admin vieleicht? also roshl
thetrue way is my way

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #19 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.
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen