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
> 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.
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:> 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.
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?
@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
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.