Forum: Offtopic Assembler wieder auf dem Weg nach vorn


von Carl D. (jcw2)


Lesenswert?

Moby A. schrieb:
>> jeder einzelne hat in seinem Programmiererleben mehr Codezeilen in
>> Assembler geschrieben, als du jemals in deinem Leben schreiben wirst.
>
> Du bist ja gut informiert.

Bübchen, das umfangreichste Assembler-Programm, das ich je erweitern 
durfte, hat mir das Rechenzentrum als ASM-Liste auf Einzelblatt 
ausgedruckt. Das wurde dann in zwei dieser üblichen DruckerPapierkartons 
angeliefert. Beide randvoll. Da sind üblicherweise 5 Pakete a 500 Blatt 
drin. Falls das einen Überlauf deiner 8-Bit-ALU gibt: 5 Tausend Seite. 
Und die CPU, die das ausführte, darf dir nicht auf Fuß fallen, sonst ist 
der nicht nur ab, sondern der ganze Kerl ist Brei. Passiert ist das 9 
Flugstunden Richtung Süden. Erzählt mir also mehr über den ATtiny13, da 
kann ich sicher noch was lernen!

Diese Maschine hat im übrigen vieles gemeinsam mit ARM. Man kann die 
locker in ASM Programmieren, wenn man's kann und wenn man gerade seinen 
Compiler verlegt hat. Der macht das nämlich genau so gut!

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Moby A. schrieb:
> Jörg W. schrieb:
>> So ein kleiner Cortex-M0+ ist keineswegs komplexer als ein Xmega
>
> Warum tischt Du mir hier Märchen auf?

Jetzt wirst du einfach nur noch unverschämt.

> Noch dazu in jener unredlichen
> Form, keine konkrete Implementierung zu nennen?

Wenn dir das hilft, dann guck' dir einen SAMD20 von Atmel an, und
vergleiche ihn mit einem XmegaA.  Der SAMD20 ist da von der
Peripherie her eher noch überschaubarer als der XmegaA.  Dass man
sich mit der Grundinitialisierung des Taktsystems rumschlagen muss,
ist beim Xmega auch schon der Fall (OK, wenn man nicht gerade mit
dem Standard-Takt nach Reset arbeiten will, aber das geht natürlich
bei beiden).  Das Einzige, was beim Cortex grundlegend anders ist
als bei AVR (einschließlich Xmega): nach Reset werden nur die
wichtigsten Peripheriebausteine mit Takt versorgt, alle anderen
schlafen.  Beim AVR muss man den Takt für die Baugruppen, die man
nicht braucht, explizit abschalten, wenn man Energie sparen will.

> Schau mal in den
> Projekten nach, wieviele Asm-Programme es dort für Xmega und wieviele
> für es für ARM einschließlich M0+ gibt...

Welche Relevanz sollte das haben?

Es ging um die Komplexität des Controllers und seiner Peripherie.

Die ARM-CPU hat übrigens gerade mal 56 Befehle, bei Xmega sind es 142.

> Du wirst doch nicht ernsthaft
> behaupten Asm wäre die Sprache der Wahl bei diesen 32-Bittern ;-(

Nein, das habe ich nicht behauptet.  Warum auch?  Außer für dich
ist es auch bei heutigen 8-Bittern für niemanden die Sprache der
Wahl.

> [Xmega …], die Ansprache der Peripherie nicht
> grundverschieden.

Autsch.  Jetzt glaube ich dir nicht mehr, dass du überhaupt jemals
was mit einem Xmega gemacht hast.

Ja, der Befehlssatz ist nur wenig mehr als der der MegaAVRs.  Aber
die Peripherie ist sowas von grundverschieden, dass du dich mit
obiger Aussage einfach nur blamierst.  Ehrlich gesagt, mit fällt
auf Anhieb kein einziges Peripheral ein, das auch nur annähernd so
bedient werden würde wie im MegaAVR.

OK, da du (s. o.) sowieso unflätig wirst, genug für mich hier.

von P. M. (o-o)


Lesenswert?

Moby A. schrieb:
> Umgekehrt wurde der Xmega von Atmel sicher für C optimiert.

Das gilt bereits für die alten AVRs. Deshalb auch die vielen Registern, 
die ein Compiler weit besser zuordnen kann, als ein Mensch. Ausser Moby 
natürlich ;-)

Moby A. schrieb:
> Wer sich 'blöd' fühlt muß das mit sich ausmachen.
> Ich würde niemals so persönlich werden, auch wenn sich selbst 'Große
> Jungs' hier desöfteren unbeherrscht wie kleine Kinder aufführen denen
> das Spielzeug streitig gemacht wird ;-)

Dafür repetierst du bestimmt zum zwanzigsten Mal deine Meinung, ohne ein 
einziges Beispiel zu zeigen, wo bei einer einfachen Aufgabe Assembler 
gegenüber C einen klaren Vorteil bringt. Bin schon gespannt, wie du dich 
diesmal aus der Forderung nach einem konkreten Beispiel windest.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Autsch.  Jetzt glaube ich dir nicht mehr, dass du überhaupt jemals
> was mit einem Xmega gemacht hast.

Das brauchst Du nicht. Es reicht, daß ich das weiß ;-)

> Ehrlich gesagt, mit fällt
> auf Anhieb kein einziges Peripheral ein, das auch nur annähernd so
> bedient werden würde wie im MegaAVR.

Mir dafür genügend. Die (bekannten) Steuerbits sind etwas anders 
verteilt, ein paar mehr Möglichkeiten gibt es, das wars auch schon.

> OK, da du (s. o.) sowieso unflätig wirst, genug für mich hier.

Au weia. Ist aber auch ärgerlich, diese permanente Widerrede.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

P. M. schrieb:
> Dafür repetierst du bestimmt zum zwanzigsten Mal deine Meinung, ohne ein
> einziges Beispiel zu zeigen, wo bei einer einfachen Aufgabe Assembler
> gegenüber C einen klaren Vorteil bringt. Bin schon gespannt, wie du dich
> diesmal aus der Forderung nach einem konkreten Beispiel windest.

Da "repetiere" ich doch glatt schon wieder:
Schau Dir mein Asm-Projekt an und zeig mir eine C-Lösung die mit weniger 
Ressourcen auskommt. Dann wird der klare Asm Vorteil für Dich vielleicht 
etwas klarer ;-)

P. M. schrieb:
> Moby A. schrieb:
>> Umgekehrt wurde der Xmega von Atmel sicher für C optimiert.
>
> Das gilt bereits für die alten AVRs. Deshalb auch die vielen Registern,
> die ein Compiler weit besser zuordnen kann, als ein Mensch. Ausser Moby
> natürlich ;-)

Ach woher denn. Für Asm gibts hier Projekte wie Sand am Meer, sicher 
auch von besseren Programmierern als mich. Der Moby ist weißgott nichts 
besonderes und hat allein die Vorzüge von Asm entdeckt.

: Bearbeitet durch User
von Guido B. (guido-b)


Lesenswert?

Naja, da es hier um Moby AVR gegen den Rest der Welt geht, sage ich
auch noch was dazu.

Klar sind die Compiler heute sehr sehr gut. Auch manche Controller
sind mit einem minimalem Befehlssatz ausgerüstet, der durch einen
Compiler leicht eingesetzt werden kann (z.B. PIC). Die meisten
Controller, darunter auch RISC-Typen, bieten aber einen so großen
Befehlsumfang, dass ein Compiler viele dieser Opcodes ignorieren
muss, da sonst innerhalb des Compiler zu viele Fallunterscheidungen
nötig werden. Da ist mit handgestricktem Assemblercode also durchaus
noch etwas optimierbar. Ob das angesichts der Rechenleistung
halbwegs moderner Controller relevant ist, ist vom Einzelfall abhängig.

von P. M. (o-o)


Lesenswert?

Guido B. schrieb:
> Die meisten
> Controller, darunter auch RISC-Typen, bieten aber einen so großen
> Befehlsumfang, dass ein Compiler viele dieser Opcodes ignorieren
> muss, da sonst innerhalb des Compiler zu viele Fallunterscheidungen
> nötig werden. Da ist mit handgestricktem Assemblercode also durchaus
> noch etwas optimierbar.

Mit verlaub, aber bevor du das mit Quellen belegen kannst, glaube ich da 
kein Wort. Opcodes zu ignorieren wegen "Fallunterscheidungen" im 
Compiler wäre dermassen unsinnig.

von Sven B. (scummos)


Lesenswert?

Diese Diskussion ist ungefähr genauso unsinnig wie "Python ist nutzlos, 
C ist viel schneller". Ja, stimmt. Nur dass mir für 99 von 100 
Programmen die ich schreibe die Performance völlig egal ist, weil das 
Ganze schon in Python nur 0.3 Sekunden dauert. Ja, in C wären es 
vielleicht nur 0.01 Sekunden, aber wen interessiert's? Mich nicht. Dafür 
brauche ich in C die zehnfache Zeit um's aufzuschreiben.

Nur dass bei dieser dämlichen C vs ASM-Debatte der 
Performance-Unterschied nichtmal 10000% ist wie bei Python vs C sondern 
vielleicht 10%. Und das auch nur, wenn man sich sehr geschickt anstellt 
in ASM.
Nobody cares. Deal with it.

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

@Sven
Du hast wohl eher PC-Programme im Sinn ?!
Performance ist ja nur der eine Aspekt.
Der andere wesentliche ist der Platzbedarf.

> Dafür
> brauche ich in C die zehnfache Zeit um's aufzuschreiben.

Diese Äußerlichkeiten zu erwähnen habe ich mich hier noch gar nicht 
getraut. Da finde ich Asm, garniert mit entsprechenden Kommentaren zu 
Funktion und Schnittstellen nämlich auch wesentlich kompakter und 
übersichtlicher. Ehrlich. Aber lassen wir das, denn dieses Empfinden ist 
höchst subjektiv und die Meinungen geteilt.

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Der andere wesentliche ist der Platzbedarf.

Dieses Argument gilt schon mindestens 20 Jahre nicht mehr und es für 
heutige Hardware vorzubringen, ist einfach nur lächerlich.

von Sven B. (scummos)


Lesenswert?

Moby A. schrieb:
> @Sven
> Du hast wohl eher PC-Programme im Sinn ?!
> Performance ist ja nur der eine Aspekt.
> Der andere wesentliche ist der Platzbedarf.

Also mein uC für 8 Euro hat 1 MB Flash und davon hab ich vielleicht 
100kB belegt.

Moby A. schrieb:
> Diese Äußerlichkeiten zu erwähnen habe ich mich hier noch gar nicht
> getraut. Da finde ich Asm, garniert mit entsprechenden Kommentaren zu
> Funktion und Schnittstellen nämlich auch wesentlich kompakter und
> übersichtlicher. Ehrlich. Aber lassen wir das, denn dieses Empfinden ist
> höchst subjektiv und die Meinungen geteilt.

Schon, aber irgendwie sind 99.x% der Leute (auch in diesem Thread btw) 
zufällig der Meinung dass C leichter zu lesen ist.
Hey, wenn du gern ASM schreibst, tu's doch einfach. Ich hab damit 
überhaupt kein Problem. Aber dieses rumgestreite, dass das das beste sei 
seit geschnitten Brot und alle Leute die C benutzen sind nur verblendet 
und es ginge besser ... was soll das denn. Das ist einfach bloß albern.

: Bearbeitet durch User
von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Mein Brötchengeber würde mich rauswerfen, wenn ich jetzt mit Assembler 
programmieren würde. So von wegen effizientes Entwickeln.

Zu Recht würde er das.

;-)

von Michael K. (Gast)


Lesenswert?

>Assembler wieder auf dem Weg nach vorn

Syphilis weiter auf dem Vormarsch
http://www.pharmazeutische-zeitung.de/index.php?id=49611

Danke, aber ich muß nicht jeden Trend mitmachen ;-)

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Michael K. schrieb:
>>Assembler wieder auf dem Weg nach vorn
>
> Syphilis weiter auf dem Vormarsch
> http://www.pharmazeutische-zeitung.de/index.php?id=49611
>
> Danke, aber ich muß nicht jeden Trend mitmachen ;-)

Muahaha... jetzt hab ich Kaffeeflecken auf der Tastatur... Best answer 
ever...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Warum sich viele von Moby so angestachelt fühlen, liegt doch nur an 
folgender Tatsache:

  Moby verallgemeinert bewusst und provozierend seine Mini-Projekte,
  für die tatsächlich Assembler reicht, derart, dass er sagt:

  "Die ganze Welt kommt mit Mini-Programmen aus, Assembler reicht"

Und genau hier liegt der Trugschluss. Moby kennt nur seine 
Mini-Programme, hat aber von Elektronik-Projekten in der Praxis (außer 
seinen eigenen) überhaupt keine Ahnung. Da, wo ein ATmega reicht, 
vernetzt er hunderte von ATTinys und sagt: "ATTiny reicht, Assmbler 
reicht". Warum? Weil er es nicht besser kann!

Kann man zwar so machen, ist aber ineffizient. In C macht mans mit dem 
nächstgrößeren Prozessor in einem zehntel der Zeit. Da wo Moby viele 
Jahre an seinem Smart-Home-System rumbastelt, machts ein anderer in ein 
paar Wochen fertig.

Die eigentliche Frechheit von Moby ist, von seinem Mikrokosmos auf den 
Rest der Welt zu schließen. Das ist sein großer Irrtum. Und es kommt 
absolut arrogant rüber.

Wenn alle vor 20 Jahren auf Moby gehört hätten, dann stände bei uns kein 
PC unterm Tisch, sondern heute noch ein 8-Bit-Prozessor mit 
angeflanschter HEX-Tastatur. Das wiederum zeigt, dass Programmieren in 
Assembler eine Sackgasse ist.

Soll Moby ruhig noch 20 Jahre mit ATTinys rummachen. Aber er soll 
einfach dabei die Füße stillhalten.

von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> P. M. schrieb:
>> obwohl völlig klar ist, dass Moby's Behauptungen null
>> Substanz haben.
>
> Schön, wenn Du das behauptest... Deine Begründung hat jedenfalls Null
> Substanz,  es gibt nämlich schlicht keine.

Sag mal unser Moby hat doch definitiv Verwandte in Katzelsried. So viel 
Zufall gibts doch gar nicht.

Die Krönung wäre jetzt noch beide in den gleichen Thread zu locken.
Was würd ich dafür geben...

von Gu. F. (mitleser)


Lesenswert?

P. M. schrieb:
> Moby, hast du eigentlich ein einzelnes Beispiel, wo du mit Assembler
> tatsächlich besser Gefahren bist, als mit C?

Das ist ja der Gag an der Geschichte.
Mehr als einen 20 Zeiler (schon öfter auch Micky Maus code genannt) hat 
er nichts auf die Beine gestellt ;-)

siehe hier:
Beitrag "Kleines Tiny13 Sensorboard"

Aber dann soooo ne Klappe ...

: Bearbeitet durch User
von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Sag ich doch: Moby ist der Bindl der Programmierer...

von Witkatz :. (wit)


Lesenswert?

Gu. F. schrieb:
> Mehr als einen 20 Zeiler (schon öfter auch Micky Maus code genannt) hat
> er nichts auf die Beine gestellt ;-)

Naja, mehr hat er zumindest nicht präsentiert und ich würde es an seiner 
Stelle auch nicht tun. Der arme, sture Kerl hat doch die ganze 
Programmiererwelt gegen sich aufgebracht ;-)

von Michael K. (Gast)


Lesenswert?

Dank Moby haben wir alle über die Jahre in epischer Breite erfahren wo 
Vor- und Nachteile des ASM gegenüber einem Rudel anderer Spachen liegen 
und wie groß, klein, wesentlich oder unwesentlich die sind.
Wir wissen jetzt was die Mehrheit darüber denkt und was Moby 
unbeeindruckt von jeglicher Argumentation darüber denkt.

Wer nach all dieser Zeit wirklich immer noch inhaltlich mit Moby darüber 
diskutiert ist nicht weniger stur und uneinsichtig.
Unnötig zu persönlichen Angriffen überzugehen.

von P. M. (o-o)


Lesenswert?

Michael K. schrieb:
> Dank Moby haben wir alle über die Jahre in epischer Breite erfahren wo
> Vor- und Nachteile des ASM gegenüber einem Rudel anderer Spachen liegen
> und wie groß, klein, wesentlich oder unwesentlich die sind.

Nein, eben gerade nicht. Moby bringt ja eben gerade keine Fakten in die 
Diskussion ein, er windet sich bloss indem er jede Gegenrede mit dem 
nächsten seiner unbegründeten Argumente kontert, und dabei schon lange 
im Kreis geht.


Michael K. schrieb:
> Wer nach all dieser Zeit wirklich immer noch inhaltlich mit Moby darüber
> diskutiert ist nicht weniger stur und uneinsichtig.

Frage mich auch, warum ich das eigentlich mitmache. Keine Ahnung, warum 
es Spass macht. Überzeugen muss/kann man ja hier niemanden mehr und 
etwas lernen wird man schon gar nicht.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

was man auch immer von Mobys starker Fokussierung auf ASM halten mag: Er 
bleibt in seiner Argumentation immer sachlich und wird nicht 
aufbrausend. Das ist ihm auf jeden Fall hoch anzurechnen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Wegstaben V. schrieb:
> was man auch immer von Mobys starker Fokussierung auf ASM halten mag: Er
> bleibt in seiner Argumentation immer sachlich und wird nicht
> aufbrausend.

Das sehe ich anders. Er versieht jeden Satz, wo er lächelnd auf den 
anderen "herunterschaut", mit einem Smiley ";-)". Das kommt ziemlich 
herablassend rüber und zeugt von wenig Respekt.

von P. M. (o-o)


Lesenswert?

Wegstaben V. schrieb:
> Er
> bleibt in seiner Argumentation immer sachlich und wird nicht
> aufbrausend.

Sachlich ist er schonmal nicht, da er bloss seine Argumente wiederholt 
und umformuliert, aber nicht auf Gegenfragen eingeht. Beispielsweise 
liefert er keinerlei belastbare Fakten oder konkrete Beispiele für seine 
Aussagen.

Aufbrausend wird er nicht, das stimmt. Es gibt aber auch andere 
Möglichkeiten, um unanständig zu sein in einer Diskussion. 
Beispielsweise die freundlich-herablassende Art, die er pflegt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wegstaben V. schrieb:
> was man auch immer von Mobys starker Fokussierung auf ASM halten mag: Er
> bleibt in seiner Argumentation immer sachlich und wird nicht
> aufbrausend.

Beitrag "Re: Assembler wieder auf dem Weg nach vorn"

Sachlich?

Würde ich mir anders vorstellen.  (Wollte hier eigentlich nichts mehr
schreiben, aber das konnte ich nun nicht so stehen lassen.)

: Bearbeitet durch Moderator
von Le X. (lex_91)


Lesenswert?

P. M. schrieb:
> Frage mich auch, warum ich das eigentlich mitmache.

Das gleiche wie alle anderen hier (inklusive mir): unterhalten werden 
wollen.

Es gibt Figuren in diesem Forum, da ist der Name schon ein Garant für 
beste Unterhaltung zur Mittagszeit.
Ich will keine Namen nennen, aber die Diskussionen über Assembler, 
Basisteilchen und Hexadezimalsysteme sorgen immer wieder für Kurzweil.

von Michael K. (Gast)


Lesenswert?

P. M. schrieb:
> Nein, eben gerade nicht. Moby bringt ja eben gerade keine Fakten in die
> Diskussion ein

Aber er ist der Tippgeber an denen sich die anderen abackern und viele 
gute Informationen liefern. Auch eine Leistung.

le x. schrieb:
> Ich will keine Namen nennen, aber die Diskussionen über Assembler,
> Basisteilchen und Hexadezimalsysteme sorgen immer wieder für Kurzweil.

https://de.wikipedia.org/wiki/Raymond_Kurzweil  ??

Die unheilige Dreieinfältigkeit ...
(kommt, soweit ich mich erinnern kann, von Falk)

Ja, ist immer wieder lustig, aber wenn einem das Nervenkostüm dünn wird 
ob dieser Beratungsresistenz darf man auch einfach in den RO Modus 
wechseln.

Ich glaube das Moby nicht halb so verbohrt ist wie man glaubt, er gönnt 
uns nur nicht das letzte Wort und bepinkelt sich vor Lachen wie viel 
Energie hier manche reinstecken seine Worte zu widerlegen und wie die 
aus der Naht gehen wenn nichts davon ankommt.

Jörg W. schrieb:
> Sachlich?
Im Vergleich zu dem was hier oft abgeht, ja.

von Peter D. (peda)


Lesenswert?

Assembler ist auch ein hohes Risiko für den Arbeitgeber.
Scheidet ein Assemblerprogrammierer aus, ist die Gefahr, daß er 
verbrannte Erde hinterläßt, viel höher, als bei einem C-Programmierer.

C läßt sich auch deutlich besser im Team programmieren, d.h. die 
Kollegen können gegenseitig die Qualität überwachen.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Moby A. schrieb:
> Der andere wesentliche ist der Platzbedarf.
>
> Dieses Argument gilt schon mindestens 20 Jahre nicht mehr und es für
> heutige Hardware vorzubringen, ist einfach nur lächerlich.

Lächerlich für aktuell immer fettere Controller vielleicht.
Oder gar ein Raspberry für einfache MSR Aufgaben. Woraus leitest Du ab 
daß diese immer die sinnvollste Lösung darstellen wenn mit etwas 
Investment in effiziente Asm-Programmierung ein kleiner AVR langt?

Wolfgang R. schrieb:
> Mein Brötchengeber würde mich rauswerfen, wenn ich jetzt mit
> Assembler programmieren würde.

Tja den hat der Bastler glücklicherweise nicht. Und damit auch nicht 
tausend weitere Vorgaben die die Wahl des Controllers beeinflussen. Für 
den Bastler zählt nur eines: Die konkreten Bedürfnisse seiner Anwendung. 
Die sind für einfache bis mittelkomplexe MSR Projekte meist locker mit 
einem AVR erledigt.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Frank M. schrieb:
>   Moby verallgemeinert bewusst und provozierend seine Mini-Projekte,
>   für die tatsächlich Assembler reicht

Ich verallgemeinere keine Mini-Projekte sondern >90% aller MSR 
Projekte hier im Forum und im Alltag.

> Moby kennt nur seine
> Mini-Programme, hat aber von Elektronik-Projekten in der Praxis (außer
> seinen eigenen) überhaupt keine Ahnung. Da, wo ein ATmega reicht,
> vernetzt er hunderte von ATTinys und sagt: "ATTiny reicht, Assmbler
> reicht". Warum? Weil er es nicht besser kann!

Ich staune immer über das, was speziell Du zu wissen glaubst. Wenn ein 
Tiny für ein Projekt genügt dann genügt er- und man muß keinen Cortex-M 
einsetzen.
Das ist Effizienz! Und zwar auf der ganzen Linie.

> Da wo Moby viele
> Jahre an seinem Smart-Home-System rumbastelt, machts ein anderer in ein
> paar Wochen fertig.

So ein Smart-Home ist nie fertig. Warum? Weil ständig neue Wünsche 
hinzukommen.

> Die eigentliche Frechheit von Moby ist, von seinem Mikrokosmos auf den
> Rest der Welt zu schließen. Das ist sein großer Irrtum. Und es kommt
> absolut arrogant rüber.

Ein Frank M. muß mir sicher nicht erklären, was frech und arrogant ist. 
Wenn der Fakt, daß Asm so effizient ist, Dein Weltbild und 
C-Selbstwertgefühl stört ist das nicht mein Problem.

> Wenn alle vor 20 Jahren auf Moby gehört hätten, dann stände bei uns kein
> PC unterm Tisch, sondern heute noch ein 8-Bit-Prozessor mit
> angeflanschter HEX-Tastatur. Das wiederum zeigt, dass Programmieren in
> Assembler eine Sackgasse ist.

Jeder Zweck mit den richtigen Mitteln.
Ein Asm-Betriebssystem und entsprechende Anwendersoft ginge freilich auf 
heutigen PC-Systemen ab wie eine Rakete und kein normaler Anwender würde 
noch von Aufrüstung reden. Klar, daß sowas schlecht für die Industrie 
wäre!

> Aber er soll
> einfach dabei die Füße stillhalten.

Das könnte Dir so passen. Wenn sich in das Feuer lahmarschiger fetter 
C-Software eiskaltes Asm-Wasser gießen lässt dann mach ich das mit 
großer Freude und labe mich an den aufgeschreckt empörten Reaktionen ;-)

von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> effiziente Asm-Programmierung

Blablabla
Du bist einfach ein Schwätzer. Geh endlich heim spielen.  Hier 
diskutierten Fachleute...
Man man so viel Käse in einem Thread gibt's sonst nur beim Bindl.

von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> eiskaltes Asm-Wasser

Dann lern erst mal assembler. Speziell solche Befehle wie EOR :-)
Jaja Salz in die Wunde ich weiß...

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Witkatz :. schrieb:
> Naja, mehr hat er zumindest nicht präsentiert und ich würde es an seiner
> Stelle auch nicht tun. Der arme, sture Kerl

... wird ganz sicher mit weiteren Projekten die Begrenztheiten von C 
vorführen. Aber sicher nicht, weil er arm und stur wäre ;-)

Leider passen die großen Asm-Projekte von mir hier nicht rein, u.a. weil 
sie zu speziell an meine Bedürfnisse angepasst sind. Aber wenn ich es 
recht bedenke ist das noch lange nicht nötig, solange es die größten 
Marktschreier und sogenannten "Großen Jungs" hier nicht schaffen, schon 
für ein ganz kleines Asm-Programm eine ressourcensparendere Lösung mit 
dem angeblich so hochpoduktiv mönströsen C-Instrumentarium zu liefern 
;-)

von Michael K. (Gast)


Lesenswert?

Uhu U. schrieb:
> lächerlich.

Moby A. schrieb:
> Lächerlich

Gu. F. schrieb:
> Schwätzer

Lächerlicher Schwätzer ! (empört mit dem Fuß aufstampf)

So, besser jetzt ?
Der eine will Java auf einer 8bit MCU und der andere WIN 10 in Assembler 
programmieren.
Ich will nur weg hier wo sich Erwachsene wie bockige kleine Gören 
benehmen und das mach ich jetzt auch.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Gu. F. schrieb:
> Du bist einfach ein Schwätzer.

Warum muß ich da bloß immer zuerst an Dich denken?
Stell mal hier was Eigenes auf die Beine dann reden wir weiter. Wenn 
ichs einfach haben wollte wär ich auch Bayern Fan und nicht der einer 
drittklassigen Mannschaft ;-)

Michael K. schrieb:
> Ich will nur weg

Du wirst lachen. Das ist auch das Sinnvollste wenn man nicht mehr weiter 
weiß ;-)

: Bearbeitet durch User
von Vlad T. (vlad_tepesch)


Lesenswert?

Moby A. schrieb:
> für ein ganz kleines Asm-Programm eine ressourcensparendere Lösung mit
> dem angeblich so hochpoduktiv mönströsen C-Instrumentarium zu liefern

Genau darum geht es doch gerade nicht, bzw nicht in dem Sinn, wie du es 
meinst.

Arbeitszeit ist auch eine wichtige Ressource, vor allem auch für 
Hobbyisten (nur wird sie da kurioserweise Freizeit genannt).

Es mag ja sein, dass im Vergleich zu dem weltbesten ASM-Programmierer 
der C-Compiler im Mittel (!) geringfügig langsameren und größeren Code 
produziert, aber der Code ist sehr viel schneller geschrieben, sehr viel 
wartbarer und - Risesiger Bonus - problemlos (von der 
Hardwareabstraktion mal abgesehen) auf andere Platformen übertragbar.

Und wenn ich mir für meine Einzelstücke durch einen 50Cent teureren 
Controller mit mehr Speicher all diese Vorteile erkaufen kann, wäre ich 
dumm, dies nicht zu tun.


Edit:

Und warum sollte man
> für ein ganz kleines Asm-Programm
überhaupt
> eine ressourcensparendere Lösung
finden wollen?

Ein ganz kleines Projekt kriegt den Controller eh nicht voll.

Und für gesparten Ram und Cycles gibts kein Geld zurück und noch weniger 
für die längere Entwicklungszeit

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Scheidet ein Assemblerprogrammierer aus, ist die Gefahr, daß er
> verbrannte Erde hinterläßt, viel höher, als bei einem C-Programmierer.

Weil vielleicht die Doku schlecht ist?
Weil vielleicht die Mehrzahl der Nachfolger kein Asm kann? Beides ließe 
sich korrigieren...

> C läßt sich auch deutlich besser im Team programmieren, d.h. die
> Kollegen können gegenseitig die Qualität überwachen.

So wird es wohl sein. Es müsste aber nicht sein.

von Klaus W. (mfgkw)


Lesenswert?

Moby A. schrieb:
> Weil vielleicht die Doku schlecht ist?

ok, kommt bei dir ja nicht vor - dank selbsterklärendem ASM.

von (prx) A. K. (prx)


Lesenswert?

Moby A. schrieb:
> Ein Asm-Betriebssystem und entsprechende Anwendersoft ginge freilich auf
> heutigen PC-Systemen ab wie eine Rakete

Eher unwahrscheinlich. Wann hast du das letzte Mal in die Befehlsliste 
heutiger x86-64 reingesehen? Da lernst du manches Telefonbuch schneller 
auswendig.

Und bis du bei einem solchen Betriebssystem die Handoptimierung des 
Codes fertig hast ist die dazu empfohlene Strategie aufgrund neuer 
Implementierungs-Architekturen schon 2 Generationen weiter und du kannst 
von vorne anfangen.

Als einfaches Beispiel, um es nicht zu kompliziert zu machen: Versuch 
mal, deinen AVR Code so zu schreiben, dass hintereinander stehende 
Befehle nicht von einander abhängig sind und das Ergebnis eines 
Ladebefehls möglichst erst 10 Befehle später benötigt wird. Und denk 
dabei an versteckte Schweinereien, wie etwa ein INC Befehl, der das 
Carry-Flag zwar nicht nutzt, aber davon abhängt.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Michael K. schrieb:
> Unnötig zu persönlichen Angriffen überzugehen.

Das wäre in der Tat die nächste Phase, wenn Ignorieren und 
Lächerlichmachen erfolglos bleiben ;-)

P. M. schrieb:
> und
> etwas lernen wird man schon gar nicht.

Doch. Das könntest Du durchaus. Ein (womöglich Uni-) Bildungs-Investment 
in C oder gar OOP, in die Cortexe und andere Hochbitter dieser Welt 
lässt man aber nicht so einfach in Frage stellen... Da mag die App noch 
so einfach sein. Dafür hab ich doch Verständnis ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Frank M. schrieb:
>  mit einem Smiley ";-)". Das kommt ziemlich
> herablassend rüber und zeugt von wenig Respekt.

Das soll nur meine Stimmungslage wiedergeben, wenn mal wieder 
C,OOP,Cortexe und andere Hochbitter für einfache Aufgaben als effiziente 
einfachste Lösung verkauft werden ;-)

Michael K. schrieb:
>  er gönnt
> uns nur nicht das letzte Wort und bepinkelt sich vor Lachen wie viel
> Energie hier manche reinstecken seine Worte zu widerlegen und wie die
> aus der Naht gehen

Nö. Ich lerne auch gern was. Bei Diskussionen über Sinn und Zweck von 
Asm war das allerdings bislang enttäuschend wenig, so daß eher der 
Amüsierfaktor (s.o.) überwiegt. Ein praktischer Beweis der C-Effizienz 
anhand meiner Projektvorlage könnte mich allerdings zum Staunen und 
Umdenken bewegen- was die Bewertung der Hochsprache angeht.

von (prx) A. K. (prx)


Lesenswert?

A. K. schrieb:
> versteckte Schweinereien, wie etwa ein INC Befehl, der das
> Carry-Flag zwar nicht nutzt, aber davon abhängt.

Um das mal an Code eines Pseudo-AVR zu illustrieren, der sich intern wie 
ein x86er dieses Jahrhunderts verhält:

code1: ld   r16,x
       add  r16, r17
       st   x,r16
       inc  xl
       dec  r16
       brnz code1

code2: ld   r16,x
       add  r16, r17
       st   x,r16
       subi xl, -1
       subi r16, 1
       brnz code2

Es geht jetzt nicht darum, den aufgrund der Unterschiede zu x86 
nicht-optimalen Code zu verbessern. Sondern um die Frage eines 
erstaunten Programmierers, weshalb Code2 bei Intel zwischendurch mal 
viel schneller lief als Code1, während es bei AMD keinen Unterschied 
ergab.

: Bearbeitet durch User
von Witkatz :. (wit)


Lesenswert?

Vlad T. schrieb:
> Und warum sollte man
>> für ein ganz kleines Asm-Programm
> überhaupt
>> eine ressourcensparendere Lösung
> finden wollen?

Da fallen mir schon Gründe ein
1. aus sportlichem Ehrgeiz oder zum Spaß
2. als Lernbeispiel
3. um die Ergebnisse des Compilers mit dem ASM Code wirklich vergleichen 
zu können

von (prx) A. K. (prx)


Lesenswert?

A. K. schrieb:
> Um das mal an Code eines Pseudo-AVR zu illustrieren, der sich intern wie
> ein x86er dieses Jahrhunderts verhält:

Sorry, ersetze den loop counter r16 in
        dec  r16
bzw     subi r16, 1
durch r18. Also

code1: ld   r16,x
       add  r16, r17
       st   x,r16
       inc  xl
       dec  r18
       brnz code1

code2: ld   r16,x
       add  r16, r17
       st   x,r16
       subi xl, -1
       subi r18, 1
       brnz code2

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Vlad T. schrieb:
> aber der Code ist sehr viel schneller geschrieben,

Das "sehr viel" kannst Du bei einem geübten Asmler streichen, 
insbesondere wenn er/sie mit System dran geht und das Rad nicht immer 
wieder neu erfindet.

> sehr viel
> wartbarer

Einspruch. Das ist eine Sache der Doku- und der Übung in Asm. Was dessen 
Transparenz, Wartbarkeit und Fehlersuche erleichtert ist die Tatsache 
daß man 100% des endgültigen Codes stets vor sich hat.

> und - Risesiger Bonus - problemlos (von der
> Hardwareabstraktion mal abgesehen) auf andere Platformen übertragbar.

Das erübrigt sich, wenn man wegen Asm bei der gleichen Architektur 
bleiben kann!

> Ein ganz kleines Projekt kriegt den Controller eh nicht voll.

Ein etwas größeres eher. Welches man womöglich zukünftig noch etwas 
erweitern möchte. Ist es nicht schön wenn das Ganze immer noch in den 
ausgesuchten, billigeren Controller passt ? Jetzt stell Dir mal vor das 
Ding ist schon irgendwo fix verbaut... Da dankst Du dem Allmächtigen, 
daß keine Neuentwicklung nötig wird ;-)

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

A. K. schrieb:
> Sondern um die Frage eines
> erstaunten Programmierers, weshalb Code2 bei Intel zwischendurch mal
> viel schneller lief als Code1, während es bei AMD keinen Unterschied
> ergab.

Das passt nicht hierher weil AMD und Intel Prozessoren eines viel 
komplexeren Kalibers sind.
Die eklatanten Performance-Unterschiede zwischen unterschiedlichen 
Programmiersprachen sind da auf einem Controller viel relevanter und 
alltäglicher...

von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> Weil vielleicht die Doku schlecht ist?
> Weil vielleicht die Mehrzahl der Nachfolger kein Asm kann? Beides ließe
> sich korrigieren...

Dann fang endlich an zu lernen.
Deine Kasperei ist mindestens peinlich. Ein Blinder Maler ist eine 
schwacher Vergleich für Blindgänger wie dich. Ich habe ja immer noch die 
Hoffnung dass du nur trollst weil ich noch an einen Rest-IQ von dir 
glaube. Aber irgendwas sagt mir dass ich wieder enttäuscht werden ;-)
Wie auch immer, ich kriege langsam Kreuzschmerzen wenn ich mich ständig 
auf deinen Horizont runterbeugen muss. Ich werde dich darum nicht weiter 
mit Trollfutter versorgen.

Schönes Asm kennen noch. Vlt. schaffst du ja mal ein programm mit 30+ 
Zeilen...

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Moby A. schrieb:
> Hochbitter

Nennt man so einen besonders starken Kräuterschnaps? ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Gu. F. schrieb:
> Ich werde dich darum nicht weiter
> mit Trollfutter versorgen

Soooo ein Pech ;-)
Allzu erfolgreich warst Du zwar nicht aber ein bunter Farbtupfer in der 
Diskussion! Deine Minuspunkte werden mir fehlen ;-((

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Yalu X. schrieb:
> Nennt man so einen besonders starken Kräuterschnaps? ;-)

Will jetzt nicht arrogant wirken aber unter dem scheint mancher 
Forumsteilnehmer zuweilen zu stehen :-)

von (prx) A. K. (prx)


Lesenswert?

Moby A. schrieb:
> Das passt nicht hierher weil AMD und Intel Prozessoren eines viel
> komplexeren Kalibers sind.

Es war dein eigener Vorschlag, heutige PC Systeme in Assembler zu 
programmieren:

Moby A. schrieb:
> Ein Asm-Betriebssystem und entsprechende Anwendersoft ginge freilich auf
> heutigen PC-Systemen ab wie eine Rakete

von Moby A. (moby-project) Benutzerseite


Lesenswert?

A. K. schrieb:
> Eher unwahrscheinlich. Wann hast du das letzte Mal in die Befehlsliste
> heutiger x86-64 reingesehen? Da lernst du manches Telefonbuch schneller
> auswendig.

Mag sein. Ein Sammelsurium von Befehlen im krampfhaften Bemühen, über 
Jahrzehnte kompatibel zu allen möglichen Entwicklungen zu bleiben. 
Allerdings würden u.U. auch schon die 8086er Codes für hochperformante 
Asm-Programmierung ausreichen !?

> Und bis du bei einem solchen Betriebssystem die Handoptimierung des
> Codes fertig hast ist die dazu empfohlene Strategie aufgrund neuer
> Implementierungs-Architekturen schon 2 Generationen weiter und du kannst
> von vorne anfangen.

In der Praxis hast Du angesichts dieser Entwicklung recht: Sich auf eine 
übergeordnete (Hochsprachen-)Ebene zu begeben scheint geboten. ABER: Wir 
reden hier vom PC Bereich und nicht von kleinen 8-bittigen MCs, die 
hardwarenah einfache MSR Aufgaben lösen.

> Als einfaches Beispiel, um es nicht zu kompliziert zu machen: Versuch
> mal, deinen AVR Code so zu schreiben, dass hintereinander stehende
> Befehle nicht von einander abhängig sind und das Ergebnis eines
> Ladebefehls möglichst erst 10 Befehle später benötigt wird. Und denk
> dabei an versteckte Schweinereien, wie etwa ein INC Befehl, der das
> Carry-Flag zwar nicht nutzt, aber davon abhängt.

Schwierig. Aber zum Glück bei MCs nicht nötig.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

A. K. schrieb:
> Es war dein eigener Vorschlag, heutige PC Systeme in Assembler zu
> programmieren

Der wurde sogar schon umgesetzt. Also möglich wärs.

von (prx) A. K. (prx)


Lesenswert?

Moby A. schrieb:
> Allerdings würden u.U. auch schon die 8086er Codes für hochperformante
> Asm-Programmierung ausreichen !?

Kannst du haben. MS-DOS war lange Zeit das auf PCs dominierende 
Betriebssystem und das wurde in Assembler geschrieben. Anwendungen nicht 
selten auch. Ich kenne freilich niemanden, der MS-DOS nachtrauert.

> Schwierig. Aber zum Glück bei MCs nicht nötig.

Pustekuchen. Der Cortex M7 (z.B. im STM32F7) ist dual-issue, d.h. der 
kann pro Takt 2 Befehle dekodieren und ausführen. Aber natürlich nur, 
wenn die nicht voneinander abhängen und sich auch nicht anderweitig 
gegenseitig auf den Füssen stehen.

Das ist grob das Niveau vom Pentium P5 der 90er, was die Entwicklung der 
Implementierungen von Mikrocontrollern angeht. Und ebendieser P5 war der 
erste x86er, bei dem Handoptimierung in Assembler anfing, kompliziert zu 
werden.

Und der CM7 war sicher nicht das letzte Wort zu diesem Thema.

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> Deine Minuspunkte werden mir fehlen

Hab' dir mal ein paar "lebenswert" gegeben.

Und immer schön wacker bleiben.

mfg.

von Witkatz :. (wit)


Lesenswert?

Moby A. schrieb:
> Welches man womöglich zukünftig noch etwas
> erweitern möchte.
Und während sich die Programmierer in Villabacho bis spät in der Nacht 
durch meterweise ASM Code durchquälen, feiert Villariba längst die 
erfolgreichen Tests des erweiterten C-Projekts.

Moby A. schrieb:
> Ist es nicht schön wenn das Ganze immer noch in den
> ausgesuchten, billigeren Controller passt ?

Leidest du vielleicht an digitaler Agoraphobie?
Wurde es schon erwähnt, dass ein vernünftig geschreibenes C Projekt 
genausogut rein passt?

von Moby A. (moby-project) Benutzerseite


Lesenswert?

A. K. schrieb:
> Schwierig. Aber zum Glück bei MCs nicht nötig.
>
> Pustekuchen. Der Cortex M7 ...

So ist das eben bei zuviel Komplexität. Das trägt sein Scherflein dazu 
bei daß die ARMen Dinger immer schlechter in Asm zu programmieren sind.
Da lob ich mir die AVRs und daß alle einfache Sachen heute noch nicht 
mit ARM gelöst werden müssen.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Witkatz :. schrieb:
> Wurde es schon erwähnt,
> dass ein vernünftig geschreibenes C Projekt genausogut rein passt?

Peter D. schrieb:
> Im Schnitt sind daher C-Programme etwa 10..50% größer

Um mir nicht schon wieder einen eigenen "Repetierer" aus dem Hirn leiern 
zu müssen ;-)

von Witkatz :. (wit)


Lesenswert?

Moby A. schrieb:
> Peter D. schrieb:
>> Im Schnitt sind daher C-Programme etwa 10..50% größer

Selbst verglichen hast du es also nicht, dass du dich auf fremde 
Statistiken berufen musst?
Die Frage war rein rhetorischer Natur, weil es zig mal erwähnt wurde. 
10..50% machen nur ganz selten den Ausschlag den µC zu wechseln. Bevor 
es so weit kommt, hat man auch in C viele Möglichkeiten die 
Ressourcennutzung zu optimieren. Gute C Programmierer können eben 
beides ASM und C und können aus dem ASM Listing Rückschlüsse auf die 
Qualität des C-Codes ziehen, wenn es drauf ankommt.

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Woraus leitest Du ab
> daß diese immer die sinnvollste Lösung darstellen wenn mit etwas
> Investment in effiziente Asm-Programmierung ein kleiner AVR langt?

Was ist denn die "sinnvollste Lösung"? Eine für die man Punkte im 
Programmiererhimmel bekommt, aber pleite geht?

Mit deiner Einstellung wirst du jedenfalls im echten Leben ganz schnell 
einen Bankrott hinlegen. Na wenigstens hast du hinterher die Müße, 
darüber nachzudenken, ob das sinnvoll war...

von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Ein Asm-Betriebssystem und entsprechende Anwendersoft ginge freilich auf
> heutigen PC-Systemen ab wie eine Rakete und kein normaler Anwender würde
> noch von Aufrüstung reden.

Ich kann mich noch sehr gut an so ein ASM-Betriebssystem erinnern: KOS 
von Kontron für deren Z80-Rechner.

Das lief wunderbar und vor allem sau schnell in der Warteschleife. Wenn 
es arbeiten sollte, hatte es einen unübersehbaren Hang zu 
Instabilität...

von Vlad T. (vlad_tepesch)


Lesenswert?

Moby A. schrieb:
> Vlad T. schrieb:
>> aber der Code ist sehr viel schneller geschrieben,
>
> Das "sehr viel" kannst Du bei einem geübten Asmler streichen,
> insbesondere wenn er/sie mit System dran geht und das Rad nicht immer
> wieder neu erfindet.

vergiss es.
Modularisierung und Wiederverwendbarkeit erfordert definierte 
Schnittstellen und Vereinbarungen, wie zB calling conventions, die das 
parameterpassing und register clobbering festlegen.
Gerade die sorgen dafür. dass overhead entsteht, den ein guter compiler 
sogar beseitigen kann, wenn er eine whole program optimization macht.
Ein guter compiler ist auch sehr viel besser darin, registerzuordnungen 
zu handlen und hinterher noch da durchzusehen, was zu welchem Zeitpunkt 
wo ist.
Für ihn ist es kein Problem bei einer ge-inline-ten Funktion die 
Variablen so in die Register zu legen, dass sie nicht mit dem Caller 
collidieren.
Mach das mal mit asm-Funktionen, wenn du nicht das Rad neu erfinden 
willst. Auch hier hat der gnu-Inline-Assembler deutliche vorteile: hier 
könnte man nämlich tatsächlich einen ASM-BLock definieren und im asm 
Platzhalter verwenden, so dass sich der Compiler selbst aussuchen kann 
durch welche Register er die Platzhalter ersetzt.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Yalu hat in diesem Beitrag unlängst bewiesen, dass Moby's Code in allen 
Belangen schlechter ist:

Beitrag "Re: C versus Assembler->Performance"

von Josef G. (bome) Benutzerseite


Lesenswert?

Michael K. schrieb:
> le x. schrieb:
>> Ich will keine Namen nennen, aber die Diskussionen über Assembler,
>> Basisteilchen und Hexadezimalsysteme sorgen immer wieder für Kurzweil.
> ...
> Die unheilige Dreieinfältigkeit ...
> (kommt, soweit ich mich erinnern kann, von Falk)

Beitrag "Re: 8bit-Computing mit FPGA"

von Gu. F. (mitleser)


Lesenswert?

Na endlich, jetzt fehlt nur noch Kurt.
Das wird herrlich freu

von Vlad T. (vlad_tepesch)


Lesenswert?

Markus M. schrieb:
> Yalu hat in diesem Beitrag unlängst bewiesen, dass Moby's Code in allen
> Belangen schlechter ist:
>
> Beitrag "Re: C versus Assembler->Performance"

in genau jenem Thread bin ich, neben jeder Menge Ignoranz und 
Unbelehrbarkeit als Reaktion (auf in meinen Augen) sinnvolle 
Anmerkungen/Hinweise/Ratschläge, auf folgende Aussage gestoßen:


Beitrag "Re: C versus Assembler->Performance"

Karl Heinz B. schrieb:
> Das wars.
> Mir reichts. Du bist unbelehrbar. Ich versuch dir eine Brücke zu bauen
> und du nimmst nichts an. Gar nichts. Du bist wie ein sturer Esel.
> Aber ich warne dich: bei der nächsten 'Nimm doch Assembler' Meldung
> in einem C Thread, wird gelöscht.

Für KHBs Verhältnisse (im Gegensatz zu seiner sonstigen Engelsgeduld, 
die er selbst den frechsten/dreistesten Fragestellern entgegenbringt) 
ist das ja schon ein regelrechter Ausraster.

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Was ist denn die "sinnvollste Lösung"?

Die einfachste und Ressourcen-sparendste.

> Mit deiner Einstellung wirst du jedenfalls im echten Leben ganz schnell
> einen Bankrott hinlegen.

Im Programmiereralltag bin ich mit den sinnvollsten Lösungen bislang 
immer gut gefahren ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Witkatz :. schrieb:
> aus dem ASM Listing Rückschlüsse auf die
> Qualität des C-Codes ziehen

Der Assembler-Programmierer muß nicht erst Rückschlüsse aus 
irgendwelchen Listings ziehen. Er sieht den einzigen, engültigen Code 
vor sich und das beste ist: Er hat ihn 100%ig selbst in der Hand!

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Markus M. schrieb:
> Yalu hat in diesem Beitrag unlängst bewiesen, dass Moby's Code in
> allen
> Belangen schlechter ist:
>
> Beitrag "Re: C versus Assembler->Performance"

Da wurde gar nichts bewiesen. Asm-Code bleibt die Messlatte für alle 
anderen Sprachen. Der Thread an sich ist aber lesenswert, möge sich 
jeder selber ein Urteil dazu bilden.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Das lief wunderbar und vor allem sau schnell in der Warteschleife. Wenn
> es arbeiten sollte, hatte es einen unübersehbaren Hang zu
> Instabilität...

Untauglicher Versuch, von der Qualität eines OS auf die Vor- und 
Nachteile von Asm zu schließen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Moby A. schrieb:
> Der Assembler-Programmierer muß nicht erst Rückschlüsse aus
> irgendwelchen Listings ziehen. Er sieht den einzigen, engültigen Code
> vor sich und das beste ist: Er hat ihn 100%ig selbst in der Hand!

Das wichtigste: Er versteht davon 0%, wenn es nicht sein eigener ist.

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> auf die Vor- und Nachteile von Asm zu schließen.

Welche Nachteile hat denn Asm?

mfg.

von (prx) A. K. (prx)


Lesenswert?

Moby A. schrieb:
>> Beitrag "Re: C versus Assembler->Performance"
>
> Der Thread an sich ist aber lesenswert,

Stimmt. ;-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist aber mal eine fiese Frage.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Er versteht davon 0%, wenn es nicht sein eigener ist.

Das mag für Dich zutreffen und Du hattest das in meinem erwähnten 
Projekt auch hinreichend demonstriert.

Thomas E. schrieb:
> Welche Nachteile hat denn Asm?

Die schlechte Nachricht ist: Je nach eigenem Können, Vorbereitung und 
System ist etwas mehr Mühe und Zeit nötig.
Die gute ist: Es zahlt sich aus ;-)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Moby A. schrieb:
> Das mag für Dich zutreffen und Du hattest das in meinem erwähnten
> Projekt auch hinreichend demonstriert.

Achja... Dein Projekt. Wieviele Interessenten haben Dir mittlerweile ein 
Platinchen abgenommen?

> Die schlechte Nachricht ist: Je nach eigenem Können, Vorbereitung und
> System ist etwas mehr Mühe und Zeit nötig.

Kannst Du das Wort "etwas" quantifizieren?

von Gu. F. (mitleser)


Lesenswert?

Vlad T. schrieb:
> Karl Heinz B. schrieb:
>> Das wars.
>> Mir reichts. Du bist unbelehrbar. Ich versuch dir eine Brücke zu bauen
>> und du nimmst nichts an. Gar nichts. Du bist wie ein sturer Esel.
>> Aber ich warne dich: bei der nächsten 'Nimm doch Assembler' Meldung
>> in einem C Thread, wird gelöscht.

Ich meine der Zeitpunkt ist schon längst überfällig...

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> Die schlechte Nachricht ist: Je nach eigenem Können, Vorbereitung und
> System ist etwas mehr Mühe und Zeit nötig.

Ach komm, das ist doch keine Aussage. Das gilt doch für nahezu alles. 
Sowohl Fahrrad fahren als auch Kuchen backen. So eine Antwort wirft doch 
nur noch mehr Fragen auf.

Was sind denn die von dir angesprochenen Nachteile konkret?

Wieviel und welches Können?
Wieviel und welche Vorbereitung?
Was hat das System damit zu tun?
Welche Mühen sind das und wieviel Mühe und Zeit kostet das?

mfg.

von Robert L. (lrlr)


Lesenswert?

Eigentlich ist es ja recht einfach:

ASM ist in der THEORIE immer besser als alles Andere
egal wie groß das Probjekt ist

insofern hat Moby AVR natürlich recht..


ein durchschnittlicher Programmierer, wird es aber nur bis zu einer 
gewissen komplexität schaffen, besser zu sein als mit C
mit etwas Aufwand wird er es schaffen diese Grenze nach oben zu 
verschieben
aber irgendwo ist die Grenze
(weiter oben kommt dann nochmal eine, wo man nicht mehr C sonder z.b. 
Pascal/c#/java nimmt, aber das wollen wir jetzt nicht ausarten lassen..)

"Argumente" wie "ASM ist einfach" sind natürlich auch recht einfach zu 
durchschauen: das ist so wie Schach-Regeln, die kann man auch in 5 
Minuten erklären.. deshalb ist Schach-Spielen noch lange nicht einfach..


Ich für mich persönlich hab folgende Entscheidung getroffen:
99% meiner Projekte sind WEIT weg von der Linie, wo ich es es selber im 
ASM schreiben könnte...
dort  verwende ich auch z.b. fertige "Biliotheken" für 1-wire, crc, 
443mhz funk, usw (wo findet man sowas überhaupt in ASM? fix/fertig?) 
...von tcp/ip mit W5100 oder EncJ-irgnedwas mal ganz abgesehen..

die Restenlichen 1% der Fälle die ich VIELLEICHT in ASM schreiben 
könnte, funktionieren auch in C/C++,

würde also für MICH überhaupt keinen Sinn ergeben das in ASM zu 
schreiben...
vorallem weil ich dann für dieses 1% länger brauchen würde, als für die 
restlichen 99% (weil ich erstmal ASM so gut lernen müsste, dass was 
brauchbares rauskommt..)

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Uhu U. schrieb:
>> Was ist denn die "sinnvollste Lösung"?
>
> Die einfachste und Ressourcen-sparendste.

Was ist "Ressourcen-sparend"? Wenn man an dem spart, von dem am meisten 
vorhanden ist, oder wenn man die knappen Resourcen schont?

Aber ich sehe schon, derart einfache Überlegungen überfordern dich schon 
heillos - wie soll das erst bei einem ensthaften ASM-Projekt mit ein 
paar 100 KB Codeumfang werden...

von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Der Assembler-Programmierer muß nicht erst Rückschlüsse aus
> irgendwelchen Listings ziehen. Er sieht den einzigen, engültigen Code
> vor sich und das beste ist: Er hat ihn 100%ig selbst in der Hand!

Oh je... Du hast noch nie ASM-Code gesehen, der so richtig aus dem Ruder 
gelaufen und unpflegbar geworden ist...

Du gehst offensichtlich davon aus, dass ASM-Programmierer biller sind, 
als Computer, die ihnen die Dreckarbeit abnehmen und so die Möglichkeit 
geben, ihren Hirnschmalz in Dinge zu investieren, die einen höheren 
Ertrag bringen, als das Maschinencodegepfriemel... Du hast das Zeug zum 
Pleitier.

Moby A. schrieb:
> Untauglicher Versuch, von der Qualität eines OS auf die Vor- und
> Nachteile von Asm zu schließen.

Na ja, was soll man von einem völlig unerfahrenen aber ziemlich 
großmäulugen Greenhorn anderes erwarten...

von Witkatz :. (wit)


Lesenswert?

Moby A. schrieb:
> Er sieht den einzigen, engültigen Code
> vor sich

Er sieht immer nur einen klitzekleinen Ausschnitt davon...
...es sei denn es ist ein 20zeiler.

Und entgültig ist der ASM Code eh fast immer. In den packt nämlich 
keiner mehr gerne rein, wenn die Oberfläche angetrocknet ist.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Witkatz :. schrieb:
> Moby A. schrieb:
> Er sieht den einzigen, engültigen Code
> vor sich
>
> Er sieht immer nur einen klitzekleinen Ausschnitt davon...

Er sieht was -selbstverantwortet- endgültig ist.
Was beim C-Code schließlich rauskommt ist je nachdem was verschiedene 
Compiler und diverse Optimierungen veranstalten nicht ganz so genau 
vorherbestimmt, das sieht dann man immer erst im (längeren) Asm-Listing.

Uhu U. schrieb:
> Oh je... Du hast noch nie ASM-Code gesehen, der so richtig aus dem Ruder
> gelaufen und unpflegbar geworden ist...

Übung, System und Doku können das verhindern.

> Du gehst offensichtlich davon aus, dass ASM-Programmierer biller sind,
> als Computer, die ihnen die Dreckarbeit abnehmen und so die Möglichkeit
> geben, ihren Hirnschmalz in Dinge zu investieren, die einen höheren
> Ertrag bringen, als das Maschinencodegepfriemel...

Denkarbeit nimmt keine Programmiersprache der Welt ab. Asm verlangt 
für's Ergebnis manchmal etwas mehr Aufwand, der bei kleinen 8-Bittern 
aber überschaubar bleibt.

> Na ja, was soll man von einem völlig unerfahrenen aber ziemlich
> großmäulugen Greenhorn anderes erwarten...

Daraus schließe ich, daß Dir auf meinen Einwand hin nur noch persönliche 
Angriffe bleiben ;-)

von P. M. (o-o)


Lesenswert?

Moby A. schrieb:
> Da wurde gar nichts bewiesen. Asm-Code bleibt die Messlatte für alle
> anderen Sprachen.

Das ist selbst bei Performance-Fragen Quatsch: Ein Assembler-Code ist 
nie um Grössenordnungen, sondern höchstens (seltenst) um einige zehn 
Prozente schneller. Die Rechenleistung pro Grösse/Preis/Energie 
verdoppelt sich bekanntlich ca. alle zwei Jahre. Wenn dein 
Assembler-Code also (unwahrscheinlich) 20% schneller ist, dann holt dich 
alleine die technische Entwicklung schon nach 6 Monaten wieder ein.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Was ist "Ressourcen-sparend"?

Sparen an Flash, RAM, MHz, zuweilen Peripherie...
Motivation ist natürlich nicht der Kauf von etwas was man nicht nutzt 
sondern maximale Nutzung dessen was man (eine Nummer kleiner) gekauft 
hat. Mit ein paar Reserven für die Zukunft, versteht sich!

> Aber ich sehe schon, derart einfache Überlegungen überfordern dich

Ich sehe daß Du überfordert bist. Mit Fragen wie der obigen...

: Bearbeitet durch User
von Witkatz :. (wit)


Lesenswert?

Moby A. schrieb:
> Denkarbeit ... Asm verlangt
> für's Ergebnis manchmal etwas mehr Aufwand
Jetzt hast du selber ASM mindestens zum Denksport degradiert.
Denk dran, du kannst nicht ASM sagen, ohne den Begriff SM zu benutzen...

: Bearbeitet durch User
von P. M. (o-o)


Lesenswert?

Moby A. schrieb:
> Sparen an Flash, RAM, MHz, zuweilen Peripherie...

In der richtigen Welt ist Hardware nur eine von vielen Resourcen, noch 
davon eine der günstigeren, und noch dazu mit ständig fallendem Preis.

Insgesamt hast du ja recht, das muss man dir lassen. Nämlich für den 
Fall, dass man mit einer höchstens mässig komplexen Software das 
absolute Maximum aus einem sehr kleinen Controller herausholen will. 
Diese Ausgangslage trifft immerhin auf ca. 2% aller Hobbyprojekte und 
vermutlich mehr als 0.1% der kommerziellen Projekte zu.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Robert L. schrieb:
> ASM ist in der THEORIE immer besser

In der Praxis durchaus genauso. Sonst würde die Sprache längst nicht 
mehr verwendet.

> ein durchschnittlicher Programmierer, wird es aber nur bis zu einer
> gewissen komplexität schaffen, besser zu sein als mit C  mit etwas
> Aufwand wird er es schaffen diese Grenze nach oben zu verschieben
> aber irgendwo ist die Grenze (weiter oben kommt dann nochmal eine, wo
> man nicht mehr C sonder z.b. Pascal/c#/java nimmt, aber das wollen wir
> jetzt nicht ausarten lassen..)

Da hast Du sicher recht. Bei kleinen 8-Bittern würde ich die Grenze aber 
ziemlich weit oben ansiedeln.

> "Argumente" wie "ASM ist einfach" sind natürlich auch recht einfach zu
> durchschauen: das ist so wie Schach-Regeln, die kann man auch in 5
> Minuten erklären.. deshalb ist Schach-Spielen noch lange nicht einfach..

Asm ist insofern einfach als daß es nicht vieler Instruktionen und 
Programmiermittel bedarf. C-Bücher sind da ungleich dicker und warten 
mit vielen Konstruktionen auf die erstmal sinnvoll genutzt sein wollen 
wenn sie denn im konkreten Einsatzfall überhaupt simnvoll sind- und in 
Summe ja trotzdem nicht an das Asm-Ergebnis herankommen. Je 
umfangreicher die Sache allerdings desto mehr schmilzt der Asm-Vorsprung 
dahin. Hardwarenahe MSR Apps bis hin zu mittlerer Komplexität auf 
8-Bittern sind da aber noch nicht oder nur selten betroffen.

> Ich für mich persönlich hab folgende Entscheidung getroffen:
> 99% meiner Projekte sind WEIT weg von der Linie, wo ich es es selber im
> ASM schreiben könnte... dort  verwende ich auch z.b. fertige
> "Biliotheken" für 1-wire, crc, 443mhz funk, usw (wo findet man sowas
> überhaupt in ASM? fix/fertig?)  ...von tcp/ip mit W5100 oder
> EncJ-irgnedwas mal ganz abgesehen..

Mach das. Für solche Dinge hat der geübte Asm-Programmierer, sofern 
benötigt, natürlich "längst fertig". Netzwerkzugriff, TCP/IP sollte man 
da
auslagern- da hab ich persönlich keine Lust zu.

> weil ich erstmal ASM so gut lernen müsste

So viele Instruktionen sinds ja nicht, das lernst auch Du. Aber Übung 
macht den Meister- so wie überall!
Die Verantwortung für alles hat auch was Gutes: Kein anderer 
Verantwortlicher für Fehler funkt in die eigene Arbeit.

von P. M. (o-o)


Lesenswert?

Moby A. schrieb:
> Mach das. Für solche Dinge hat der geübte Asm-Programmierer, sofern
> benötigt, natürlich "längst fertig". Netzwerkzugriff, TCP/IP sollte man
> da
> auslagern- da hab ich persönlich keine Lust zu.

Achja? Dort wo richtig Programmierarbeit und Rechenleistung anfällt also 
dann doch lieber kein Assembler? Ist eigentlich das, was wir dir seit 
einiger Zeit zu erklären versuchen, aber schön, dass du trotzdem noch 
selbst drauf kommst. Wenn auch vermutlich eher unbewusst.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Ach komm, das ist doch keine Aussage. Das gilt doch für nahezu alles.
> Sowohl Fahrrad fahren als auch Kuchen backen. So eine Antwort wirft doch
> nur noch mehr Fragen auf.

Klar ist das eine Aussage. Kann aber sein, daß es schon einiger 
konkreter Erfahrung bedarf, den Nutzen von Können, Vorbereitung und 
System zu verstehen. Ich kann und brauche hier keinen Asm-Kurs zu geben, 
möchte aber auf Deine Fragen

> Wieviel und welche Vorbereitung?
> Was hat das System damit zu tun?
> Welche Mühen sind das und wieviel Mühe und Zeit kostet das?

soviel antworten:
Vorbereitung ist wiederverwendbarer Code.
System ist das Programmgrundgerüst mit vorbereitetem Code für 
Standardaufgaben.
Mühe und Zeit sind dann je nach Können recht individuell.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Achja... Dein Projekt. Wieviele Interessenten haben Dir mittlerweile ein
> Platinchen abgenommen?

Siehst Du. Projektferne Rumtrollerei war Dein einziger Beitrag. 
Wenngleich mit klarer Absicht ;-(

> Die schlechte Nachricht ist: Je nach eigenem Können, Vorbereitung und
> System ist etwas mehr Mühe und Zeit nötig.
> Kannst Du das Wort "etwas" quantifizieren?

Je nach eigenem Können, Vorbereitung und System ;-)
Das kann weniger, gleich viel oder mehr Mühe sein.
In der Regel für den geübten Programmierer und übliche MSR Aufgaben 
'etwas' mehr.

von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> C-Bücher sind da ungleich dicker und warten
> mit vielen Konstruktionen auf die erstmal sinnvoll genutzt sein wollen

Aus der Perspektive einet Ameise sieht selbst ein Kuchenkrümel aus wie 
ein Berg  ;-)
Nicht böse sein ... jedem hier ist klar dass du diesen Seitenhieb nicht 
verstehst.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

P. M. schrieb:
> Moby A. schrieb:
> Da wurde gar nichts bewiesen. Asm-Code bleibt die Messlatte für alle
> anderen Sprachen.
>
> Das ist selbst bei Performance-Fragen Quatsch: Ein Assembler-Code ist
> nie um Grössenordnungen, sondern höchstens (seltenst) um einige zehn
> Prozente schneller. Die Rechenleistung pro Grösse/Preis/Energie
> verdoppelt sich bekanntlich ca. alle zwei Jahre.

Die Komplexität der Controller steigert sich genauso. Heutige ARMe MCUs 
sind so nicht mehr sinnvoll in Asm programmierbar. Bei einfachen 8 
Bittern (möge es sie noch lange geben und das werden sie auch) gilt das.

P. M. schrieb:
> Insgesamt hast du ja recht, das muss man dir lassen. Nämlich für den
> Fall, dass man mit einer höchstens mässig komplexen Software das
> absolute Maximum aus einem sehr kleinen Controller herausholen will.
> Diese Ausgangslage trifft immerhin auf ca. 2% aller Hobbyprojekte und
> vermutlich mehr als 0.1% der kommerziellen Projekte zu.

Die einfachen 8-Bitter zählen zu den (sehr) kleinen Controllern. Damit 
ist immer noch die Mehrzahl der Hobbyprojekte realisiert- und selbst 
wenn sie das nicht sind könnten sie es oft, vor allem als Asm-Version. 
Auch kommerziell spielen 8-Bitter nach wie vor eine bedeutende Rolle. 
Doch hat C hier aus verschiedensten Gründen die Nase vorn, die, wie man 
der Studie entnehmen kann, aber nicht in jedem Fall ausschlaggebend 
sind.

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

P. M. schrieb:
> Achja? Dort wo richtig Programmierarbeit und Rechenleistung anfällt also
> dann doch lieber kein Assembler?

Die fällt projektindividuell sonst schon genügend an. Gebratene Tauben 
fliegen niemand in den Mund. Sagte ich nicht, zur Effizienz gehört, das 
Rad nicht zweimal zu erfinden? Netzwerksachen, Multimedia, SD 
Interfaces, Grafik-LCD, all das kann man für MSR Anwendungen (sofern 
benötigt) locker auslagern. Genau dafür sind mir viele UART 
Schnittstellen wichtig. Meinen Stolz tangiert das alles nicht. Muß es 
das?

von Robert L. (lrlr)


Lesenswert?

Moby A. schrieb:
> verwende ich auch z.b. fertige
>> "Biliotheken" für 1-wire, crc, 443mhz funk, usw (wo findet man sowas
>> überhaupt in ASM? fix/fertig?)  ...von tcp/ip mit W5100 oder
>> EncJ-irgnedwas mal ganz abgesehen..
>
> Mach das. Für solche Dinge hat der geübte Asm-Programmierer, sofern
> benötigt, natürlich "längst fertig".


ernsthaft jetzt?
1-wire schreibst du dir selber?
abhören eine 433MHZ-Temp/Feuchte senders auch?

oder ist mit "geübte Asm-Programmierer," jemand anderer gemeint;-)

und ja ich kenn die Antwort schon: DU brauchst es nicht, aber WENN , 
dann würdes es in ASM schreiben..


ich hingegen verwende es einfach, mir ist es SCH.. egal wie 1-wire 
funktioniert, welches Protokoll es hat usw. da haben sich schon ein paar 
andere darüber den Kopf zerbrochen (denen ich sehr dankbar bin, und 
denen ich auch gerne mal einen Bug melde) (das ist jetzt nur ein 
beispiel von vielen..)



und man ist NICHT darauf "angewiesen" was die verbrechen, sondern ganz 
im gegenteil ist der C-Code viel verständlicher/änderbarer, als ein 
ASM-Listing was in jeder 2. Zeile irgend einen unkommentierten "Trick" 
verwendet um 2 takte zu sparen..

(zu deinem tcp/ip auf xport auslagern sag ich nichts, damit hast dich ja 
sowieso disqualifiziert...)

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Robert L. schrieb:
> als ein
> ASM-Listing was in jeder 2. Zeile irgned eine unkommentierten "trick"
> verwendet um 2 takte zu sparen..

Das kannst du ihm nicht vorhalten. Wenn du dir den Code von "seinem 
Projekt" ansiehst, wirst du sehen, dass solche Tricks da gar nicht drin 
sind.
Sowas machen nur Compiler.

mfg.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Robert L. schrieb:
> 1-wire schreibst du dir selber?
> abhören eine 433MHZ-Temp/Feuchte senders auch?

1-wire noch nicht, aber I2C, SPI, UART und analoge Schnittstellen haben 
bislang noch jedes Mal gelangt

> mir ist es SCH.. egal wie 1-wire
> funktioniert,

Mir auch ;-)
Schnittstellen zu verstehen kann aber (auch Dir)  nicht schaden- da holt 
man ggf. mehr und genau das raus was man selber braucht und keine 
Library in dieser Form bietet

> zu deinem tcp/ip auf xport auslagern sag ich nichts, damit hast dich ja
> sowieso disqualifiziert

Du Dich mit dieser Bemerkung auch.
Frag mal bei Lantronix nach warum sie das Ding produzieren ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Sowas machen nur Compiler.

Auf ein besseres Compiler-Ergebnis warte ich nach wie vor ;-)

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> Auf ein besseres Compiler-Ergebnis warte ich nach wie vor

Das Programm in C hast du gefälligst selbst zu liefern, um zu beweisen, 
dass dein Code soviel effizienter ist. Seit wann kommt der Knochen zum 
Hund?

mfg.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Das Programm in C hast du gefälligst selbst zu liefern, um zu beweisen,

Ha ha... Das ist ja jetzt mal witzig. Meine These ist ja gerade: 
Unmöglich, es in C ressourcensparender hinzubekommen. Und das schon bei 
so einem Winzig-Progrämmchen... Was da erst in größeren für Potentiale 
stecken müssen ;-)

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Sparen an Flash, RAM, MHz, zuweilen Peripherie...
> Motivation ist natürlich nicht der Kauf von etwas was man nicht nutzt
> sondern maximale Nutzung dessen was man (eine Nummer kleiner) gekauft
> hat. Mit ein paar Reserven für die Zukunft, versteht sich!

Aber nur, wenn der Programmierbimbo nix kostet, der das alles macht...

Aber besehen wir die Sache doch mal von der anderen Seite:

   Wozu eigentlich ein Assembler?

Das ist doch was für Weicheier: In den 1970ern kannten die richtig 
harten Jungs die Maschinencodes auswendig und haben die Programme mit 
dem Hex-Editor ins RAM geklopft. Ich kannte einen, er hielt in der 
Rechten die Zigarette und haute mit dem linken Mittelfinger seine 
Hexcodes in den Speicher. Programmkorrekturen - die waren zuweilen auch 
nötig - wurden per Rucksack in den Code rein gekloppt.

Das geht also auch und nun kommst du Waschlappen daher und behauptest, 
der ASM sei das einzig Wahre. Der Typ mit dem Mittelfinger hätte sich 
schief gelacht ud gleichzeitig weiter programmiert...

Wie willst du diese immense Resourcenverschleuderung, die ein Assembler 
darstellt rechtfertigen?

von Jonny O. (-geo-)


Lesenswert?

> Und das schon bei
> so einem Winzig-Progrämmchen... Was da erst in größeren für Potentiale
> stecken müssen ;-)

Andersrum ;-)

Die Effizienz eines ASM-Programms verhält sich praktisch umgekehrt 
proportional zur Code-Größe. Das ist auch der Grund, warum ASM in der 
Regel nicht verwendet wird, wenn die Komplexität und Codegröße ein 
gewisses Maß übersteigt.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Aber besehen wir die Sache doch mal von der anderen Seite...

Wen nochmal wolltest Du damit nun beeindrucken?
Ich hoffe Du nimmst das nicht selber ernst...

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Jonny O. schrieb:
> Und das schon bei so einem Winzig-Progrämmchen... Was da erst in
> größeren für Potentiale stecken müssen ;-)
>
> Andersrum ;-)

Nö. Die Potentiale sind in jedem Fall da.
Und bis zu einer gewissen Projektgröße lohnt es sich, diese mit Asm 
auszuschöpfen. So wird ein Schuh draus.

von Jonny O. (-geo-)


Lesenswert?

> Nö. Die Potentiale sind in jedem Fall da.
> Und bis zu einer gewissen Projektgröße lohnt es sich, diese mit Asm
> auszuschöpfen. So wird ein Schuh draus.

Ab welcher Codegröße / Komplexität lohnt es sich denn nicht mehr ASM 
einzusetzen?

von Carl D. (jcw2)


Lesenswert?

> Meine These ist ja gerade:
> Unmöglich, es in C ressourcensparender hinzubekommen. Und das schon
> bei so einem Winzig-Progrämmchen... Was da erst in größeren für
> Potentiale stecken müssen ;-)

Ein echter Logiker vor dem Herrn.

Wenn also das Programm beliebig klein ist, z.B. nur 1 Befehl, RJMP $-2,
dann kann es in C nicht kürzer werden.
Mit dem Verfahren kann man auch die völlige Sinnlosigkeit von 
Vektor-Prozessoren beweisen, denn die sind ja schon beim Berechnen von 
einer Operation nicht schneller als die "Normalen".

Es bestreitet ja keiner, daß ein C-Programm, ich verwende mal 
kaufmännische Begriffe, Fixkosten > 0 hat. Nur sind die variablen Kosten 
von ASM größer, z.B. in einfachsten Fall, weil man für eine 
Integer-Addition mehr Zeilen schreiben muß. Und sobald man den 
Break-Even-Punkt erreicht hat, gewinnt C. Über die Lage dieses Punktes 
kann man sicher streiten, über seine Existenz nicht.

> Netzwerksachen, Multimedia, SD Interfaces, Grafik-LCD, all das kann
> man für MSR Anwendungen (sofern benötigt) locker auslagern. Genau
> dafür sind mir viele UART Schnittstellen wichtig.

Hurra, wenn ich eine kleine Temperatur-Meßbox bauen will, dann muß ich 
nur einen 1-Wire-Prozessor mit serieller Schnittstelle und einen 
SE-Card-Rozesser mit serieller Schnittstelle an einen Mega664 hängen 
(oder gibt's kleinere mit 2xUART?) und kann dann mit wenigen ASM-Zeilen 
meinen Temperatur-Logger bauen. Resourcenarm, sogar die mir wichtigste 
Resource, meine Lebenszeit wird nicht durch das Inkludieren von
PeDa-/Fleury-Libs verschwendet. Endlich hab ich das Licht gesehen!

von Gu. F. (mitleser)


Lesenswert?

Jonny O. schrieb:
> Ab welcher Codegröße / Komplexität lohnt es sich denn nicht mehr ASM
> einzusetzen?

Für Moby >20 Zeilen.
Falls EOR drin vorkommt auch mal weniger ROFL

von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Wen nochmal wolltest Du damit nun beeindrucken?
> Ich hoffe Du nimmst das nicht selber ernst...

Doch doch, das nehme ich sehr ernst und wenn in deiner bisherigen 
Pro-ASM-Argumentation nur ein Fünkchen Wahrheit steckt, dann wirst du 
jetzt einen hex-Editor bauen, den Assembler fortschmeißen und 
resourcensparend Maschinencode programmieren.

Da du das aber offensichtlich nicht willst, versuchst du mit diesem 
billigen Trick deine Argumentationsschwäche zu vertuschen...

In Wirklichkeit nimmst du dein ASM-ist-das-Beste-Geschwätz selbst nicht 
ernst.

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Wegstaben V. schrieb im Beitrag #4354426:
> Man kann Moby's ASM-Fundalismus nicht mit rationalen Argumenten
> begegnen.

Da könntest Du Recht haben. Aber nicht wegen "Fundalismus" ;-)

> Karl Heinz B. schrieb:
>  Du bist wie ein sturer Esel.

Ich schätze Freundlichkeit, Hilfsbereitschaft und Kompetenz von 
Karl-Heinz sehr. Deswegen darf ihm auch mal sowas durchrutschen ;-)

von Witkatz :. (wit)


Lesenswert?

Moby A. schrieb:
> So viele Instruktionen sinds ja nicht, das lernst auch Du.

C hat noch weniger Instruktionen, ist eben was für Weicheier und nichts 
für harte Byte-Cowboys wie dich.

Moby A. schrieb:
> Unmöglich, es in C ressourcensparender hinzubekommen.

Für dich unmöglich, es in C überhaupt hinzubekommen. Ist eben eine 
andere Welt.

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> Ha ha... Das ist ja jetzt mal witzig. Meine These ist ja gerade:
> Unmöglich, es in C ressourcensparender hinzubekommen.

Was ist denn daran witzig? Genau das sollst du beweisen, indem du ein 
C-Programm lieferst, dass größer, langsamer und was weiss ich noch alles 
ist. Wir werden das dann noch ein bisschen optimieren.

Oder glaubst du wirklich, dass einer dein Assembler-Programm 
auseinanderdröselt, um daraus ein C-Programm zu machen?

mfg.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> resourcensparend

Mach Dir bitte nochmal klar was mit "ressourcensparend" gemeint war. 
Tipp: Weiter oben hat ichs schonmal erklärt.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Oder glaubst du wirklich, dass einer dein Assembler-Programm
> auseinanderdröselt, um daraus ein C-Programm zu machen?

Nein. Das vorgegebene Ziel ist schlicht nicht erreichbar. Umso 
spektakulärer "argumentieren" hier auch manche große Experten ;-)

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> Das vorgegebene Ziel ist schlicht nicht erreichbar

Traust du dich nicht, deine Behauptung zu beweisen? Oder gibst du jetzt 
zu, dass alles, was du du von dir gibst, nur hohles Dummgeschwätz ist?

mfg.

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Witkatz :. schrieb:
> Für dich unmöglich, es in C überhaupt hinzubekommen.

Das muß ich auch nicht wenns in Asm effizienter geht.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> hohles Dummgeschwätz ist

... die Behauptung C könnte es besser.
Beweise es doch. Aber Du kannst es nicht...
Wolltest Du davon ablenken?

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> ... die Behauptung C könnte es besser.
Wo behaupte ich, dass C das besser kann?

Du behauptest, dass du es in Assembler besser kannst. Also beweise es!

mfg.

von Gu. F. (mitleser)


Lesenswert?

Warum diskutiert ihr mir diesem Kleingeist?
Er will Trollen, nicht lernen!

von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Mach Dir bitte nochmal klar was mit "ressourcensparend" gemeint war.
> Tipp: Weiter oben hat ichs schonmal erklärt.

Vermutlich meinst du diese "Erklärung":

Moby A. schrieb:
> Tatsächlich aber verhelfen die vielen Freiheiten des Asm-Programmierens
> nicht nur zu effizientem, hochdichten Code ,sondern verleiten zuweilen
> auch mit diesem und jenen Trick (z.B. bei Vielfachnutzung derselben
> Ressourcen) zu einem unübersichtlichen Programm.

Wer sagt, dass man mit Maschinencode im Hex-Format nicht auch "zu einem 
unübersichtlichen Programm" kommen kann? Und resourcensparender als so 
ein völlig unnützer Assembler ist es allemal, denn der Programmierbimbo 
kostet ja nix, während Speicherplatz, Rechenkapazität und Strom doch 
ziemlich teuer sind.


Deine Einsilbigkeit ist verräterisch... Also nochmal die Frage:

  Wozu eigentlich ein Assembler?

wenn es ein Hexeditor auch tut.

: Bearbeitet durch User
von Carl D. (jcw2)


Lesenswert?

> Wozu eigentlich ein Assembler?
> wenn es ein Hexeditor auch tut.

Weil dann nicht nur EOR ins Reich der Nebel verschwindet ...

von Witkatz :. (wit)


Lesenswert?

Moby A. schrieb:
> Witkatz :. schrieb:
>> Für dich unmöglich, es in C überhaupt hinzubekommen.
>
> Das muß ich auch nicht wenns in Asm effizienter geht.

Jaja und bitte an dem Glauben immer schön festhalten.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Du behauptest, dass du es in Assembler besser kannst. Also beweise es!

Mit meinem Projektchen ist das schon geschehen... Nun beweise die 
Behauptung, das bischen Funktionalität mit den ach so effizienten 
Compilern, die jedem Asm-Programmierer was vormachen im 
Ressourcenverbrauch zu schlagen! Beachte bitte: Meine Asm-Fähigkeiten 
würde ich eher durchschnittlich nennen...
Was? Dir erschließt sich diese Logik der Beweispflicht nicht? Sorry, 
dann kann ich Dir von dieser Stelle aus nicht mehr weiterhelfen ;-(

Witkatz :. schrieb:
> Jaja und bitte an dem Glauben immer schön festhalten.

Da verwechselst Du was. Bislang ist es immer noch Wissen ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Deine Einsilbigkeit ist verräterisch...

So recht magst Du nicht zur Kenntnis nehmen welche Ressourcen Asm 
spart. Stimmts? Aber ich verstehe Dich. Auf diesem Feld ist gerade kein 
Blumentopf zu gewinnen ;-)

von Thomas E. (thomase)


Lesenswert?

Moby A. schrieb:
> Mit meinem Projektchen ist das schon geschehen...
Nein. Du stellst hier eine Behauptung auf und bist nicht bereit, diese 
auch zu beweisen. Sondern zeigst hier ein Programm, von dem man nicht 
einmal weiss, ob es überhaupt funktioniert.

Die Funktionalität dieses Progrämmchens in C oder wenigstens in 
Pseudo-Code darzustellen, kann doch nicht so schwer sein.

Moby A. schrieb:
> Beachte bitte: Meine Asm-Fähigkeiten würde ich eher durchschnittlich
> nennen...
Was willst du denn damit sagen?
Falls es jemandem gelänge, ein C-Programm zu schreiben, dass in allen 
Belangen besser ist als dein Assembler-Programm, liegt es nicht an 
Assembler an sich, sondern nur an deinen bescheidenen Fähigkeiten? Und 
jemand, der mehr auf dem Kasten hätte als du, würde es sicher 
hinbekommen?

mfg.

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Carl D. schrieb:
> Wenn also das Programm beliebig klein ist, z.B. nur 1 Befehl, RJMP $-2,
> dann kann es in C nicht kürzer werden.

Richtig. Deshalb steckt in diesem Fall das geringste Potential der 
Verbesserungsmöglichkeiten durch Asm, nämlich Null.
Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das 
Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße 
übrigens unbegrenzt. Aber irgendwann kommt der Punkt, an dem der 
Asm-Programmierer dieses Potential ob der schieren 
Programmgröße/komplexität nicht mehr heben kann- dann schlägt endgültig 
die Stunde der Hochsprache. Hast Du das jetzt verstanden?

> Endlich hab ich das Licht gesehen!

Ich gebe die Hoffnung nicht auf ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Moby A. schrieb:
>> Beachte bitte: Meine Asm-Fähigkeiten würde ich eher durchschnittlich
>> nennen...
> Was willst du denn damit sagen?
> Falls es jemandem gelänge, ein C-Programm zu schreiben, dass in allen
> Belangen besser ist als dein Assembler-Programm, liegt es nicht an
> Assembler an sich, sondern nur an deinen bescheidenen Fähigkeiten? Und
> jemand, der mehr auf dem Kasten hätte als du, würde es sicher
> hinbekommen?

Damit will ich nur sagen, daß die Chancen doch gut stehen sollten, meine 
durchschnittlichen Assemblerfähigkeiten mit hocheffizientem Compilercode 
zu schlagen. Gelingt das werde ich hier Assembler nicht mehr als 
ernstzunehmende C-Konkurrenz hinstellen. Was natürlich nicht ausschließt 
daß wiederum ein anderer besserer ASMler daherkommt und dies mit 
Nachweis wieder behauptet ;-)

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Damit eine gute Nacht und vielen Dank an alle Mit-Diskutanten,
vom redlich konstruktiven, unpolemischen Peter D. bis hin zum komplett 
gegenteiligen Gu.F(orentroll). Am Wochenende werde ich dann wieder etwas 
Zeit finden, die Vorteile und Annehmlichkeiten von Asm mit Euch zu 
diskutieren.

Moby

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Auf diesem Feld ist gerade kein Blumentopf zu gewinnen ;-)

Deswegen meidest du die Antwort auf meine Frage:

  Wozu eigentlich ein Assembler? wenn es ein Hexeditor auch tut.

wie der Teufel das Weihwasser...

von Uhu U. (uhu)


Lesenswert?

Thomas E. schrieb:
> Die Funktionalität dieses Progrämmchens in C oder wenigstens in
> Pseudo-Code darzustellen, kann doch nicht so schwer sein.

Alles, was man nicht kann, ist schwer...

von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Carl D. schrieb:
>> Wenn also das Programm beliebig klein ist, z.B. nur 1 Befehl, RJMP $-2,
>> dann kann es in C nicht kürzer werden.
>
> Richtig. Deshalb steckt in diesem Fall das geringste Potential der
> Verbesserungsmöglichkeiten durch Asm, nämlich Null.

Oh, da bist du aber einem gewaltigen Irrtum aufgesessen. Natürlich 
bringt ASM in dem Fall einen, wenn auch kleinen Vorteil gegenüber dem 
C-Compiler, verschwendet dabei aber zur Übersetzungszeit wieder 
wahnsinnige Mengen an kostbaren Resourcen.

Der Hex-Editor machts noch viel billiger: man braucht keinen Assembler 
und folglich auch keinen Rechner, auf dem er läuft und er spart den 
ganzen Speicheroverhead, den das C-Programm
1
void main(void) {
2
  loop: goto loop;
3
}

braucht.

Ergo: Du hast keine Ahnung wovon dur hier rumschwadronierst...

von Thomas E. (thomase)


Lesenswert?

Uhu U. schrieb:
> void main(void) {
>   loop: goto loop;
> }

Das sollte man ausdrucken und dir um die Ohren hauen.

mfg.

von Guido B. (guido-b)


Lesenswert?

Robert L. schrieb:
> ich hingegen verwende es einfach, mir ist es SCH.. egal wie 1-wire
> funktioniert, welches Protokoll es hat usw. da haben sich schon ein paar
> andere darüber den Kopf zerbrochen (denen ich sehr dankbar bin, und
> denen ich auch gerne mal einen Bug melde) (das ist jetzt nur ein
> beispiel von vielen..)

Oh, kommt jetzt die Arduino-Fraktion auch noch in den Thread? ;-)

von Uhu U. (uhu)


Lesenswert?

Thomas E. schrieb:
> Das sollte man ausdrucken und dir um die Ohren hauen.

Wieso das denn?

von Sheeva P. (sheevaplug)


Lesenswert?

Moby A. schrieb:
> Uhu U. schrieb:
>> Was ist denn die "sinnvollste Lösung"?
>
> Die einfachste und Ressourcen-sparendste.

Ist die Lebenszeit des Programmierers keine Ressource? Mir scheint dies 
die wertvollste Ressource überhaupt zu sein.

von Thomas E. (thomase)


Lesenswert?

Uhu U. schrieb:
> Wieso das denn?

Weil "goto" absolut verpönt ist.

Aber wenn es unbedingt sein muss, dann:
1
comefrom: goto comefrom;

Ausserdem heisst es
1
int main(void)

mfg.

von Uhu U. (uhu)


Lesenswert?

Thomas E. schrieb:
> Weil "goto" absolut verpönt ist.

Ach du lieber Himmel... Das erzählt man den kleinen Buben, um sie zu 
disziplinieren.

Was glaubst du wohl, warum Dennis Ritchie in den frühen 1970ern das goto 
in C eingebaut und keiner es seither wieder entfernt hat?

Nicht um irgend welche Deppen zu verführen, Unsinn damit zu machen, 
sondern weil es Fälle gibt, in denen es von Nutzen ist und der Klarheit 
des Programmablaufs dient.

> Aber wenn es unbedingt sein muss, dann:
> comefrom: goto comefrom;

Was soll das denn?

> Ausserdem heisst es int main(void)

Nö, das heißt int main(int argc, char *argv[]) aber C ist da tolerant 
und du musst noch viel, viel lernen...

von B. S. (bestucki)


Lesenswert?

Hier wurde bereits bewiesen, dass C sogar speicherplatzsparender als 
Mobys Assembler sein kann:
Beitrag "Re: C versus Assembler->Performance"

Zusätzlich zitiere ich aus dem dort verlinkten Thread:

Moby AVR schrieb:
> Hans schrieb:
>> Wenn du nur 1:1 "übersetztst", dann wird C niemal kleiner als dein ASM
>> code werden.

> Kleiner? Wie soll denn das passieren? Da muss sich ein Asm-Programmierer
> aber schon selten dämlich anstellen :-)

Hier zu lesen: Beitrag "Re: C versus Assembler->Performance"

Die jetzige "Diskussion" ist damit hinfällig und Moby darf uns nun 
endlich zeigen, wie man das kleine Progrämmchen mit handoptimiertem 
Assembler ressourcensparender niederschreiben kann.


Uhu U. schrieb:
> Nö, das heißt int main(int argc, char *argv[])
Oder eben auch
1
int main(void){ /* ... */ }
Dies sind die beiden Varianten, die im Standard definiert sind.
Edit: "or in some other implementation-defined manner."

> aber C ist da tolerant
Wenn, dann ist der Compiler tolerant.

: Bearbeitet durch User
von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> Mit meinem Projektchen
Hey, du erkennst also das dein Projektchen ein Projektchen ist :-)

Moby A. schrieb:
> Meine Asm-Fähigkeiten
> würde ich eher durchschnittlich nennen...
Ich würde das eher unterdurchschnittlich nennen (--> Micky Maus).

Moby A. schrieb:
> Sorry,
> dann kann ich Dir von dieser Stelle aus nicht mehr weiterhelfen ;-(
Dir ist schon lange nicht mehr zu helfen.

von Robert L. (lrlr)


Lesenswert?

Guido B. schrieb:
> Robert L. schrieb:
>> ich hingegen verwende es einfach, mir ist es SCH.. egal wie 1-wire
>> funktioniert, welches Protokoll es hat usw. da haben sich schon ein paar
>> andere darüber den Kopf zerbrochen (denen ich sehr dankbar bin, und
>> denen ich auch gerne mal einen Bug melde) (das ist jetzt nur ein
>> beispiel von vielen..)
>
> Oh, kommt jetzt die Arduino-Fraktion auch noch in den Thread? ;-)

ja,
mir geht es eben ums Ergebnis, nicht um den Weg dort hin ;-)

normalerweise,

wobei ich gestern eclipse+stm32 (mit qemu und auch mit einem st-link + 
kaum 2€stück großem echtem board)  ausprobiert hab..

einfach aus Spaß: wenn man seine Sachen dann auch debuggen kann,ist 
schon was feines...
das Ding hat ja soviel "Moby-Resource" (aka Flash) dass man garnicht 
weiß was man alles tun soll damit... und ist um welten kleier als alles 
was man (ich) selber herstellen könnte... wenn ich es könnte..

auch qemu find ich genial, kann man an avr auch simulieren??

;-)

stellt sich echt die frage warum man noch mit 8-bit herumeiert ;-)

: Bearbeitet durch User
von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Gu. F. schrieb:
> Moby A. schrieb:
>> Sorry,
>> dann kann ich Dir von dieser Stelle aus nicht mehr weiterhelfen ;-(
> Dir ist schon lange nicht mehr zu helfen.

Man kann von seiner Meinung halten was man möchte: aber Moby bleibt bei 
seinen Ausführungen immer höflich. Das sollte auch für die 
Mitdiskutanten gelten.

Das hier ist auch "sein" Thread, also kann er hier auch seine Thesen 
vertreten wie er möchte. Wir Mods haben nur etwas degegen, wenn er mit 
seiner Asm/AVR-Affinität andere Threads kapert.

Man muss bei allen Meinungsverschiedenheiten auch bedenken, dass Moby 
das als Hobby betreibt, während die meisten hier wohl auch beruflich 
coden.

Beruflich stellt sich die Frage ASM/Hochsprache kaum noch, weil 
Arbeitszeit und Portabilität erheblich kostbarer als Speicherplatz sind, 
wenn man damit Geld verdienen muss.

Ich habe ja früher durchaus auch mit reinem Assembler gearbeitet (8048, 
eigenes BIOS für einen 80286-PC, Bordcomputer mit einem AVR 8535), 
allerdings war bei etwa 4-8k Codegröße dann Schluß und ich bin auf C 
umgestiegen.

Bei den Projektgrößen und den Anforderungen, wie sie jetzt bei uns 
vorherrschen, wäre Programmierung in Assembler einfach undenkbar.

Moby A. schrieb:
> Richtig. Deshalb steckt in diesem Fall das geringste Potential der
> Verbesserungsmöglichkeiten durch Asm, nämlich Null.
> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
> Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße
> übrigens unbegrenzt. Aber irgendwann kommt der Punkt, an dem der
> Asm-Programmierer dieses Potential ob der schieren
> Programmgröße/komplexität nicht mehr heben kann- dann schlägt endgültig
> die Stunde der Hochsprache.

Und da hat Moby einfach mal Recht.

Je mehr Code man hat, desto eher steigen für den Assembler-Programmierer 
die Chancen, Optimierungsmöglichkeiten zu übersehen. Ein Compiler tut 
das nicht. Der verliert auch nicht den Überblick. Schaut man sich schon 
bei kleinen Programmen (4k) an, wo ein Compiler Dinge findet, die er 
doppelt nutzen kann, dann ist das schon faszinierend (und teilweise 
unfassbar). Da muss man einfach den Hut vor den Compilerjungs ziehen.

Ich würde also aus der Praxis heraus behaupten, dass ab einer gewissen 
Codegröße der Compiler den Assemblerprogrammierer auch recht locker in 
der Codegröße schlägt.

Ich bin allerdings auch der Meinung, dass es für einen angehenden 
Programmierer gut ist, wenn er ein paar kleine Projekte in Assembler 
schreibt. Das hilft dabei, später effizienten Code in C zu schreiben und 
auch Fehler schneller zu lokalisieren, weil man zumindest erahnen kann, 
was auf Prozessorebene geschieht.

von Thomas E. (thomase)


Lesenswert?

Uhu U. schrieb:
> Nicht um irgend welche Deppen zu verführen, Unsinn damit zu machen,
> sondern weil es Fälle gibt, in denen es von Nutzen ist und der Klarheit
> des Programmablaufs dient.

goto ist die Mutter allen Spaghetticodes.

mfg.

von Vlad T. (vlad_tepesch)


Lesenswert?

Thomas E. schrieb:
> goto ist die Mutter allen Spaghetticodes.

wie wir wissen, braucht es aber auch noch nen Vater, der mit der Mutter 
schmutzige Sachen anstellt.
So ganz allein, ist die Mutter anständig und kann nützlich sein ;)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Uhu U. schrieb:
>> Nicht um irgend welche Deppen zu verführen, Unsinn damit zu machen,
>> sondern weil es Fälle gibt, in denen es von Nutzen ist und der Klarheit
>> des Programmablaufs dient.
>
> goto ist die Mutter allen Spaghetticodes.

Ich selbst habe in den letzten 30 Jahren C-Programmierung niemals ein 
goto gebraucht, trotzdem würde ich das nicht so allgemein formulieren. 
Es gibt durchaus in speziellen Situationen Gründe, ein goto zu 
verwenden. Zum Beispiel im Linux-Kernel, um von einem Ausnahmezustand 
einen wohldefinierten "Normalzustand" wieder zu erreichen.

Trotzdem würde ich niemals behaupten, dass der Linux-Kernel-Code 
Spaghetticode wäre.

von Thomas E. (thomase)


Lesenswert?

Frank M. schrieb:
> Trotzdem würde ich niemals behaupten, dass der Linux-Kernel-Code
> Spaghetticode wäre.

Ausnahmen bestätigen die Regel.

Aber jetzt lasst uns diesen Thread nicht kapern. Das ist ein ASM-Thread 
von Moby. Er bekommt auch was auf den Deckel, wenn er in anderen Threads 
seine ASM-Ansichten verbreitet.

mfg.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Chris D. schrieb:
> Ich würde also aus der Praxis heraus behaupten, dass ab einer gewissen
> Codegröße der Compiler den Assemblerprogrammierer auch recht locker in
> der Codegröße schlägt.

Das sehe ich absolut genauso. Das Problem ist aber, dass Moby diese 
kritische Codegrenze noch nie erreicht hat - da er eher kleinere 
Progrämmchen schreibt. Leider verallgemeinert er aber dermaßen seinen 
erreichten Zustand, dass es so rüberkommt, als wäre Assembler generell 
das Mittel der Wahl und alles größer als ATTiny Teufelswerk, was man 
nicht braucht.

Kurzum: Er schließt von seinem Mikrokosmos auf sämtliche µC-Anwendungen, 
prahlt damit ziemlich großkotzig rum und degradiert jeden 
C-Programmierer zu einem nichtsnutzigen Wesen, was die Welt nicht 
braucht.

P.S.
Deine Meinung, Moby bliebe bei seinen Ausführungen immer höflich, kann 
ich leider nicht teilen. Er wird zwar nicht verbal ausfallend, jedoch 
macht er das subtiler. Zum Beispiel hat er Karl Heinz (buchegg) ziemlich 
kaltschnäuzig (d.h. respektlos) gegen die Wand fahren lassen, so dass 
ich zum ersten Mal erleben konnte, wie Karl Heinz die Hutschnur platzte.

Das kommt nicht von ungefähr. Respekt zeigen ist nicht gerade Mobys 
Stärke. Die provozierend gesetzten zwinkernden Smileys, die er bei 
Widerspruch bewusst platziert, führen dazu, dass seine davor platzierte 
Meinung ziemlich herablassend und schon gar nicht höflich rüberkommt.

Fazit: Moby hats drauf, bewusst zu provozieren. Das macht er aber nicht 
offen, sondern sehr verdeckt.

: Bearbeitet durch Moderator
von Uhu U. (uhu)


Lesenswert?

Thomas E. schrieb:
> goto ist die Mutter allen Spaghetticodes.

In der Hand von Stümpern mag das stimmen. Profis wissen, wozu es gut ist 
und wozu nicht - mit einem Messer kann man auch nicht nur Schlimmes 
anstellen...

Ein Beispiel ist das Verlassen einer inneren Schleife. Man kann die 
ganze geschachtelte Schleife als Funktion ausführen und mit return in 
einer inneren herausspringen, oder man lässt die Funktion weg und 
springt sauber hinter das Ende der äußeren Schleife. Ansonsten gibt es 
wenig strukturerhaltende Anwendungen für goto.

Dogmen sind mit Informatik jedenfalls nicht kompatibel...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Deine Meinung, Moby bliebe bei seinen Ausführungen immer höflich, kann
> ich leider nicht teilen.

Einmal in die Enge getrieben, schlägt er wild um sich.  Siehe ganz
oben auf dieser Seite, wo er mich des „Märchenerzählers“ bezichtigt,
um kurz danach selbst zu behaupten, die Peripherals eines Xmega seien
eigentlich die gleichen wie bei einem MegaAVR, nur „die paar Steuerbits
anders verteilt“.

Argumente akzeptiert er nur, wenn sie in sein Weltbild passen, alles
andere wird entweder ignoriert oder verdreht oder es wird eben einfach
mal behauptet, das sei jetzt gar nicht so.

Aber es ist korrekt, verbal ausfallend wird er nicht.  Dann würde ja
auch riskieren, dass die entsprechenden Beiträge gelöscht werden.

von Clemens L. (c_l)


Lesenswert?

be s. schrieb:
> Uhu U. schrieb:
>> Nö, das heißt int main(int argc, char *argv[])
> Oder eben auch
>   int main(void){ /* ... */ }
> Dies sind die beiden Varianten, die im Standard definiert sind.
> Edit: "or in some other implementation-defined manner."

Gilt nur im Hosted Environment. Sonst:
> In a freestanding environment (in which C program execution may take
> place without any benefit of an operating system), the name and type
> of the function called at program startup are implementation-defined.

Und unabhängig vom Ergebnis-Typ von main(): praktisch jeder 
Embedded-Compiler kann mit den passenden Optionen den Startup-Code auf 
wenige Bytes eindampfen, wenn man die entsprechenden Features nicht 
braucht. Der Unterschied ist halt, dass man in Assembler gleich bei Null 
anfängt und nichts mehr explizit zu entfernen braucht.

von Thomas E. (thomase)


Lesenswert?

Jörg W. schrieb:
> Aber es ist korrekt, verbal ausfallend wird er nicht.  Dann würde ja
> auch riskieren, dass die entsprechenden Beiträge gelöscht werden.

Naja, der andere wohlbekannte Asm-Apologet, der hier als Gast nicht 
mitdiskutieren darf, ist, was die verbalen Ausfälle angeht, genau das 
Gegenteil von dem. Und die werden auch nur in Ausnahmefällen gelöscht.

Im Gegensatz zu Moby, weiss der aber auch genau, wovon er redet.

mfg.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> goto ist die Mutter allen Spaghetticodes.

... und in Assembler kaum wegzudenken:

Alle BRxx-Varianten, alle JMP-Varianten ...

von P. M. (o-o)


Lesenswert?

Moby A. schrieb:
> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
> Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße
> übrigens unbegrenzt

Das ist schlicht und einfach extremer Unsinn. Ab einer gewissen Grösse 
hat der Mensch unmöglich den Überblick, um weitgreifend zu optimieren. 
Der Compiler hingegen kann das. Deine hochgelobte Optimierung auf 
Assembler-Ebene ist nämlich nicht etwa eine hohe Kunst, wie du es zu 
verkaufen versuchst, sondern letztlich relativ stupides Handwerk. Passt 
aber zum Horizont mit Radius null, den du hier zeigst.

von P. M. (o-o)


Lesenswert?

Um es zusammenzufassen: Wir haben dir schon lange zugestimmt, dass man 
mit Assembler auf sehr kleinen Mikrocontrollern bei kleinen Projekten 
mit wenig Zusatzaufwand etwas besser sein kann als mit C. Das ist dein 
Anwendungsfall. Du versuchst aber bei jeder Gelegenheit, diese Aussage 
auch für grössere Projekte zu verallgemeinern, was Quatsch ist.

Wenn man diesen Standpunkt dann angreift, dann argumentierst du wiederum 
mit den Miniprojekten. Dort stimmen wir dir ja wie gesagt zu. Aber nicht 
bei grösseren Projekten, wofür du auch nie Argumente bringst, sondern 
eben immer auf die Miniprojekte ausweichst.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Chris D. schrieb:
> Moby A. schrieb:
>> Richtig. Deshalb steckt in diesem Fall das geringste Potential der
>> Verbesserungsmöglichkeiten durch Asm, nämlich Null.
>> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
>> Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße
>> übrigens unbegrenzt. Aber irgendwann kommt der Punkt, an dem der
>> Asm-Programmierer dieses Potential ob der schieren
>> Programmgröße/komplexität nicht mehr heben kann- dann schlägt endgültig
>> die Stunde der Hochsprache.
>
> Und da hat Moby einfach mal Recht.
>
> Je mehr Code man hat, desto eher steigen für den Assembler-Programmierer
> die Chancen, Optimierungsmöglichkeiten zu übersehen. Ein Compiler tut
> das nicht. Der verliert auch nicht den Überblick. Schaut man sich schon
> bei kleinen Programmen (4k) an, wo ein Compiler Dinge findet, die er
> doppelt nutzen kann, dann ist das schon faszinierend (und teilweise
> unfassbar). Da muss man einfach den Hut vor den Compilerjungs ziehen.

Es ist doch so, dass auf der einen Seite Moby ständig den Vergleich
zwischen Assembler und C für irgendwelche Miniprogramme sucht. Auf der
anderen Seite sagen die C-Verfechter, dass C seine Vorteile erst ab
einer gewissen Codegröße ausspielt.

Ich sehe da eigentlich gar keinen Konflikt. Auch Moby ist ja nach
eigenen Worten der Ansicht, dass für größere Programme Hochsprachen
durchaus von Vorteil sind, und bei Dingen wie dem TCP/IP-Stack geht er
sogar noch einen Schritt weiter und kauft sich dafür für fast den
100fachen Preis eines ATtiy13 gleich ein komplettes Hardwaremodul.

Die Frage (an der sich wohl hauptsächlich der Streit entzündet) ist nur:

Jonny O. schrieb:
> Ab welcher Codegröße / Komplexität lohnt es sich denn nicht mehr ASM
> einzusetzen?

Mobys Antwort darauf könnte die längst festgefahrene Diskussion evtl.
wieder etwas weiterbringen:

Nennt er als Grenze bspw. 200 Byte, würde ich (und wahrscheinlich viele
andere auch) das sofort akzeptieren und die Diskussion als abgeschlossen
betrachten. Mein längstes Programm in AVR-Assembler war etwa 512 Byte
groß (ein halbvoller ATtiny15), und für dessen Entwicklung brauchte ich
einschließlich Fehlersuche und nachträglicher Ergänzungen etwa 2
Stunden. Den größte Anteil daran hatte nicht das Programmieren selber,
sondern das Nachschlagen im Datenblatt nach der Verwendung von ADC,
Timer, EEPROM usw. auf dem ATtiny15, den ich vorher noch nicht im
Einsatz hatte. Unter diesem Gesichtspunkt wäre ich in C auch nicht arg
viel schneller gewesen, so dass die 2 Stunden für mich akzeptabel sind.
Ich hatte also bei 512 Byte Codegröße durch die Assemblerprogrammierung
kaum Nachteile (allerdings auch keine Vorteile).

Nennt Moby hingegen einen deutlich höheren Wert, bspw. 4 KiByte, würden
diesen die meisten C-Programmierer (mich eingeschlossen) als zu hoch
ansehen. Um zu zeigen, dass diese Grenze dennoch richtig ist, müsste
Moby in der Lage sein, in der gleichen Entwicklungszeit und mit gleicher
Speicher- und Laufzeiteffizienz ein 4-KiByte-Assemblerprogramm zu
schreiben wie ein C-Programmierer ein entsprechendes C-Programm. Und da
habe ich so meine Zweifel, ob er das schafft. Einen in diese Richtung
abzielenden "Wettbewerb", den ihm Karl Heinz Buchegger in einem anderen
Thread anbot, hat er jedenfalls abgelehnt.

von Carl D. (jcw2)


Lesenswert?

Xalu X.:
> Auch Moby ist ja nach eigenen Worten der Ansicht, dass für größere Programme
> Hochsprachen durchaus von Vorteil sind

wirklich?

Moby:
> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
> Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße
> übrigens unbegrenzt.

Das ist das, auf dem er immer rum kaut.
Es gibt zwei Möglichkeiten:
entweder will er uns alle verarschen, dann macht er das wirklich gut,
oder er ist genau so wie er sich gibt.
Ich habe mir angewöhnt jemandem, der sich doof stellt, zu glauben. Das 
deckt dann beide Fälle gleichzeitig ab.

Chris D.:
> Das hier ist auch "sein" Thread, also kann er hier auch seine Thesen
> vertreten wie er möchte. Wir Mods haben nur etwas dagegen, wenn er mit
> seiner Asm/AVR-Affinität andere Threads kapert.

Ersteres muß man zugeben, es ist sein Thread, aber nur wenn er hier 
Antworten bekommt, bleibt er auch hier.
Beim Zweiten kann ich leider nicht zustimmen, denn genau das fehlt, wenn 
er wieder einen Thread mit C/C++-Themen mit seinem Assembler- 
Fundamentalismus  flutet. Damit hat er sich hier seinen Ruf kreiert.

: Bearbeitet durch User
von P. M. (o-o)


Lesenswert?

Yalu X. schrieb:
> Nennt er als Grenze bspw. 200 Byte, würde ich (und wahrscheinlich viele
> andere auch) das sofort akzeptieren und die Diskussion als abgeschlossen
> betrachten.

Bereits hier habe ich Zweifel. Ein so kurzes Programm, das primär aus 
dem Setzen von Konfigurationsbits besteht, kann selbst ein simpel 
gestrickter C-Compiler fast 1:1 in Assembler umwandeln. Schwer 
vorstellbar, wo überhaupt Optimierungspotential herausschauen soll.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Carl D. schrieb:
> Beim Zweiten kann ich leider nicht zustimmen

Wenn dir das auffällt: Beitrag melden.

Mir ist in letzter Zeit kein entsprechender Thread mehr zu Gesicht
bekommen, bei dem wir nicht konsequent gelöscht haben, aber wir sehen
natürlich auch nicht jeden Thread an.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Carl D. schrieb:
> Xalu X.:
>> Auch Moby ist ja nach eigenen Worten der Ansicht, dass für größere Programme
>> Hochsprachen durchaus von Vorteil sind
>
> wirklich?

Ja, bspw. hier:

Moby A. schrieb:
> Der Hammer hat seine Berechtigung wie der Schraubenzieher auch.
> Problematisch wirds, wenn das eine Werkzeug vorgibt, die Arbeit des
> anderen effizienter tun zu können. 'Arbeit' steht dabei für das
> Zielgebiet: Asm für einfache MSR, Hochsprache für große, rechen- und
> datenintensive Anwendungen.

Moby A. schrieb:
>> Und bis du bei einem solchen Betriebssystem die Handoptimierung des
>> Codes fertig hast ist die dazu empfohlene Strategie aufgrund neuer
>> Implementierungs-Architekturen schon 2 Generationen weiter und du kannst
>> von vorne anfangen.
>
> In der Praxis hast Du angesichts dieser Entwicklung recht: Sich auf eine
> übergeordnete (Hochsprachen-)Ebene zu begeben scheint geboten.

Moby A. schrieb:
> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
> Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße
> übrigens unbegrenzt. Aber irgendwann kommt der Punkt, an dem der
> Asm-Programmierer dieses Potential ob der schieren
> Programmgröße/komplexität nicht mehr heben kann- dann schlägt endgültig
> die Stunde der Hochsprache.

Allerdings sind diese Programme aus seiner Sicht keine "typischen
8-Bit-Anwendungen" mehr und liegen somit außerhalb seines Horizonts.
Aber statt die komplexeren Programmteile in einer Hochsprache zu
programmieren oder als Hochsprachenquellcode irgendwo herunterzuladen
(was im Falle des TCP/IP-Stack durchaus möglich wäre), kauft er sich für
teures Geld lieber ein fertig programmiertes Hardwaremodul (den XPort
Pro).

P. M. schrieb:
> Yalu X. schrieb:
>> Nennt er als Grenze bspw. 200 Byte, würde ich (und wahrscheinlich viele
>> andere auch) das sofort akzeptieren und die Diskussion als abgeschlossen
>> betrachten.
>
> Bereits hier habe ich Zweifel. Ein so kurzes Programm, das primär aus
> dem Setzen von Konfigurationsbits besteht, kann selbst ein simpel
> gestrickter C-Compiler fast 1:1 in Assembler umwandeln.

Vollkommen richtig. Hinzu kommt allerdings noch der Code für die BSS-
und Stack-Initialisierung, der bei solchen Miniprogrammen oft gar nicht
erforderlich ist, sich aber trotzdem in der Codegröße niederschlägt.

Natürlich stören diese zusätzlichen ca. 20 Byte außer Moby niemanden, da
selbst der kleinste AVR deutlich mehr als 200 Byte Flash hat. Mobys
Argument, warum dieser Overhead doch stört: Irgendwann möchte man das
Miniprogramm vielleicht erweitern, und dann könnten die 20 Byte doch
wertvoll sein.

Allerdings kratzt der Code in diesem Fall schon etwa 1 KiByte-Grenze des
ATtiny13 und ist damit groß genug, dass der C-Compiler mit hoher
Wahrscheinlichkeit an anderer Stelle seine Stärken ausspielen kann.

von Carl D. (jcw2)


Lesenswert?

@Xalu:
Du gibst aber zu, das in den aufgezählten Moby-Schnipseln sowohl die 
eine als auch die andere Richtung als die einzig Wahre bezeichnet 
wird.

O-Ton:
> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
> Verbesserungspotential wächst. Das wächst mit zunehmender
> Programmgröße
> übrigens unbegrenzt. Aber irgendwann kommt der Punkt, an dem der
> Asm-Programmierer dieses Potential ob der schieren
> Programmgröße/komplexität nicht mehr heben kann- dann schlägt

Also:
- der Vorteil von ASM beginnt bei der ersten Zeile
- er wächst mit der Programmgröße
- es gibt keine Obergrenze für ASM
Alles klar, oder?

Ich gebe zu, er kann geschickt Andere manipulieren. Solange man sich 
einlullen läst.

von Robert L. (lrlr)


Lesenswert?

das nach
>Aber ...
ignorieren wir?



wie ich oben schon mal geschreiben habe..
ist wie mit Schach:
ich kann die Regeln, theoretisch könnte ich also gegen jeden 
Schachcomputer gewinnen..

von Carl D. (jcw2)


Lesenswert?

> das nach
>>Aber ...
> ignorieren wir?

Dann hätte ich einfach weggelassen.
Wollte ich aber nicht, denn erst am Stück zeigt sich, daß er in 2 
aufeinanderfolgende Sätzen von der "unbegrenzten Begrenztheit" schreibt.

von Michael K. (Gast)


Lesenswert?

PIC10F200: 375B Flash, 16B Ram
Ich wäre ja bereit auf ASM zu wechseln, aber der C Compiler weigert sich
einfach den Code so aufzublähen das ich das muß.
Ich habe auch überhaupt keinen Ergeiz statt 40% freier Recourcen mittels 
ASM auf 45% zu kommen.

Den gleichen Codeschnipsel kann ich fast unverändert auch für AVR,
XMEGA, STM8 und diverse PICs verwenden ohne mir nur ein mal die Frage
stellen zu müssen wie der entsprechende ASM Befehlssatz aussieht und
welche Register mir zur Verfügung stehen.

Die 'reine ASM Lehre' habe ich mir das letze mal bei 8085 & 8051
gegeben.
Das ging oft garnicht anders um ein definiertes Timing zu bekommen.
Ausserdem konnte ich mir die sündhaft teuren und nicht sehr guten
C-Kompiler nicht leisten. Das ist aber 25 Jahre her.
Für 30Cent bekomme ich heute einen STM8S003 mit 16 MHz, 8KB flash, 1K
Ram der vollgestopft ist mit jeder Menge Hardware die exotische
Softwareverenkungen unnötig macht.

Ist ja toll wenn man so auf ASM abgeht, mir ist das aber zu fixiert auf
eine Controller Familie.

von Sheeva P. (sheevaplug)


Lesenswert?

Yalu X. schrieb:
> Es ist doch so, dass auf der einen Seite Moby ständig den Vergleich
> zwischen Assembler und C für irgendwelche Miniprogramme sucht. Auf der
> anderen Seite sagen die C-Verfechter, dass C seine Vorteile erst ab
> einer gewissen Codegröße ausspielt.
>
> Ich sehe da eigentlich gar keinen Konflikt.

Bis hierhin ist da ja auch kein Konflikt mehr...

> Auch Moby ist ja nach eigenen Worten der Ansicht, dass für größere
> Programme Hochsprachen durchaus von Vorteil sind,

Das ist allerdings eine ganz neue Aussage von ihm. Zuvor hat er etwas 
ganz anderes behauptet: Hochsprachenentwicklern ginge es nur um 
Verschleierung, Verkomplizierung und Ressourcenerschwendung, und so ein 
Compiler würde nur "unzulängliche grobe C-Bausteine" zusammensetzen. Ein 
paar Zitate dazu:

"Weil eine Hochsprache ein Programm quasi aus Fertigbausteinen
zusammensetzt und die Aufgabenstellung damit nur unter Verlusten an
Platz und Performance gegenüber der feiner an die Gegebenheiten
anpassbaren Asm-Programmierung lösen kann."

"Ist nur blöd, wenn der Fehler am System liegt- zur eigentlichen zu 
entwickelnden Programmlogik immer noch zusätzlich die Suche nach dem 
besten der groben C-Bausteine samt passender Verkettungsausdrücke
hinzukommt."

"Die optimale Ausnutzung der Hardware ist aber gerade das was den 
Vorteil von Asm ausmacht [...] alles hat irgendwo seinen Preis. Der 
bedeutet im Fall der (bequemeren?) Hochsprachenverwendung immer 
Platz-und Performancenachteile. Ganz gleich, wie gut ein Compiler sein 
mag."

"Nun, Hochsprachenkonzepte sind allesamt ersponnen."

"Ich sag Dir mal was man wirklich nur muss:Die paar Asm-Instructions und 
seinen Controller richtig kennen- das reicht für ewig." (sic!)

"Du nimmst natürlich einen 32-Bit ARM! Dann hast Du Spielraum genug für 
ineffizientes Programmieren."

"Mein Gott, ich verstehs ja. Da hat sich jemand eine großartige 
Entwicklungsumgebung aufgebaut, jahrelang mit 1000 Seiten Schmökern 
gepaukt, womöglich studiert und muss sich nun von einem dahergelaufenen 
Bastler sagen lassen, daß sich eine große Abzahl an typischen 
Programmieraufgaben mit ein paar Asm-Wortfetzen erschlagen lassen."

Insofern sollten wir Moby zu seinem Erkenntnisgewinn beglückwünschen, 
daß er nach vielen Monaten und mehreren ewig langen Threads endlich 
eingesehen hat: "Aber irgendwann kommt der Punkt, an dem der 
Asm-Programmierer dieses Potential ob der schieren 
Programmgröße/komplexität nicht mehr heben kann- dann schlägt endgültig 
die Stunde der Hochsprache." Das ist genau das, was ihm zwei Dutzend 
sehr erfahrene professionelle Entwickler immer wieder mal mit mehr, mal 
mit weniger Geduld zu erklären versucht haben.

: Bearbeitet durch User
von Carl D. (jcw2)


Lesenswert?

> Insofern sollten wir Moby zu seinem Erkenntnisgewinn beglückwünschen

Abwarten bis er wieder auftaucht!

: Bearbeitet durch User
von Operator S. (smkr)


Lesenswert?

Diese Offenbarung ist tatsächlich neu und bisher weigerte er sich das zu 
akzeptieren.

Mein grösseres Problem ist aber das er meint ein einfacher AVR mit 
simplen ASM reicht für alles aus. Dabei sagt er selbst, dass er für 
gewisse Funktionen ein externes Modul anflanscht und dieses dann 
anspricht. Das auf besagtem Modul ein Cortex-M sitzt und in C oder gar 
C++ programmiert wurde, hat aber natürlich nichts mit seiner 
Argumentation zu tun.

In einer Parallelwelt würde er argumentieren man brauche doch gar nicht 
so etwas ineffizientes und kompliziertes wie ein Auto, danach ins Taxi 
steigen und uns beim wegfahren auslachen.

: Bearbeitet durch User
von Witkatz :. (wit)


Lesenswert?

Operator S. schrieb:
> Mein grösseres Problem ist aber das er meint...

Und bestimmt nicht nur deins, denn das ist die Kernaussage dieses 
Threads ;-)

Warum lassen sich professionelle Softwareentwickler von einem 
Kleinbastler so leicht provozieren? Passt er vielleicht in deren 
Beuteschema und weckt den Jagdinstinkt?

Carl D. schrieb:
> Abwarten bis er wieder auftaucht!

Die Jagd ist voll im Gange?

Jörg W. schrieb:
> Einmal in die Enge getrieben, schlägt er wild um sich.

Ujujuj, das arme Bastlerchen ;-)

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?


von Operator S. (smkr)


Lesenswert?

Witkatz :. schrieb:
> Warum lassen sich professionelle Softwareentwickler von einem
> Kleinbastler so leicht provozieren?

Gut das war falsch formuliert. Insgeheim freue ich mich über jeden 
seiner Threads, sowohl dieser, wie auch jener des Sensorboards. Es 
erheitert meinen Tag und befreit die Gedanken, um danach weiter zu 
arbeiten.
Dies meine ich übrigens nicht im ironischen Sinne, sondern ist ernst 
gemeint.

Nun, warum man sich darüber aufregt? Das ist vermutlich gegenstand 
einiger Doktorarbeiten in der Psychologie. Denn es scheint bereits 
erwiesen, dass Ings und Infs sich übermässig enervieren können, siehe 
dazu auch verschiedene Threads im Forum (Warum hier alle so unhöflich 
sind) oder auch mal einen Artikel über Linus Torvalds sozialverhalten im 
Internet.
Ich muss zugeben das ich mich auch manchmal provozieren lasse. Wichtig 
ist aber das man das erkennt und im nachhinein darüber lachen kann, oder 
gar sich Entschuldigen wenns denn ein eigener Fehler war.

Im besten Fall ärgert man sich schon im vorherein nicht, aber ohne das 
Warum zu kennen, wirds schwierig.
Ausserdem wäre so manch amüsanter Thread so gar nie entstanden ;-)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Operator S. schrieb:
> Diese Offenbarung ist tatsächlich neu und bisher weigerte er sich das zu
> akzeptieren.

Ganz neu ist sie nicht, sie trat auch schon in früheren Threads zutage.

> Mein grösseres Problem ist aber das er meint ein einfacher AVR mit
> simplen ASM reicht für alles aus.

Genau das ist der Punkt.

Und um von seiner These trotz schlagkräftiger Argumente anderer keinen
Millimeter abrücken zu müssen, schränkt er einfach das "alles" immer
mehr ein.

Beispiele:

In einem anderen Thread wurde das Thema Arithmetik mit mehr als 8 Bit
hervorgebracht, die in C definitiv leichter handzuhaben ist als in
AVR-Assembler. Mobys Gegenargument (sinngemäß): Programme, die
Berechnungen ausführen, die komplizierter sind als eine 8-Bit-Addition,
sind keine typischen 8-Bit-Anwendungen. Sie sind damit für Moby nicht
relevant und außerhalb seines Betrachtungsbereichs.

In diesem Thread ging es um den TCP/IP-Stack. Der wird von Moby einfach
in ein externes Modul ausgelagert und ist damit ebenfalls out-of-scope.

Am Schluß besteht "alles" nur noch aus ca. 1% aller µC-Anwendungen,
nämlich diejenigen, bei denen Daten von einer einfachen Schnittstelle
(bspw. Digital-I/O oder ADC) gelesen, auf einfache Weise verarbeitet
(bspw. Entprellung oder Mittelwertbildung) und auf einer anderen
einfachen Schnittstelle (bspw. UART) wieder ausgegeben werden. Diese
(und nur diese) Aufgaben lassen sich in Assembler tatsächlich fast
genauso leicht realisieren wie in C.

Dinge wie die Linearisierung von Sensordaten, ein PID-Regler, ein
Kalman-Filter oder dergleichen, können i.Allg. ebenfalls sehr gut mit
8-Bit-Controllern wie den AVRs realisiert werden und sind in C immer
noch ziemlich leicht zu implementieren. Ihre Programmierung in Assembler
erfordert aber deutlich größere Anstrengungen. Anders als für den Rest
der Welt sind das für Moby aber keine typischen 8-Bit-Anwendungen.

De facto ist es so, dass alles, was in C leichter zu realisieren ist als
in AVR-Assembler, für Moby keine typischen 8-Bit-Anwendungen und damit
nicht Gegenstand der Diskussion sind. Als typische 8-Bit-Anwendungen und
damit als Diskussionsgegenstand bleiben folglich nur die so genannten
"Micky-Maus-Progrämmchen" übrig.

Trotzdem würde mich nach wie vor interessieren, wo Moby größenmäßig die
Grenze der Micky-Maus- ... äh ... der typischen 8-Bit-Anwendungen sieht.

von Thomas E. (thomase)


Lesenswert?

Yalu X. schrieb:
> Trotzdem würde mich nach wie vor interessieren, wo Moby größenmäßig die
> Grenze der Micky-Maus- ... äh ... der typischen 8-Bit-Anwendungen sieht.

ca. 25% der Kapazität eines Attiny13. Damit noch Platz für Erweiterungen 
bleibt.

Nein, ich denke, die Grenze wird erreicht sein, wenn die 32 von ihm fest 
belegten Register nicht mehr ausreichen.

mfg.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Yalu X. schrieb:
> De facto ist es so, dass alles, was in C leichter zu realisieren ist als
> in AVR-Assembler, für Moby keine typischen 8-Bit-Anwendungen und damit
> nicht Gegenstand der Diskussion sind.

Das ist doch ziemlich tricky, oder?

Wenn man hier die Logikmaschine anwirft, kann man nur zu einem Schluss 
kommen:

  "Typische 8-Bit-Anwendungen sind in ASM geschrieben".

Denn obige Definition lässt gar keinen anderen Schluß zu.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Frank M. schrieb:
> Wenn man hier die Logikmaschine anwirft, kann man nur zu einem Schluss
> kommen:
>
>   "Typische 8-Bit-Anwendungen sind in ASM geschrieben".
>
> Denn obige Definition lässt gar keinen anderen Schluß zu.

Eben.

Deswegen ist dem Moby ja mit Argumenten auch so schwer beizukommen :)

von P. M. (o-o)


Lesenswert?

Frank M. schrieb:
> Wenn man hier die Logikmaschine anwirft, kann man nur zu einem Schluss
> kommen:

Er wirft die Logikmaschine eben gezielt weg. Die Argumentationskette hat 
immer die Länge 1, so kann man prinzipbedingt keine Widersprüche oder 
Zirkelschlüsse aufdecken. Diese Diskussionsweise ist durchaus 
erfolgsversprechend, da der Gegner prinzipiell komplizierter 
argumentieren muss als man selbst: Man selbst kann immer einen 
einfachen, "richtigen" Schluss vorbringen, während der Gegner anhand 
mindestens zwei Argumenten zeigen muss, dass man Unsinn erzählt. Für 
viele Zuhörer in der Runde mag dies bereits zu viel sein.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

P. M. schrieb:
> Er wirft die Logikmaschine eben gezielt weg. Die Argumentationskette hat
> immer die Länge 1,

Naja, das ist halt in Assembler geschrieben. In Assembler, der Mobys 
Komplexitätsanforderungen genügt.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Moby A. schrieb:
> Auf diesem Feld ist gerade kein Blumentopf zu gewinnen ;-)
>
> Deswegen meidest du die Antwort auf meine Frage:
>
>   Wozu eigentlich ein Assembler? wenn es ein Hexeditor auch tut.
>
> wie der Teufel das Weihwasser...

Die Frage ist natürlich allenfalls eine praktischer Bequemlichkeit... 
Ich geh mal davon aus, daß Dir das selbst bewußt ist und der Einwand 
anderen Zwecken folgt ;-)

Sheeva P. schrieb:
> Ist die Lebenszeit des Programmierers keine Ressource? Mir scheint dies
> die wertvollste Ressource überhaupt zu sein.

Absolut. Ich fokussiere mich aber auf die MC-Ressourcen und ggf. 
Einsparmöglichkeiten bei der puren Hardware-Auswahl. Die Frage des 
Verhältnisses von Programmier-Zeitbedarf zur MC-Ressourceneinsparung ist 
trotzdem eine berechtigte.
Mindestens mal im Universum typischer 8-Bit MSR Apps lässt sich aber 
sagen: Die Antwort dürfte höchst individuell ausfallen. Je nach Übung, 
Vorbereitung, System... was ja auch bei Hochsprache hilfreich ist, nur 
leider ohne die letztlich erreichbare Asm-Effizienz ;-(

von Moby A. (moby-project) Benutzerseite


Lesenswert?

be s. schrieb:
> Hier wurde bereits bewiesen, dass C sogar speicherplatzsparender
> als Mobys Assembler sein kann:
> Beitrag "Re: C versus Assembler->Performance"

Und nochmal: Da wird nichts bewiesen. Freilich kann prinzipiell auch 
jeder ASMler den Flash unnütz füllen.

Chris D. schrieb:
> allerdings war bei etwa 4-8k Codegröße dann Schluß

So. Und nun überlegt Euch einmal, wieviel Millionen MSR Anwendungen sich 
schon in 1-2KB Asm Code verpacken lassen.

> Und da hat Moby einfach mal Recht.

Unfassbar. Das muss ich erstmal sacken lassen ;-)

> Je mehr Code man hat, desto eher steigen für den Assembler-Programmierer
> die Chancen, Optimierungsmöglichkeiten zu übersehen. Ein Compiler tut
> das nicht.

Nicht unbedingt. Oft folgen die Optimierungsmöglichkeiten von Asm bei 
der freien Wahl der MC-Ressourcen einem einfachen System, nutzen 
prinzipielle Schwächen einer Compiler-Lösung aus. Und sie sind bei sagen 
wir mal bis 10K Code durchaus überschaubar!

> bei kleinen Programmen (4k) an, wo ein Compiler Dinge findet, die er
> doppelt nutzen kann, dann ist das schon faszinierend (und teilweise
> unfassbar). Da muss man einfach den Hut vor den Compilerjungs ziehen.

Ja, ganz nett. Aber das reicht nicht, um an gut handoptimiertem Asm 
vorbeizuziehen!

> Ich würde also aus der Praxis heraus behaupten, dass ab einer gewissen
> Codegröße der Compiler den Assemblerprogrammierer auch recht locker in
> der Codegröße schlägt.

Richtig. Weil ab einer bestimmten Projektgröße der Überblick 
verlorengeht. Trotzdem sind der Möglichkeiten des Asm-Programmierers 
diesen zu behalten auch nicht gerade wenige.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Frank M. schrieb:
> das Mittel der Wahl und alles größer als ATTiny Teufelswerk, was man
> nicht braucht.

Für jeden Zweck die richtigen Mittel.
Die AVR-Reihe bis hoch zum XMega stemmt einen Großteil typischer 8-Bit 
MSR Apps, wobei die Verwendung von Asm den Einsatzhorizont noch einmal 
ordentlich ausdehnt. Was ist daran nur so schwer zu verstehen?

> Fazit: Moby hats drauf, bewusst zu provozieren. Das macht er aber nicht
> offen, sondern sehr verdeckt.

Eine Deiner vielen Unterstellungen. Warum willst Du den Fall, daß Asm 
tatsächlich Vorteile bietet auch partout nicht in Deine Überlegungen 
einbeziehen?
<Beileid> Ist es so schlimm? </Beileid>

Jörg W. schrieb:
> Einmal in die Enge getrieben, schlägt er wild um sich.  Siehe ganz oben
> auf dieser Seite, wo er mich des „Märchenerzählers“ bezichtigt, um kurz
> danach selbst zu behaupten, die Peripherals eines Xmega seien eigentlich
> die gleichen wie bei einem MegaAVR, nur „die paar Steuerbits anders
> verteilt“.

Wo siehst Du da einen Widerspruch?
Genauso ist das.  Wie es ausschauen würde wenn ich wild um mich schlüge 
hast Du hier noch nicht erlebt- das wär auch wenig überzeugend ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

P. M. schrieb:
> Moby A. schrieb:
> Mit jeder Zeile mehr stehen die Chancen von Asm besser, da das
> Verbesserungspotential wächst. Das wächst mit zunehmender Programmgröße
> übrigens unbegrenzt
>
> Das ist schlicht und einfach extremer Unsinn. Ab einer gewissen Grösse
> hat der Mensch unmöglich den Überblick, um weitgreifend zu optimieren.

Du hast einfach nicht bis zum Ende gelesen...

> Um es zusammenzufassen: Wir haben dir schon lange zugestimmt, dass
> man mit Assembler auf sehr kleinen Mikrocontrollern bei kleinen
> Projekten mit wenig Zusatzaufwand etwas besser sein kann als mit C.

... um dann wenigstens das zuzugestehen (wenn auch wieder mit vielerlei 
Relativierung). Immerhin ;-)

> eben immer auf die Miniprojekte ausweichst.

Ja. So ein praktisches Miniprojekt verdeutlicht das Prinzip -hier- am 
besten, ist am ehesten nachvollziehbar. Aber Code ist Code, ob mehr, ob 
weniger...

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Yalu X. schrieb:
> bei Dingen wie dem TCP/IP-Stack geht er
> sogar noch einen Schritt weiter und kauft sich dafür für fast den
> 100fachen Preis eines ATtiy13 gleich ein komplettes Hardwaremodul.

Das hast Du aber jetzt schön in Beziehung gesetzt.
Hatte ich nicht schon erwähnt daß mein Xport an einem Xmega hängt?

> Nennt er als Grenze bspw. 200 Byte, würde ich (und wahrscheinlich viele
> andere auch) das sofort akzeptieren

Grenzen zu nennen ist inakzeptabel...
Wenn mein größtes Asm Projekt 10K erreicht heißt das noch lange nicht 
daß da nicht noch mehr ginge!

> Um zu zeigen, dass diese Grenze dennoch richtig ist, müsste
> Moby in der Lage sein, in der gleichen Entwicklungszeit und mit gleicher
> Speicher- und Laufzeiteffizienz ein 4-KiByte-Assemblerprogramm zu
> schreiben wie ein C-Programmierer ein entsprechendes C-Programm.

Es gibt keine "richtige" Grenze sondern nur eine, die von Übung, 
Vorbereitung, System und konkreter App höchst individuell ausfällt. Die 
Entwicklungszeit des Asm-Projekts dürfte grob geschätzt länger sein, ja. 
Aber die Effizienzvorteile von Asm sind auch kein Geschenk... Hatte ich 
das irgendwo behauptet?

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Carl D. schrieb:
> Ersteres muß man zugeben, es ist sein Thread, aber nur wenn er hier
> Antworten bekommt, bleibt er auch hier.

Darauf würde ich mich nicht verlassen, denn

> wenn er wieder einen Thread mit
> C/C++-Themen mit seinem Assembler- Fundamentalismus  flutet.

nutzt er nur die Gelegenheit am praktischen Beispiel, die Ineffizienz 
von C++ nicht nur vom resultierenden Code her, sondern auch die unnütze 
Komplexität der Programmerstellung selber bloßzustellen. Unvergessen 
sind mir da manche monströsen Ausdrücke bloß um ein paar Portpins zu 
beeinflussen. Fundamentalismus schließlich ist etwas anderes: Das wäre 
dann der Fall würde man die Sinnhaftigkeit einer Programmiersprache von 
der Anwendung entkoppeln; Vor-und Nachteile der Sprachen ignorieren.

Michael K. schrieb:
> Ist ja toll wenn man so auf ASM abgeht, mir ist das aber zu fixiert auf
> eine Controller Familie

Zwischem beidem existiert ein Zusammenhang ;-)

Sheeva P. schrieb:
> Das ist genau das, was ihm zwei Dutzend
> sehr erfahrene professionelle Entwickler immer wieder mal mit mehr, mal
> mit weniger Geduld zu erklären versucht haben.

Irrtum. Dazu mal ein Tipp: Zähl mal wie oft ich den Ausdruck "für 
typische 8-Bit'"MSR-Apps verwende. Das hat einen Hintergrund! Darauf und 
nur darauf beziehe ich die Vorteile von Asm seit jeher! Das fällt auch 
immer wieder bevorzugt unter den Tisch.

von Carl D. (jcw2)


Lesenswert?

Q.e.d.

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Operator S. schrieb:
> Diese Offenbarung ist tatsächlich neu und bisher weigerte er sich
> das zu akzeptieren.

S.O.

> Mein grösseres Problem ist aber das er meint ein einfacher AVR mit
> simplen ASM reicht für alles aus.

Ach was. Größere Berechnungen und Datenmengen hatte ich hier schon als 
Gegenindikation genannt.

> Dabei sagt er selbst, dass er für
> gewisse Funktionen ein externes Modul anflanscht und dieses dann
> anspricht. Das auf besagtem Modul ein Cortex-M sitzt und in C oder gar
> C++ programmiert wurde, hat aber natürlich nichts mit seiner
> Argumentation zu tun.

Warum sollte ich das ideologisch beschränkt verweigern? Soll der 
Cortex-M doch dort seine Berechtigung haben (obwohl ich das jetzt aus 
eigener Erfahrung nicht bestätigen kann). Der Einsatz externer Module 
ist, zumindest für mich als Bastler, auch eine Frage von Effizienz- auf 
einer übergeordneten Ebene quasi. Niemand hat dem Sinn von 32-Bit ARM 
hier widersprochen, wär auch reichlich blöd bei dem Boom den die gerade 
erleben. Aber: Das muß bei den Millionen Anwendungen denen ein 8-Bitter 
genügt nicht nennenswert beeindrucken ;-)

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Operator S. schrieb:
> Insgeheim freue ich mich über jeden
> seiner Threads, sowohl dieser, wie auch jener des Sensorboards. Es
> erheitert meinen Tag und befreit die Gedanken, um danach weiter zu
> arbeiten.
> Dies meine ich übrigens nicht im ironischen Sinne, sondern ist ernst
> gemeint.

Da freu ich mich auch.

> Nun, warum man sich darüber aufregt? Das ist vermutlich gegenstand
> einiger Doktorarbeiten in der Psychologie. Denn es scheint bereits
> erwiesen, dass Ings und Infs sich übermässig enervieren können,

Ich sehe eher ein gewisses C-Selbstbewußtsein getroffen. Kann doch nicht 
sein daß man so vieles auch einfacher in Asm erledigen kann!

Yalu X. schrieb:
> Am Schluß besteht "alles" nur noch aus ca. 1% aller µC-Anwendungen,
> nämlich diejenigen, bei denen Daten von einer einfachen Schnittstelle
> (bspw. Digital-I/O oder ADC) gelesen, auf einfache Weise verarbeitet
> (bspw. Entprellung oder Mittelwertbildung) und auf einer anderen
> einfachen Schnittstelle (bspw. UART) wieder ausgegeben werden. Diese
> (und nur diese) Aufgaben lassen sich in Assembler tatsächlich fast
> genauso leicht realisieren wie in C.

Deine 1% würde ich eher denen hier zuordnen (solange tatsächlich 
8-bittig verwirklicht):

> Dinge wie die Linearisierung von Sensordaten, ein PID-Regler, ein
> Kalman-Filter oder dergleichen, können i.Allg. ebenfalls sehr gut mit
> 8-Bit-Controllern wie den AVRs realisiert werden

Im SmartHome beispielsweise braucht man viele verschiedene Funktionen 
für Sensor- und Aktordaten.
Größere Datenmengen und Berechnungen gibts da sehr wenig. Vielleicht bau 
ich ja mal einen Quadrocopter. Da nehm ich dann 32-Bit mit Hochsprache, 
versprochen ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Moby A. schrieb:
> Größere Datenmengen und Berechnungen gibts da sehr wenig.

Ich weiß ja nicht …
1
      sht21_measure(0xe3, b, 3);
2
      v = ((uint16_t)b[0] << 8) | b[1];
3
      double t = -46.85 + 175.72 * (double)v / 65536.0;
4
5
      ht21_measure(0xe5, b, 3);
6
      v = ((uint16_t)b[0] << 8) | (b[1] & 0xfc);
7
      double h = -6.0 + 125.0 * (double)v / 65536.0;
8
9
      TRX_PRINTF("SHT-21#1 %5.2f oC, %5.2f %% RH\r\n", t, h);

Man kann die Berechnung sicher auch irgendwo mit scaled integers
durchziehen statt mit float/double, aber wenn ich mit den durch den
SHT21 gemessenen Werten für Temperatur und Feuchtigkeit etwas
anfangen will, dann muss ich rechnen.

Noch schlimmer sieht's bei so einem Luftdrucksensor (MPL1115) aus:
1
    barometer_init();
2
3
    uint8_t params[8];
4
    barometer_read(4, 8, params);
5
6
    int a0_int = (params[0] << 8) + params[1];
7
    a0 = a0_int / 8.0;
8
    int b1_int = (params[2] << 8) + params[3];
9
    b1 = b1_int / 8192.0;
10
    int b2_int = (params[4] << 8) + params[5];
11
    b2 = b2_int / 16384.0;
12
    int c12_int = (params[6] << 8) + params[7];
13
    c12 = c12_int / (16384.0 * 1024.0);
14
15
//…
16
  uint8_t results[4];
17
18
  barometer_read(0, 4, results);
19
  unsigned padc = (results[0] << 2) + (results[1] >> 6);
20
  unsigned tadc = (results[2] << 2) + (results[3] >> 6);
21
22
  double pcomp = a0 + (b1 + c12 * (double)tadc)
23
  * (double)padc + b2 * (double)tadc;
24
  double pressure = pcomp * ((115 - 50) / 1023.0) + 50;
25
26
  PRINTF("0000: %.1f hPa" NL, pressure * 10);

Initial muss man sich dort ein paar Kalibrierwerte auslesen, dann
muss man bei jeder Messung die interne Temperatur messen zusätzlich
zu den Messwerten des Druckaufnehmers, und diese gemäß der Formel
im Datenblatt umrechnen.

Wie gesagt, über floating point vs. scaled integer würde ich hier
nicht diskutieren, geht sicher auch mit letzterem.  Aber „keine
Berechnungen“?  Oder ist jetzt das Messen von Temperatur, Luftdruck
und Luftfeuchtigkeit plötzlich „keine typische Aufgabe für einen
8-Bitter“ mehr?

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Nein, ich denke, die Grenze wird erreicht sein, wenn die 32 von ihm fest
> belegten Register nicht mehr ausreichen.

So wird nie eine Grenze erreicht. Asm-Programmierer-System bedingt ;-)

Frank M. schrieb:
>   "Typische 8-Bit-Anwendungen sind in ASM geschrieben".

So es der Programmierer einzusetzen weiß und keine der erwähnten Gründe 
entgegenstehen ist das von Vorteil!

P. M. schrieb:
> Frank M. schrieb:
> Wenn man hier die Logikmaschine anwirft, kann man nur zu einem Schluss
> kommen:
>
> Er wirft die Logikmaschine eben gezielt weg. Die Argumentationskette hat
> immer die Länge 1, so kann man prinzipbedingt keine Widersprüche oder
> Zirkelschlüsse aufdecken. Diese Diskussionsweise ist durchaus
> erfolgsversprechend, da der Gegner prinzipiell komplizierter
> argumentieren muss als man selbst: Man selbst kann immer einen
> einfachen, "richtigen" Schluss vorbringen, während der Gegner anhand
> mindestens zwei Argumenten zeigen muss, dass man Unsinn erzählt. Für
> viele Zuhörer in der Runde mag dies bereits zu viel sein.

Machts doch nicht wieder (C-Programmierer typisch;-) so kompliziert! Ich 
habe mir die Mühe gemacht hier ein praktisches Asm-Projektbeispiel mit 
wenig Funktionalität zur Veranschaulichung reinzustellen. Soll das doch 
jemand effizienter in C coden. Solange das nicht passiert brauchen wir 
hier nicht theoretisch mit Logikmaschinen, Argumentationsketten und 
Zirkelschlüssen herumlamentieren ;-(

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Initial muss man sich dort ein paar Kalibrierwerte auslesen, dann muss
> man bei jeder Messung die interne Temperatur messen zusätzlich zu den
> Messwerten des Druckaufnehmers, und diese gemäß der Formel im Datenblatt
> umrechnen.

DESHALB sagte ich "sehr wenig"!
Ich habe auch einen ähnlichen Kombisensor in meiner Wetterstation mit 
ähnlichem Procedere. Das ging natürlich auch in Asm, ist aber etwas 
aufwendig.

> Oder ist jetzt das Messen von Temperatur, Luftdruck und Luftfeuchtigkeit
> plötzlich „keine typische Aufgabe für einen 8-Bitter“ mehr?

Dem umständlichen Messwert-Berechnen kann man übrigens mit vielen 
einfachen analogen Sensoren für jede der 3 Größen effektiv aus dem Wege 
gehen...

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Moby A. schrieb:
> Dem umständlichen Messwert-Berechnen kann man übrigens mit vielen
> einfachen analogen Sensoren für jede der 3 Größen effektiv aus dem Wege
> gehen...

Warum sollte man?

Die Berechnung oben ist wenige Zeilen, und der kleinste Controller,
den ich dafür habe, hat sowieso 128 KiB Flash.  Das sind ATmega128RFA1,
die ich u. a. eben auch wegen der eingebauten Funkschnittstelle
nehme.  Ersatz durch einen ATtiny* fällt also schon mal aus, denn
das Anflanschen irgendwelcher externer Datenübertragung wäre in jedem
Falle umständlicher.

Die Analogbausteine werden ohnehin kaum genauer sein, der Vorteil der
digitalen ist ja gerade, dass sie all ihre Analogverarbeitung on-board
direkt auf dem Chip machen können, das minimiert die Störeinflüsse.

von Uhu U. (uhu)


Lesenswert?

Moby A. schrieb:
> Uhu U. schrieb:
>> Moby A. schrieb:
>> Auf diesem Feld ist gerade kein Blumentopf zu gewinnen ;-)
>>
>> Deswegen meidest du die Antwort auf meine Frage:
>>
>>   Wozu eigentlich ein Assembler? wenn es ein Hexeditor auch tut.
>>
>> wie der Teufel das Weihwasser...
>
> Die Frage ist natürlich allenfalls eine praktischer Bequemlichkeit...

Aha, wir kommen dem Kern der Sache näher...

Der Hex-Editor ist zweifellos unbequemer, als ein Assembler, man kann 
aber dasselbe damit erreichen, nur mit höherem Aufwand, d.h. auf 
unbequemerem Weg. Wir können das Modell nach "oben" und nach "unten 
erweitern.

Nach "oben": der C-Compiler ist bequemer, als der ASM; ein Generator, 
der automatisch beliebige Probleme analysiert und dann eine Software 
generiert, die genau das macht, was nötig ist, das Problem zu lösen, ist 
noch viel Bequemer, als ein C-Compiler usw. usf...

Nach "unten": Man braucht überhaupt keine Microcontroller, man kann die 
damit gelösten und die dadurch erst geschaffenen Probleme auch umgehen. 
Man landet irgendwann auf dem Niveau des primitivst möglichen 
Organismus, der keine Bedürfnisse mehr hat und nur noch vom 
evolutionären Druck getrieben ist, an dem er scheitern muss, weil er 
sich ja nicht weiter entwickeln "will".


Durch ständige Weiterentwicklung der Technik wird die relative Distanz 
des ASM-Puristen zur Comutersteinzeit immer geringer, d.h. seine 
Arbeitsweise wird immer unbequemer, weil immer unproduktiver - im 
Geschäftsleben ist das ein Aussterbegrund: der arme ASM-Purist bekommt 
nicht mehr genug zu fressen und verhungert. Deswegen geht der Trend in 
Richtung des skizzierten allwissenden Generators, der dem Leuten 
letztlich alle Arbeit abnimmt.

Da beginnt das nächste Problem: was sollen die dann tun, um sich nicht 
zu langweilen? Den ganzen Tag fressen bringts nicht, davon wird man zu 
fett. Man wird also den Generator befragen und der generiert 
möglicherweise diese Antwort:
1
Baue zum Spaß einen Hexeditor und programmiere damit auf einem fossilen
2
Microcontroller ein in 20 Befehlen lösbares Problem deiner Wahl.

Damit steht der Generatorverwöhnte - der natürlich den Generator nicht 
im entfernten durchschaut, sondern ihn für eine göttliche Wundermaschine 
hält - vor dem Problem, die Grundzüge der Computertechnik aus grauer 
Vorzeit neu erfinden zu müssen. Ganz besonders schwer tut er sich dabei 
mit dem EOR-Befehl und das gibt uns wiederum einen heißen Tipp, womit 
wir es hier zu tun haben:

Es ist Moby, der zu faul is, sich die Grundzüge unserer Informatik zu 
rekonstruieren und sich deswegen einfach vom Generator auf die Zeitreise 
ins frühe 21. Jahrhundert schicken ließ um sich von uns alles erklären 
zu lassen.

Mittlerweile hat ihn aber wieder die alte Bequemlicheit erfasst, zu der 
er vom Generator erzogen wurde und er will nichts mehr lernen. Außerdem 
hat der den Trick vergessen, mit dem er die Zeitheimreise antreten kann 
und nun hockt er hier und dreht auf dem Assembler hohl.


Die Moral von der Geschicht:
Wenn man der Zeit so viel voraus ist, wie Moby, sollte man ihr nicht 
hinterher hinken ;-)

von Robert L. (lrlr)


Lesenswert?

Moby A. schrieb:
> Thomas E. schrieb:
>> Nein, ich denke, die Grenze wird erreicht sein, wenn die 32 von ihm fest
>> belegten Register nicht mehr ausreichen.
>
> So wird nie eine Grenze erreicht. Asm-Programmierer-System bedingt ;-)

den Teil solltst nochmal erklären ..
der Optimale ASM code verwendet soviele Register wie möglich (also im 
besten Fall alle..)


jegliches "Asm-Programmierer-System" welches ja dazu dient, dir die 
Übersichtlichkeit oder Erweiterbarkeit oder ... zu verbesser, bedingt 
aber automatisch dass dein Code nicht Optimal (siehe oben) ist...




ps. eigentlich kommt beim Optimalem ASM code, auch erstmal 
geschwindigkeit vor größe...

also erstmal ALLE verfügbaren Resourcen* nutzen, erst wenn diese 
ausgehen, muss man Resourcen* sparen..





*Moby Resourcen sind gemeint..

von (prx) A. K. (prx)


Lesenswert?

Uhu U. schrieb:
> Wenn man der Zeit so viel voraus ist, wie Moby, sollte man ihr nicht
> hinterher hinken ;-)

Herrliche Story, danke!

von Gu. F. (mitleser)


Lesenswert?

Moby A. schrieb:
> Irrtum. Dazu mal ein Tipp: Zähl mal wie oft ich den Ausdruck "für
> typische 8-Bit'"MSR-Apps verwende. Das hat einen Hintergrund! Darauf und
> nur darauf beziehe ich die Vorteile von Asm seit jeher! Das fällt auch
> immer wieder bevorzugt unter den Tisch.

Dann hör jetzt endlch auf um den heisen Brei rum zu reden und zeig 
endlich eine dieser Anwendungen und zwar eine von DIR (!) und eine mir 
mehr als 20 Zeilen. Sagen wir mal lockere 2kB hex code. Dokumentiere die 
Funktionalität so, dass eine eindeutiges Pflichtenheft dabei raus kommt.
Ich halte jede Wette das dich jeder C Neuling der sich im Forum 
herumtreibt deinen code sowohl in Ausführungszeit als auch bzgl. der 
codegröße um Längen schlägt!

Na ja, natürlich kenne jetzt schon deine Antwort... so wie die meisten 
hier ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Die Analogbausteine werden ohnehin kaum genauer sein, der Vorteil der
> digitalen ist ja gerade, dass sie all ihre Analogverarbeitung on-board
> direkt auf dem Chip machen können, das minimiert die Störeinflüsse.

Schon klar. Dafür benötigen die analogen eben keine langwierigen 
Berechnungen und langen oft genauso.
Keep it simple!

Uhu U. schrieb:
> Der Hex-Editor ist zweifellos unbequemer, als ein Assembler, man kann
> aber dasselbe damit erreichen, nur mit höherem Aufwand, d.h. auf
> unbequemerem Weg. Wir können das Modell nach "oben" und nach "unten
> erweitern...

Nette Story. Nur wieder voll am Thema vorbei ;-)
Die Programmentwicklung mit Asm selbst ist heute für 8-Bit MSR eine 
einfache Sache: Code mit den paar dutzend simplen Instruktionen 
schreiben, assemblieren und rauf auf den Controller. Keine umständliche 
Compilerwahl, keine umständlichen C-Konstruktionen, keine "Optimierung" 
usw. usf. Easy und trotzdem effizient.

> Die Moral von der Geschicht:
> Wenn man der Zeit so viel voraus ist, wie Moby, sollte man ihr nicht
> hinterher hinken ;-)

Die Moral ist: Die Controller(sprach)welt nicht in veraltet und neu 
einteilen sondern in einfach und unnötig kompliziert... Immer schön die 
Bedürfnisse der App im Auge behalten ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Robert L. schrieb:
> So wird nie eine Grenze erreicht. Asm-Programmierer-System bedingt ;-)
>
> den Teil solltst nochmal erklären ..
> der Optimale ASM code verwendet soviele Register wie möglich (also im
> besten Fall alle..)

Soviele Register wie möglich sollte man in jedem Fall verwenden. Sie 
langen aber auch für jeden Fall, wenn man ein bischen System in die 
Registerverwendung bringt. Da ist dann etwas Mitdenken angesagt, wenn 
das Programm nicht ohnehin sehr klein ist. Gerne erläutere ich Dir mal 
mein System bei größeren Programmen >1K...

> ps. eigentlich kommt beim Optimalem ASM code, auch erstmal
> geschwindigkeit vor größe...

Das ist natürlich falsch. Wenn Speed keine Rolle spielt wird natürlich 
zuallererst die Codegröße interessant. Gerade die Größe des Flash ist 
natürlich ein wesentliches Unterscheidungsmerkmal der Controller (und 
ihrer Baugröße und des Preises). Schließlich wird man die Taktfrequenz 
noch auf nötiges Minimum justieren und schon kann man sich an einer 
optimalen Lösung erfreuen ;-)

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Gu. F. schrieb:
> Ich halte jede Wette das dich jeder C Neuling der sich im Forum
> herumtreibt deinen code sowohl in Ausführungszeit als auch bzgl. der
> codegröße um Längen schlägt!

Lustig.
Aber solang das nicht mal die größten Experten hier mit dem 
hööööchstproduktiveffizienten  C bei überschaubarem 
Winzigfunktionalitätscode schaffen lehne ich mich mal gaaanz entspannt 
zurück ;-)

P.S. Gerade beim 'ganz' s.o. noch zwei a eingefügt

: Bearbeitet durch User
von Robert L. (lrlr)


Lesenswert?

>Gerne erläutere ich Dir mal
>mein System bei größeren Programmen >1K...

ja dann, leg mal los..

von Carl D. (jcw2)


Lesenswert?

>> ps. eigentlich kommt beim Optimalem ASM code, auch erstmal
>> geschwindigkeit vor größe...
>
> Das ist natürlich falsch. Wenn Speed keine Rolle spielt wird natürlich
> zuallererst die Codegröße interessant. Gerade die Größe des Flash ist
> natürlich ein wesentliches Unterscheidungsmerkmal der Controller (und
> ihrer Baugröße und des Preises). Schließlich wird man die Taktfrequenz
> noch auf nötiges Minimum justieren und schon kann man sich an einer
> optimalen Lösung erfreuen ;-)

Ohne die geringste Hoffnung daß der Addressat das versteht:

Wenn der Takt so niedrig wie möglich sein soll, dann ist Speed des Codes 
extrem wichtig. Linear runtergeschriebener Code ohne Schleifen braucht 
zwar mehr Flash (den ja eine "typische 8-Bit MSR" eh zu 80% leer läßt), 
durchläuft aber je Meßzyklus weniger Befehle und spart damit Strom.

>Jörg W. schrieb:
>> Die Analogbausteine werden ohnehin kaum genauer sein, der Vorteil der
>> digitalen ist ja gerade, dass sie all ihre Analogverarbeitung
>> on-board direkt auf dem Chip machen können, das minimiert die
>> Störeinflüsse.
>
> Schon klar. Dafür benötigen die analogen eben keine langwierigen
> Berechnungen und langen oft genauso.
> Keep it simple!

Ja klar, viel simpler sind dann externe OpAmp-"Gräber".
Davon kann man nämlich auch "nix verstehen":
Beitrag "Analoger Sensor (LM335) mit Operationsverstärker + AVR Asm-Code"

von Moby A. (moby-project) Benutzerseite


Lesenswert?

Carl D. schrieb:
> Wenn der Takt so niedrig wie möglich sein soll, dann ist Speed des Codes ...

Ich sagte wenn Speed keine Rolle spielt...
Dann dreh ich am Takt hinterher...
Spielt er DIE Rolle, muß ich i.d.R. mehr Flash in die Hand nehmen. 
Spielt Stromverbrauch DIE Rolle dann für möglichst wenig Takt genauso. 
Du erzählst mir da nix Neues.

> Ja klar, viel simpler sind dann externe OpAmp-"Gräber"

Ja klar, ein OpAmp sind für Dich Gräber und der OpAmp als Verstärker hat 
was mit Asm zu tun...

> Ohne die geringste Hoffnung daß der Addressat das versteht

Ohne die geringste Hoffnung daß Du mich verstehen willst ;-)

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Robert L. schrieb:
> Gerne erläutere ich Dir mal >mein System bei größeren Programmen
>>1K...
>
> ja dann, leg mal los..

Also, es ging drum daß 32 Register auch bei größeren Projekten nie zur 
Begrenzung werden.

Das "System" schaut bei mir so aus:
Für Interrupts aller Art die 6 Pointerregister XL-ZH.
Diese werden bei Eintritt Zeit/Flash sparend mit MOVW in R10-R15 
gesichert. R9 sichert die Flags. Interruptroutinen kommen möglichst nur 
mit den Pointerregistern aus. Tun sie das nicht werden die weiteren 
benötigten Register (ab R16) auf dem Stack gesichert.
Anzustrebender Sonderfall (öfter möglich): Die Funktionalität steckt 
allein in (sich nicht gegenseitig unterbrechenden) Interrupts. Da muß 
dann nix oder nur wenig gesichert werden! Im Hauptprogramm wird hier 
nur geschlafen... Ansonsten kommt dieses meist mit allen Registern ab 
R16 aus. R7-R8 enthält einen Systeminterrupt Counter für 
Timing-Aufgaben. R0-R6 sind für spezielle Zwecke/Instruktionen 
reserviert.

Weitere Fragen und Einsprüche?

: Bearbeitet durch User
von Sven B. (scummos)


Lesenswert?

Moby A. schrieb:
> Weitere Fragen und Einsprüche?

Ja, warum sollte ich über sowas nachdenken müssen?

: Bearbeitet durch User
von Moby A. (moby-project) Benutzerseite


Lesenswert?

Sven B. schrieb:
> Ja, warum sollte ich über sowas nachdenken müssen?

Stimmt. Du kannst auch Hochsprache mit all ihren Nachteilen verwenden. 
Und über andere, künstliche Probleme bei der bestmöglichen 
Sprachverwendung nachdenken ;-)

von (prx) A. K. (prx)


Lesenswert?

Moby A. schrieb:
> Stimmt. Du kannst auch Hochsprache mit all ihren Nachteilen verwenden.
> Und über andere, künstliche Probleme bei der bestmöglichen
> Sprachverwendung nachdenken ;-)

Die Geschichte der Menschheit ist voll davon, natürliche Probleme durch 
künstliche zu ersetzen. Statt zu frieren und Fleisch als Rohkost vom 
Knochen zu nagen könnte ich in den Wald gehen und Holz schlagen. Das war 
eine der frühen Stufen beim Ersatz natürlicher Probleme durch 
künstliche. Mittlerweile wurde freilich das bereits künstliche 
Beschaffungsproblem vom Holz durch mehrere noch künstlichere ersetzt, 
nämlich jährlich den Öltank aufzufüllen und die Stromrechnung zu zahlen.

Die Nachteile dieser Lösung des Wärme- und Beschaffungsproblems liegen 
auf der Hand. Ohne auf Nahost-Öl basierte Zivilisation gäbe des die 
aktuelle Form des Terrorismus nicht. Also meine Damen und Herren: back 
to the roots, allesamt! Schinken-Original, direkt vom noch 
schlachtwarmen Schwein genagt. ;-)

: Bearbeitet durch User
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.