Autor Thema: C oder ASM  (Gelesen 20028 mal)

nooooooooos

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

Termite

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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #22 am: 13. June 2006, 17:05 »
@PorkChicken: jo
In the Future everyone will need OS-64!!!

bitmaster

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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 13. June 2006, 17:50 »
und nachts ist es kälter als draussen
Dieser Text wird unter jedem Beitrag angezeigt.

bitmaster

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

Jidder

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

kevin

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

Termite

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

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #29 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.
db 0x55AA

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #30 am: 13. June 2006, 21:24 »
naja ich benutz auch asm weil ich das besser kann als c^^

nooooooooos

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

bitmaster

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

hannibal

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

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #34 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...)

bitmaster

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

C#ris

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

Termite

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

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #38 am: 14. June 2006, 16:00 »
OK nochmal:

DefinitionMS - DefinitionLinux = In Java geschrieber Teil meines OS

Svenska

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

 

Einloggen