Hallöchen, gerade fange ich mit Programmieren an. Mit Hardware kenn ich mich schon ziemlich gut aus. Ich Überlege, ob ich mit Assembler anfangen soll, weil ich mal gehört habe, das Assembler-Programmierer eigentlich alle anderen Sprachen auch beherschen. Ist das eine gute Entscheidung? Könnt ihr mir ein Programm dafür empfehlen?
Als Programm würde ich die einen Assembler passend zu deinem MC empfehlen. :) Assembler ist keine sprache wie z.B C. Du sprichst auf unterster Ebene direkt mit der Hardware. Jede CPU Familie hat da ihre eigenen Befehle und Aufbau. Wen du z.B. ein Programm vom Admel auf einen PIC übertragen möchtest mußt du beide Prozessoren genau kennen. Bei assembler bist du mit jedem Bit, jedem Register und jedem Prozessortakt auf du und du. Du weist genau wieviel Takte welche Programmteil an Zeit verbraucht. Oft wichtig bei Zeitkritischen Anwendungen oder Interrupts. Berechnungen und Strings sind aber z.B in C deutlich einfacher zu machen.
Definiere dein Hardwarewissen. Weil von gut auskennen bist du bestimmt noch weit entfernt. Denke ich. Programmieren ist ein Mittel zum Zweck nicht mehr und nicht weniger. Was ist dein Ziel? Außer du machst es nach dem Motto, weil ich es nicht kann, darum will ich es lernen. Gruß, Matthias
Hallo Mattias, ja mit Hardware kenne ich aus. Das ist mein Hobby. Ich baue öfter Computer zusammen. Was ich mit Programmieren machen will? Mhh also ein Progamm schreiben, das dann auf einem Computer läuft. Ist das nicht immer so?
Panda schrieb: > Ich baue öfter > > Computer zusammen. > > > > Was ich mit Programmieren machen will? Mhh also ein Progamm schreiben, > > das dann auf einem Computer läuft. Ist das nicht immer so? Sehr vage! Könnte man jetzt so interpretieren: du möchstest einen PC in Assembler programmieren. Auch kein Problem, google einfach mal nach MASM32...viel Spaß!
Panda schrieb: > Hallo Mattias, > > ja mit Hardware kenne ich aus. Das ist mein Hobby. Ich baue öfter > > Computer zusammen. > > > > Was ich mit Programmieren machen will? Mhh also ein Progamm schreiben, > > das dann auf einem Computer läuft. Ist das nicht immer so? Mal fix nen PC zusammen schrauben ist n bisschen was anderes als wirkliche Hardwarekenntnisse und das verstehen selbiger. Aha. Ein Programm für einen PC. Wenn du etwas auf µC hättest machen wollen, hättest du das Tutorial dieser Seite durchmachen können.
Vielleicht gefällt Dir mein AVR Assembler Workshop: http://stefanfrings.de/avr_workshop/index.html Meiner Meinung nach helfen Assembler Kenntnisse kaum, um höhere Sprachen zu verstehen. Aber sie helfen, die Hardware besser zu verstehen. Bei der Programmierung von Mikrocontrollern in C kommt es ab und zu vor, dass der vom Compiler erzeugte Maschinencode nicht tut, was man beabsichtigt hatte. Ein Blick in den vom Compiler erzeugten Assembler Code kann da sehr helfen - vorausgesetzt man kann Assembler wenigstens lesen. Wenn Du noch keine Programmiersprache drauf hast, dann übe erstmal ein bisschen C auf dem PC. Danach kannst Du die Eigenarten der Mikrocontroller-Programmierung in C lernen. Erst danach würde ich anfangen, Assembler zu lernen und andere alternative Hochsprachen. Mein Workshop lässt vermuten, dass ich Assembler als Erstsprache Empfehle, aber inzwischen vertrete ich diese Meinung nicht mehr. PC's mit Betriebsystem (Windows, Linux) würde ich nicht in Assembler programmieren. Es ist nämlich nicht ohne weiteres möglich, am Betriebsystem vorbei auf die Hardware zuzugreifen (zu DOS Zeiten ging das noch). Egal was Du machen willst (eine Datei laden, etwas auf dem Bildschirm ausgeben, die Tastatur abfragen), dur musst dazu IMMER eine Schnittstellenfunktion des Betriebsystems aufrufen. Und diese Schnittstellen sind bei Linux und Windows immer in C geschrieben und in Form von Libraries (dll's) bereit gestellt. Man kann sie zwar auch aus Assembler Programmen heraus aufrufen, aber das ist kompliziert. Zudem ist die Hardware eines normalen PC inzwischen für Anfänger einfach zu komplex. PC's programmiert man in Hochsprachen (wie C++) - nur kleine Programmfragmente/Algorithmen realisiert man gelegentlich noch in Assembler.
Naja du kannst anscheinend noch nicht mal deinen Beitrag in die korrekte Kategorie einordnen. Willst aber hier großartig mit Assembler aufm PC anfangen und behauptest auch noch damit könnte man dann alle Hochsprachen erschlagen. Mein Tip: Wenn du programmieren willst, dann tu das mit den üblichen Sprachen auf dem PC (C, C++, Java, Visual C# usw. usw.). Damit bist du genug beschäftigt. Wenn du wirklich was drauf hättest, dann hättest du jetzt schon dein erstes Hello World Programm fertig und müsstest nicht erst in einem Forum aufschlagen. gruß cyblord
Assembler ist für einen Anfänger ein dickes Brett. Dazu bietet dir Assembler die Möglichkeit, dich selbst zu erschießen, ohne dass du Pistole oder Kugel erkennst. C ist ein gute Kompromiss zwischen Hardware-Nähe und Bequemlichkeit. Der Compiler sagt dir sogar ab und an, dass du die Pistole in der Hand hast (außer du gehörst zu den richtig Mutigen, die alle Warnungen abschalten). Als Einstieg in die Programmierung würde ich dir Pascal als Sprache und den PC als Ziel empfehlen. Pascal ist zwar total out und tot, dafür aber vom Lerneffekt her gut. Einen alten Borland Compiler gut es für lau. Die Sprache ist recht streng und erlaubt dir keinen Tanz auf dem Seil. Der integrierte Debugger hilft enorm bei der Fehlersuche. Pistolen sind nur mit enormen Klimmzügen zu beschaffen. Der spätere Umstieg auf C ist simpel.
Georg G. schrieb: > Als Einstieg in die Programmierung würde ich dir Pascal als Sprache und > den PC als Ziel empfehlen. Pascal ist zwar total out und tot, dafür aber > vom Lerneffekt her gut. Einen alten Borland Compiler gut es für lau. Die > Sprache ist recht streng und erlaubt dir keinen Tanz auf dem Seil. Der > integrierte Debugger hilft enorm bei der Fehlersuche. Pistolen sind nur > mit enormen Klimmzügen zu beschaffen. Der spätere Umstieg auf C ist > simpel. Die 90er haben angerufen, sie wollen ihre Programmiertipps wiederhaben... Mal ehrlich, heute noch jemandem Pascal zu empfehlen und ne alte Borland IDE, sag mal gehts noch? Moderne Sprachen UND moderne Werkzeuge. Das gehört zusammen. Was willst du denn mit dem antiken Kram? Visual Studio oder Eclipse oder QTBuilder und entsprechende moderne Sprachen bzw. deren neuere Auswüchse. Ordentliche Unterstützung für verteilte Anwendungen via Internet, Codeverwaltung (SVN und Co.), Multithreading DAS sind die Themen welche heute gefordert sind. Ein Anfänger sollte möglichst früh mit modernen Tools arbeiten. Hats hier nur Hobbyfrickler welche seit 15 Jahren nur 20 Zeilen Programme auf ihrem Pentium I tippern? gruß cyblord
cyblord ---- schrieb: > Moderne Sprachen UND moderne Werkzeuge. Es wird dich erschrecken: Auch Mechaniker, die später mit CNC Maschinen arbeiten, fangen mit Handsäge und Feile an. Was nutzt es dem Schüler, wenn er durch tagelangen Kampf mit der IDE demotiviert wird? KISS ist angesagt in der Grundausbildung. Was bei der von dir favorisierten Klicke-Bunti-Hackerei herauskommt, erleben wir täglich.
@Chris B.: Danke für den Tipp, MASM32 scheint das zu sein, wonach ist gesucht hab. @Stefan: Ein Freund hat mir gesagt, dass Atmega-Assembler wie Suppe Essen ohne Löffel ist. Außerdem wollte ich mich schon eher mit größeren Systemen beschäftigen. Dein Workshop scheint eher für Schüler zu sein. @cyblord: Warum so böse, auch du bist nicht als Programmierer geboren worden... Ist MASM32 auch ein "modernes TOol" ?
Panda schrieb: > Ein Freund hat mir gesagt, dass Atmega-Assembler wie Suppe > Essen ohne Löffel ist. Außerdem wollte ich mich schon eher mit größeren > Systemen beschäftigen. Dein Workshop scheint eher für Schüler zu sein. auf einem Atmega ist ASM noch sinnvoll und nachzuvollziehen. Beim PC würde ich sagen das ASM ist wie den Pool mit einen Kabel leer machen.
Hi ich musste es beruflich bedingt lernen. Nach einem Jahr war ich erst richtig in der lage alles mit den PICs zu machen. und jetzt 3 Jahre weiter behersche ich immernoch nur 60% der Möglickeiten von Assembler. Es ist anfangs echt hart und frustrierend. Heute binn ich froh das ich es kann, macht echt spass und die anderen Programmierer bei uns in der Firma sehen immer wieder wie mann auf einfachste weise mit nur 6 Befehlen schneller arbeiten kann als ein Javaprogramm auf ner Höllenmaschiene ;-) Fazit tue es dir an und beiß dich durch! Ps. ich habe nachrichtentechnik Studiert und hatte keinerlei ahnung von Programmieren davor.
Georg G. schrieb: > cyblord ---- schrieb: >> Moderne Sprachen UND moderne Werkzeuge. > > Es wird dich erschrecken: Auch Mechaniker, die später mit CNC Maschinen > arbeiten, fangen mit Handsäge und Feile an. Jaja immer derselbe Vergleich. Warum schickst du ihn dann nicht direkt zu den Lochkarten? Anforderungen verändern sich nunmal. Probleme von damals (begrenzte Speicher und Rechenleistung) sind verschwunden, viele neue Probleme sind aufgetaucht (Wartbarkeit, Erweiterbarkeit, Multithreading, Cloud, Sicherheit usw.). > Was bei der von dir favorisierten Klicke-Bunti-Hackerei herauskommt, > erleben wir täglich. Ja was denn? Vergleiche doch mal die Programme heute mit denen vor 15-20 Jahren. Und jetzt? Meinst du dahin will jemand zurück? Was willst du uns damit sagen? Du bist halt ein ewig gestriger der unqualifiziert über moderne Sachen mault. Früher war alles besser usw. Da weiß ich schon alles da gibts dann auch leider nichts zu Diskutieren weil gegen ne fundierte Meinung kommt man nicht an. Tip: Deine 90er Konsolenprogramme will niemand mehr. Klicki-Bunti ist schon wieder out. Heute wird nur noch gewischt und getouched. Mag dir nicht gefallen aber du kannst deshalb nicht an der Realität vorbeiprogrammieren und Anfängern den alten Kram von vorgestern aufbrummen. gruß cyblord
cyblord ---- schrieb: > Heute wird nur noch gewischt und getouched. Mhh ich dachte hier hätte ich mit Experten zu tun.
> Dein Workshop scheint eher für Schüler zu sein.
Ja genau.
Ich finde den Tipp mit Pascal gar nicht so verkehrt. Wie Georg schon
schrieb, kommt Borland Pascal mit einem sehr guten Debugger daher und
die Sprache verhindert, dass man sich selbst als Anfänger ungewollt
komplizierte Fallsctricke baut.
Aber: Das gleiche gilt auch für Java, nur ist Java derzeit viel
angesagter.
Deswegen ziehe Java dem alten Pascal vor, wenn man schon die Haken und
Ösen von C erstmal vermeiden will. Der Umstieg von Java nach C/C++
sollte leicht sein.
Ich habe in dieser Reihenfolge gelernt: Assembler, Basic, Pascal, C,
C++, Perl, Java. Aber ich würde es heute nicht nochmal so wiederholen.
Panda schrieb: > Ist MASM32 auch ein "modernes TOol" ? Er wurde mal (so wird unter der Hand berichtet) als Folterwerkzeug konzipiert. Du brauchst viel Leidensfähigkeit und Geduld.
Panda schrieb: > cyblord ---- schrieb: >> Heute wird nur noch gewischt und getouched. > > Mhh ich dachte hier hätte ich mit Experten zu tun. Ja gut an so Oberchecker wie dich kommt niemand ran... Was gefällt dir jetzt an dieser Aussage nicht? Was meinst du wohin die GUIs in Zukunft gehen? Schau dir den Absatz von Tablets vs. PC/Notebooks an, schau dir Win8 an. Ich bin davon auch nicht begeistert aber rate mal wie schon bald 95% aller Nutzer deine Programme bedienen wollen. gruß cyblord
Panda schrieb: > Hallo Mattias, > ja mit Hardware kenne ich aus. Das ist mein Hobby. Ich baue öfter > Computer zusammen. > > Was ich mit Programmieren machen will? Mhh also ein Progamm schreiben, > das dann auf einem Computer läuft. Ist das nicht immer so? Also besteht dein Hardwarewissen ehr daraus fertige Hardware passend aufeinander abzustimmen,damit ein maximales Ergebnis heraus kommt. Wenn dich ehr die Hochsprache interessiert, d.h. du möchtest ein Programm auf einen Rechner, wie auch immer der aussieht, mit einem Betriebsystem laufenlassen, dann ist C, so heißt es, ein recht guter Startpunkt, Es ist noch Hardware näher als die anderen Hochsprachen. Es kommt jetzt ganz drauf an was du machen willst, weil es gibt viele Sprachen die Ihre vorteile und Nachteile haben, und zum Teil nur für spezielle Fälle entwickelt wurden. Darum war auch meine Frage was dein Ziel ist. Besser formuliert was soll das Einsatz Gebiet sein. Z.B. Animation... Assembler ist eine der mächtigsten Sprachen, wie ich finde. Aber äußerst aufwendig. Das kann man als Problem ohne Lösung sehen oder als Hinternis über das man erst mal klettern muss. Die ganz wichtige Frage ist: Wie nahe möchtest du der Hardware kommen? Gib einfachmal in eine Suchmaschine ein: Texteditor mit Assembler Syntax. Dann muss du ausprobieren was dir ambesten gefällt. Gruß, Matthias
cyblord ---- schrieb: > Was gefällt dir jetzt an dieser Aussage nicht? Was meinst du wohin die > GUIs in Zukunft gehen? Schau dir den Absatz von Tablets vs. PC/Notebooks > an, schau dir Win8 an. Ich bin davon auch nicht begeistert aber rate mal > wie schon bald 95% aller Nutzer deine Programme bedienen wollen. Ich möchte mathematische Berechnungen auf einem Prozessor programmieren, und keine Handy-App machen. Windows mag ich auch nicht. @alle anderen: Vielen Dank für die zahlreichen Tipps. Ich denke die Entscheidung fällt zwischen C und Assembler. MASM32 ist ja leider nur für Windows, deshalb schaue ich mir gerade Linux-Assembler an. Ich glaube damit kann ich glücklich werden.
cyblord ---- schrieb: > Panda schrieb: >> cyblord ---- schrieb: >>> Heute wird nur noch gewischt und getouched. >> >> Mhh ich dachte hier hätte ich mit Experten zu tun. > > Ja gut an so Oberchecker wie dich kommt niemand ran... > > Was gefällt dir jetzt an dieser Aussage nicht? Was meinst du wohin die > GUIs in Zukunft gehen? Schau dir den Absatz von Tablets vs. PC/Notebooks > an, schau dir Win8 an. Ich bin davon auch nicht begeistert aber rate mal > wie schon bald 95% aller Nutzer deine Programme bedienen wollen. > > gruß cyblord @cyblord: Nur ist es so, das "wischen und tatschen" (also sprich: GUI zur Bedieneingabe und zur Visualisierung) nur ein (gegebenenfalls recht geringer) Teil einer EDV-Anwendung sind. Für z.B. ein Schachprogramm oder komplexe Steuersysteme (z.B. eine Motorsteuerung im Auto) sind Benutzeroberfläche und Assembler so ziemlich das unwichtigste was man dort dringend benötigt. Regelalgorithmen, Propagation, Backtracking etc. wollen erst mal "vom Grunde auf" verstanden und implementiert sein. Ob das nun über Register A oder Register B passiert ist ziemlich schnuppe.
Panda schrieb: > Ich möchte mathematische Berechnungen auf einem Prozessor programmieren, > und keine Handy-App machen. Windows mag ich auch nicht. Das ist doch schonmal ne Aussage. Dann wissen wir endlich auch mal WAS du eigentlich tun willst. Dafür eignet sich C schon auch. So wie eig. jede andere Sprache. Aber für mathematische Dinge eignen sich spezielle Sprachen besser, als da wären R, Mathlab, Octave z.B. Assembler hingegen eignet sich dafür überhaupt nicht. Allgemein würde ich davon auf dem PC die Finger lassen. Bringt dir nichts. @Buchsler: Das ist mir schon klar. Aber die Möglichkeiten der GUI hängen stark von der verwendeten Kombi aus Sprache und IDE ab. Die Logik im Hintergrund und die Datenstrukturen eher weniger. Das ordinäre "PC-Programm" lebt nunmal meist von der GUI. gruß cyblord
> Ich möchte mathematische Berechnungen auf einem Prozessor programmieren, > deshalb schaue ich mir gerade Linux-Assembler an. > Ich glaube damit kann ich glücklich werden. Ich glaub nich...
Mit Matlab habe ich schonmal gearbeitet, aber das ist mir zu langsam. Deshalb möchte ich jetzt selbst programmieren. GUIs sind doch schnickschnack, ich dachte Programmierer verwenden Konsolen!?
Panda schrieb: > Ich möchte mathematische Berechnungen auf einem Prozessor programmieren Und das ist in Assembler nicht so einfach, du hast da ja keine Varablentypen wie bei den "richtigen" Programiersprachen sondern einfasch nur Speicherzellen im RAM. Du maust da alles zu Fuß machen wie Übertrag, Vorzeichen, Kommastellen u.s.w. Winkelfunktionen sind auch recht lustig in Assembler.
Panda schrieb: > weil ich mal gehört habe, das Assembler-Programmierer eigentlich > alle anderen Sprachen auch beherschen. Was nicht so alles dahingelabert wird... > Ist das eine gute Entscheidung? Nein, eine Fehlinformation. Weil es den einen einzigen Assembler sowieso nicht gibt. Und Assembler-Programmierer sind "näher dran" an der Hardware, deshalb tun sie sich bei der harwarenahen (uC-)Programmierung leicht(er). Aber Assembler auf dem PC? Das ist Blödsinn. Selbst BIOS-Programmierer sehen zu, dass sie schnellstmöglich auf die Hochsprachenebene können. Panda schrieb: > Ich möchte mathematische Berechnungen auf einem Prozessor programmieren, > und keine Handy-App machen. Was denn genau? Denn gerade Mathematik ist doch am allereinfachsten mit einer Hochsprache zu bewältigen. Nur wenn es um schnelle EA-Aktionen und Zugriffe auf Register geht, dann siehst du mit Assembler Land. Aber z.B. eine Matrizenmultiplikation mit Double in Assembler zu machen ist wie einen gorßen Nagel mit der Faust reinzudreschen... > Windows mag ich auch nicht. Ach so, auf dem Niveau sind wir unterwegs... :-/
Panda schrieb: > Mit Matlab habe ich schonmal gearbeitet, aber das ist mir zu langsam. Was willst du denn Berechnen? Gehts da um Number-Crunching? Dann würde ich gleich entsprechende SDKs für Berechnungen auf modernen Grafikkarten empfehlen. Damit bekommt man ordentlich wumms. Das ganze wird dann in C/C++ programmiert. > Deshalb möchte ich jetzt selbst programmieren. GUIs sind doch > schnickschnack, ich dachte Programmierer verwenden Konsolen!? Weils ja auch DEN Programmierer gibt. Kommt drauf WAS du programmieren willst. gruß cyblord
Panda schrieb: > weil > ich mal gehört habe, das Assembler-Programmierer eigentlich alle anderen > Sprachen auch beherschen. Das ist ein etwa so, als wenn du das Alphabet lernst. Damit kannst du dann zwar theoretisch alle Wörter der Fremdsprachen schreiben, die dieses Alphabet nutzen, aber verstehen tust du nix. Wenn du auf dem PC anfangen willst, nimm Java. Da gibt es ausreichend Infos im Netz, auch auf Deutsch, die IDE läuft "out of the box", und auch sonst spricht erst einmal nichts dagegen. Oliver
Oliver schrieb: > auch sonst spricht erst einmal nichts dagegen. In Java wurden doch erst letztens viele Sicherheitslücken gefunden. Ich denke die Macher von Java werden Sicherheit doch auch als Ziel gehabt haben. Nun bin ich unsicher, was dies über die anderen Ziele von Java aussagt. @cyblord: Ja, dein Argument mit den Grafikkarten macht C wiederrum interessanter... @Lothar: Also ich denke das Assembler auf dem PC grundsätzlich KEIN Blödsinn ist. Was bringt dich zu dieser Aussage?
Panda schrieb: > Also ich denke das Assembler auf dem PC grundsätzlich KEIN > > Blödsinn ist. Was bringt dich zu dieser Aussage? Es ist kein Blödsinn, aber für das was du machen willst einfach nicht geeignet.
Panda schrieb: > Also ich denke das Assembler auf dem PC grundsätzlich KEIN > Blödsinn ist. weil es einfach die entwicklungszeit in keinen verhältnis zur Rechenzeit steht. Was hilft es dir wenn dein ASM Programm 10% schnell als ein C programm ist, du aber dafür 1Jahr länger daran programierst? Und was ist wenn du dein Programm speziell für I7, AMD, SSE, SSE2 optimieren willst? Bei C sagst du es einfach den compiler. bei ASM fängst du erstmal ein neu programmieren. ASM macht auf keinen CPUs (µC) schon sinn, weil man dort alles noch überschaubar ist. Auf einem PC gibt es komplett andere anforderungen. Da geht es teilweise um die reihenfolge der ASM befehle die dann eventuell von der CPU schneller verarbeitet werden. Soetwas wirst du dir nicht so schnell anlesen können. Lerne C oder meinetwegen auch JAVA und wenn dir das wirklich zu lansam ist. Dann kannst du dir überlegen den langsamen teil in ASM auszulagern. Aber doch bitte nicht das komplette programm ein ASM schreiben.
Panda schrieb: > @Lothar: Also ich denke das Assembler auf dem PC grundsätzlich KEIN > Blödsinn ist. Was bringt dich zu dieser Aussage? Doch ist es. Es ist totaler Blödsinn. Macht auch niemand ohne Not. Not ist es dann wenn du ein eigenes Betriebssystem oder hardwarenahe Treiber o.ä. programmieren willst. Aber warum probierst du es nicht einfach selbst aus? gruß cyblord
@cyblord: Ich denke, solange es Spezialisten gibt, die so etwas machen, wird es kein Blödsinn sein. Evtl. nicht ganz das richtige für meine Anwendung, aber das ist ja etwas anderes. Meine Anwendung ist ja auch kein Blödsinn ;)
Panda schrieb: > @Lothar: Also ich denke das Assembler auf dem PC grundsätzlich KEIN > Blödsinn ist. Was bringt dich zu dieser Aussage? Zeitlicher Aufwand ist rießig und es gibt keine Bibliotheken. Du müsstest für dich alles erst erschaffen. Das kann man vieleicht so vergleichen: Wenn du ein Haus baust nur aus Lehm und Wasser und das einzige Werkzeug sind deine Hände. Gruß Matthias
Panda schrieb: > @Peter: Ich bin verwirrt, ist die CPU nicht Teil eines PCs? jeder PC hat (mindestens) eine CPU. Aber nicht jeder CPU gehört zu einem PC.
Also mir macht x86/64 assembler coden auch Spass, allerdings dauert es erheblich länger als C++, unter anderem auch deswegen, weil die meisten APIs für C/C++ ausgelegt sind. Deshalb braucht man auch oft Disassembler wie IDA Pro um zu schauen, wie es in irgendwelchen C Programmen gemacht ist. C/C++ ist da um irgendwas schnell mit wenig Code hinzumurksen, was dann anständig aber nicht superschnell läuft und wo die meisten nicht-übergeeks den Quellcode noch halbwegs verstehen. Man ärgert sich über den Compiler, weil er dämliche, unverständliche Fehlermeldungen ausspuckt Asm ist da um irgenwas sehr schnell und minimalistisch klein zu machen, braucht allerdings Zeit und meist mehr code (ausser bei z.B. Bitoperationen, da ist ASM definitiv besser) und hat manchmal sehr gemeine Bugs. Nur wenige Leute können den Quellcode lesen. Man ärgert sich über sich selbst weil man dumme Bugs fabriziert und es der Assembler ohne Fehlermeldung assembliert. Tip: Fang mit FASM oder event. auch NASM an und lass den M$ Schrott MASM weg, das ist proprietärer Windowssschrott. FASM assembliert sich selbst und läuft auf fast allem was einen x86 Core hat.
Ich hatte vor vielen Jahren mal probiert einen TI DSP in Assembler zu programmieren. Das war eigendlich unmöglich. Bei jeden befehl musste man mit angeben welcher Registersatz/Akku/Statusregister u.s.w verwendet werden soll. Die Ergebnisse standen dann auch noch nicht beim nächsten Befehlziklus zur Verfügen sonden meist 8 bis 32 Befehle später. Wenn man da klassisch Programmieren wollte muste man etsprechend viele NOP einfügen. Optimal währe da mehrere Berechnungen ineinander zu verschachteln (daher auch die wählbaren Registersätze), aber zu Fuß verhaspelt man sich da unter Garantie. Bei einer Multikern CPU im PC mit Coprozessor, Piplines und was weis ich ist das bestimmt auch nicht besser.
Gibt es eine Faustformel, bei welchen Aufgaben CPUs schneller sind, und wann man besser Grafikkarten einsetzt?
Das Schweizer Taschenmesser für AVR, PIC, Z80, 8080, 8085 http://www.oshonsoft.com/index.html Damit kannst du auch mathematische Berechnungen durchführen (z.B. elliptische Integrale lösen).
Joe G. schrieb: > Das Schweizer Taschenmesser für AVR, PIC, Z80, 8080, 8085 > http://www.oshonsoft.com/index.html > > Damit kannst du auch mathematische Berechnungen durchführen (z.B. > elliptische Integrale lösen). Er will PC...
Joe G. schrieb: > Dann sehe ich das Problem nicht, VI anwerfen, loslegen... er kennt VI nicht, er kann bis jetzt nur Hardware
Joe G. schrieb: > cyblord ---- schrieb: >> Er will PC... > > Dann sehe ich das Problem nicht, VI anwerfen, loslegen... So läuft das heute nicht mehr. Ich schrieb ja oben schon, er könnte schon lange losgelegt haben. Aber da muss man erstmal über x86 Assembler philosophieren und außerdem ist ihm eine ordinäre x86 CPU vielleicht zu langsam.... gruß cyblrod
Nur weil ich nicht richtig programmieren kann, heisst das nicht, dass ich keinen Editor bedienen kann...zumindest kenne ich die Definitionen von PC und CPU.
@Jürgen D. Schade das es nicht sowas wie ein Out of Order Assembler gibt, bei welchem man zwar in Assembler programmiert und dementsprechend die Vorteile der spezifischen ASM Befehle hat, aber der Assembler die Befehle und Register für jeden x86 CPU Typ so umsortiert, das es keine Pipeline locks gibt. Ich weiss, das es die CPU zu einem gewissen Teil mit Out of Order execution und Register renaming selbst macht, denke aber das ein gut gemachter Assembler das wesentlich besser könnte, als es die CPU oder es Menschen können. Gab zwar mit dem Itanium irgendwelche Ansätze in die Richtung, hat sich aber meines Wissens nie richtig etabliert.
@cyblord: Willst du weiter schmollen, oder hast du zu meiner Frage über CPU vs. Grafikkarte vlt. noch einen Tip?
Panda schrieb: > Nur weil ich nicht richtig programmieren kann, heisst das nicht, dass > ich keinen Editor bedienen kann...zumindest kenne ich die Definitionen > von PC und CPU. Unter Linux hast du den GCC doch wahrscheinlich eh schon drauf. Dann nimm doch einen Editor deiner Wahl, dieses Online-Buch: http://openbook.galileocomputing.de/c_von_a_bis_z/ und leg los mit C. Damit kannst erstmal relativ schnelle Berechnungen ausführen. gruß cyblord
Panda schrieb: > @cyblord: Willst du weiter schmollen, oder hast du zu meiner Frage über > CPU vs. Grafikkarte vlt. noch einen Tip? Konzentriere dich doch einfach mal auf das Wesentliche. Lasse allen Schnickschnack beiseite und programmiere dein erstes "Hello World" in Assembler. Erst dann kommt das nächste Problem an die Reihe.
Panda schrieb: > @cyblord: Willst du weiter schmollen, oder hast du zu meiner Frage über > CPU vs. Grafikkarte vlt. noch einen Tip? Wenn du damit rausrückst welches Passwort du knacken willst, dann kann man dir evt. die richtige Hardware empfehlen. Oder gehts um Bitcoins?
@cyblord: Nein, ich will eine simulation durchführen, wofür ich viele Gleichungen lösen muss. Sehr sehr viele, bis zu dritter Ordnung.
@Panada Die Sicherheitprobleme sind nicht in Java, sondern in dem Java Plugin. Das ist ein himmelweiter Unterschied. Java kann auf alle Dateien zugreifen und alle Windows API Funktionen aufrufen. Das ist Sinn der Sache, genau wie in allen anderen Programmiersprachen. Nur will man so viele Freiheiten nicht den Programmen erlauben, die man unfreiwillig in Webseiten eingebettet geladen hat. Dafür kann Java aber nix, diese Schutzfunktionen, die nicht so gut sind, wie sie sein sollten, sind Bestandteil des Java Plugins. Ansonsten müsstest Du ALLE gewöhnlichen Programmiersprachen verbannen. Aber ohne Programmiersprache kannst Du auch keine Programme schreiben. Und wo due gerade so schön Assembler empfiehlst: Sag uns doch mal bitte, welche Security relevanten Features Assembler bietet. Da bin ich aber gespannt!
Ich sags mal so (bezugnehmend auf den Zwist zur Grundausbildung, bei dem ich definitiv auf der Seite der erst gehen, dann Laufen Fraktion bin) Wenn ich drauf los programmiere und ich auf Grund mangelnden Wissens nicht weiß, wo und wie mein Programm Zeit versenkt, kann ich jede Sprache und 5 Grafikkarten benutzen - es kommt trotzdem Mist raus. Gerade bei Software in Richtung Simulationen und number crunching, wo es eben merklich auf die Performance ankommt sollte man Basiswissen haben. Die gui fürs Handy kann man sicher schnell und modern per Flash machen.
Panda schrieb: > Nein, ich will eine simulation durchführen, wofür ich viele > Gleichungen lösen muss. Sehr sehr viele, bis zu dritter Ordnung. In Assembler? Der 1. April ist doch schon vorbei und Himmelfahrt erst morgen ?
Stefan Frings schrieb: > Die Sicherheitprobleme sind nicht in Java, sondern in dem Java Plugin. > Das ist ein himmelweiter Unterschied. unsinn, die schutzfunktionen sind in JAVA. Sie werden nur von den Plugin aktivert. Und es gibt methoden in den Reflextions wo man die Herkunft von Klassen änder werde kann - das ist der BUG und dieser ist im JAVA selber und nicht im Plugin.
Panda schrieb: > @cyblord: Nein, ich will eine simulation durchführen, wofür ich viele > Gleichungen lösen muss. Sehr sehr viele, bis zu dritter Ordnung. Dann hängt die Geschwindigkeit nicht wenig davon ab, wie geschickt du das implementierst. Für Gleichungssysteme sollte es eigentlich auch einiges an libs geben welche da vielleicht helfen. Die solltest du dann auch nutzen. Für massive parallelisierung sind Grakas nicht schlecht, da du sehr viele Mini-CPUs (auch Shader genannt) hast und das ganze Ding auf Parallelität ausgelegt ist. Genau für solche "Supercomputing" Dinge wie Simulationen sind die SDKs der Graka-Hersteller ja gedacht. Ich würde da an deiner Stelle mal deren Dokus durcharbeiten und mit den SDKs experimentieren. Aber meist geht das nur mit einigen wenigen hochpreisigen Grakas. Trotzdem musst du vorher programmieren können. > Die gui fürs Handy kann man sicher schnell und modern per Flash machen. Wann hast du die letzte App gemacht? Das läuft in Java (Android) oder Objective-C (iOS). gruß cyblord
@cyblord: Danke für die Aufklärung. Ich denke, ich suche jetzt mal nach Grafikkarten-Libraries für C++. Was hier rumliegt ist eine Nvidia GTX 680.
Woher weißt du denn überhaupt dass ein normaler PC dafür zu langsam ist? @der Gast: Ansonsten stimme ich dir übrigens zu.
Panda schrieb: > Habe einen Teil mit Matlab versucht, das hat mich geschockt. Das kann man aber IMO nicht vergleichen. Wird Matlab Code überhaupt kompiliert oder evt. sogar nur interpretiert? Ich würde es nochmal mit reinem C normal auf nem schnellen PC testen. Da kannst du auch Multicore Programmieren und bei nem 8 Core CPU das ganze dann auch ziemlich beschleunigen. Erfordert aber natürlich einiges an Wissen udn Erfahrung. Mal schnell kann man sowas nicht machen. gruß cyblord
Wieso suchst du c++ libraries wenn du die Sprache nicht mal ausgewählt hast... Die zu lösenden linearen Gleichungen lassen mich auch stutzen so wie du es geschrieben hast. Bei mir hat mein eingebauter Sensor Vollausschlag. Bist du ein Troll oder eher Richtung Schüler / Selbstüberschätzung?
Nein, bin schon lang kein Schüler mehr. Scheinbar kann man mit C++ Grafikkarten programmieren, also entscheide ich mich dafür. Ich glaube Assembler ist mächtiger, aber scheinbar ist es für mein Problem ja weniger geeignet. Danke an alle...
Panda schrieb: > Scheinbar kann man mit C++ Grafikkarten programmieren, also entscheide > ich mich dafür. halte uns bitte auf dem laufenden, für jemand der gerade anfängt zu programmieren gleich mit einzusteigen ist schon seehr sportlich.
Ja, wird schon klappen. Die Mehrheit der Forenmitglieder hier scheint ja recht pessimistisch eingestellt zu sein, um nicht zu sagen zickig. Freut euch, die Sonne scheint.
> Bei mir hat mein eingebauter Sensor Vollausschlag. Bist du ein Troll > oder eher Richtung Schüler / Selbstüberschätzung? Glaube nicht, dass er ein Troll ist. Ich vermute mal er ist mehr von der Fraktion "Ich möchte jetzt meine eigenen Computerspiele programmieren. So mit 3D und so. Damit ich die nicht mehr kaufen muss. Bitte helft mir!" Abteilung: Null Plan bei totaler Selbstüberschätzung. PS: ist nicht böse gemeint. ;) Die überschaubare Löung deiner Probleme: C Die Frustrationsgrenze für dich: C++ Die unüberwindbare Hürde für dich: ASM letzteres weil nicht geeignet für: Programmieranfänger (1 Mannjahr lernen ist bei Assembler GAR NICHTS) Achja, früher in Zeiten des C64 war das alles mal anders. Da waren die BS und Prozzis auch noch überschaubar. Wenn du mit C warm geworden bist kannst du auch Assembler hinzunehmen (wirst du aber dann in aller Regel nicht mehr wollenbrauchen) ;)
Hallo, die Arbeitsgruppen, die sich in der theoretischen Physik mit Simulationen beschäftigen, programmieren mit C. Zudem wird auch nur eher in Ausnahmefällen die Rechenleistung von Grafikkarten abgerufen. Das meiste läuft auf ganz normalen x86er CPUs. Für C gibt es leistungsfähige, mathematische Bibliotheken. Unter Linux fällt mir da spontan die GSL Bibliothek ein. Um hohe Rechenleistungen zu nutzten muss der Berechnungsprozess auch parallelisierbar sein, was dann auch bei der Programmierung umgesetzt werden muss. Dabei kommt es oft vor, das z.B. eine Berechnung mit mehreren unterschiedlichen Parametersätzen durchgeführt werden muss. Für solche Probleme ist die "Parallelisierung" auf einem Standard Multicoreprozessor angenehm, weil man das "Singlecoreprogramm" einfach mehrfach mit unterschiedlichen Startparametern laufen lassen kann, ohne Zusatzaufwand beim Programmieren zu haben. Wenn die Rechenleistung wirklich so knapp ist, dann liegt das auch oft eher an der Funktion des Programms und weniger an der Programmiersprache. Ich selbst hatte bei einem meiner frühen Projekte ein Programm geschrieben, das geschätzt für die komplette Berechnung ca. 150h benötigt hätte. Durch die Verbesserung des Algorithmus lies sich das ganze am Ende auf ca. 5 Sekunden Berechnungszeit drücken. Und das nur durch einfügen von geschickteren Abbruchbedingungen und Ausnutzung von Symetrien. Von daher meine Empfehlung, lern C und achte beim Programmieren darauf, ein gutes Konzept (erstellt mit Papier und Bleistift) zu haben, das bringt mehr als die schnelleste Sprache oder die leistungsfähigste Hardware und lässt sich bei Folgeprojekten oft hervorragend wiederverwenden. Gruß Kai
Da ist ja wieder mal ganz großes Damentennis hier. Panda. Kauf dir einen Kernighan & Ritchie, installier dir einen freien C-Compiler und fang an den K&R von vorne durchzuarbeiten und die dort angegebenen Übungen zu machen. Bis du damit durch bist, fällt bereits der erste Schnee. Und DANN kann man weitersehen! Vor deinem geisteigen Auge zieht bereits ein Spitzenplatz bei der Tour de France vorbei, garniert mit einigen gelben Trikots ... dabei kannst du noch nicht mal Dreiradfahren.
Mathematische Berechnungen kann man gut beschleunigen wenn man die SIMD (z.B. SSE, SSE2 usw.) Einheiten der CPU benutzt. Dafür gibt es auch gute Werkzeuge wie Intels C Compiler. Mit der Hand geht das natürlich noch besser aber da braucht man schon ... Durchhaltevermögen ;) Ansonsten macht man Mathematische Berechnungen mit der FPU. Diese ist aber acuh ... Gewöhnungsbedürftig. Also für Fließkomma und trigonometrische Funktionen nimmt man C (bzw. C++). Der Optimizer macht den Rest. Ich bin ein Assembler Fan (mach ich schon seit ich 13 bin (68k)). Naja es ist gut Assembler zu können, denn so lernst du erst, wie ein Computer wirklich funktioniert. Aber FPU in Assembler ... Sinnfrei
C, ASM,.... ist doch erst mal alles egal. Erst mal überhaupt was programmieren. Möglichst einfach um nicht gleich den Spaß zu verliehen. Da ist Pascal, Basic oder irgendeine Sciptsprache wie PHP gar nicht schlecht. Wenn das dann klappt (hello world Funktionen Fallunterscheidungen /...) dann erst mal erlesen welche Programmierparadigmen und Datenstrukturen es gibt. Wenn dann noch der Wunsch existiert weiter zu machen: Glückwunsch! Die Wahl der Sprache hat sich bis hier hin schon ganz von allein deutlich eingeschränkt ;-)
Tom B. schrieb: > C, ASM,.... ist doch erst mal alles egal. Erst mal überhaupt was > programmieren. Genau meine Meinung. Versuch's doch erst mal mit einer Excel-Tabelle.
Mit Assembler bist Du Gott. Nichts anderes kann einen Rechner so schön ins Nirwana schicken. Effektiv ist es natürlich nicht ;) Können sollte man Assembler, man bekommt ein Gefühl für die Maschine (das gibt Dir keine andere Programmiersprache).
Hi Nun habt ihr euch wirklich mal wieder als Glaubensgemeinschaft geoutet. Auch wenn ich Aussagen unterstütze: "mit Assembler arbeitet man direkt an der Hardware" und selber auch Assembler bei µC vorziehe, auf einem PC Assembler zu programmieren ist so ziemlich der letzte Weg einer Lösung für ein Problem. Deshalb macht es mir immer wieder Spaß, solchen Diskussionen zu folgen. Ganz klar: wer auf einem PC Assembler schreibt ist entweder ein Masochist oder ein Spezialist für ganz besondere Aufgaben. Ein Beispiel: Ich hab mal noch unter Win3.11 einen Lagerverwalter programmiert, der eine Maschine (Lager) organisieren musste. Die Maschine gab die Anfrage "Wohin-Woher" und erwartete in einer kurzen Zeit eine Antwort. Nun war es aber auch vorgesehen, das Ausdrucke vom Lagerbestand von den Bedienern angefordert wurden und wer noch diese alten Betriebssysteme kennt, weiß auch, das Drucken den PC erst einmal beschäftigt hat. Da ging nix anderes. Andere Funktionen "z.b. Dateien laden, speichern" ebenfalls. Also musste für diesen Fall der Drucker im Interrupt betrieben werden. Da hab ich dann mal auf einem PC mit Assembler "nachgeholfen". Aber nur für die Druckroutine. Nicht den gesamten "Lagerverwalter". Heut ist so etwas äußerst selten. Für jemanden, der programmieren lernen möchte, und das auf einem PC, da muss ich sagen, nimm eine Hochsprache und verstehe erst einmal das Wort "programmieren". Nimm dein Ziel und setz es in Basic, Pascal oder C oder womit auch immer um. Dann kommen die eigentlichen Probleme und dann geht es ans Aufgaben lösen. An dieser Stelle wirst du froh sein, wenn dich die Programmiersprache mit Funktionen und Routinen unterstützt und du nicht alles per Hand in irgendeinem Register zusammenschrauben musst. Wer programmieren kann, der fragt nicht nach der Sprache. Es schaut nur, was ist am besten geeignet. VB, Visual C, C++, Pascal, Delphi, Java, Assembler: alles nur Sprachen, aber keine Programmierung. Und: nicht wenn du eine Sprache davon kannst, kannst du auch andere, aber kannst du programmieren, dann lernst du auch die geeignete Sprache dazu relativ leicht. Dabei ist es völlig unerheblich, ob heutzutage Programmierer vor einer Konsole sitzen oder mit "Wisch und Weg" eine Aufgabe lösen. Gruß oldmax
Ich glaube nicht dass die Sprache den wirklich entscheidenden Teil der Geschwindigkeit ausmacht. Viel mehr solltest du dein Wissen in Algorithmen und Komplexitätstheorie vertiefen. Die Geschwindigkeitssteigung dürfte in den meisten Fällen viel höher ausfallen. Natürlich ist es so, dass wenn du von Seiten der Algorithmen alles ausgereizt hast, mit einer spezialisierten Sprache noch etwas mehr Performance herausholen kannst. Da du an Mathematischen Problemen interessiert bist, solltest du dir evtl. die http://www.amazon.de/Numerical-Recipes-3rd-Edition-Scientific/dp/0521880688 anschauen. Wenn du wirklich produktiv entwickeln willst, wirst du mit Assembler nicht wirklich weit kommen. Jedes größere Software System wird dadurch viel zu unübersichtlich. Nicht ohne Grund wurden mannigfaltige Methoden zur Strukturierung von Software erfunden. Selbst bei der Betriebssystem Implementierung wechselt man so schnell es nur geht auf eine Hochsprache.
Assembler ist halt am nächsten an der Hardware. Wenn das Assembler Programm perfekt ist, dann kann es nur schneller oder gleich schnell sein, wie die beste höhere Programmiersprache. Aber dazu muss man es auch perfekt beherrschen - was gerade bei einem Anfänger nicht zu erwarten ist. Für Anfänger ist es erstmal wichtig, Methodeik und Algorithmen zu lernen (egal in welcher Programmiersprache). Wer z.B. zwei Listen mit verschachtelten for-Schleifen abgleicht, dem kann auch Assembler nicht helfen. Und doch wird wohl jeder Anfänger es zuerst so versuchen. Dann merkt er, dass es bei großen Listen unerträglich lange dauert und kommt so zu besseren Lösungsansätzen, z.B. mit Hash Tabellen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.