Re(3): Allgemeine Frage
Geizhals » Forum » Programmierung » Allgemeine Frage (37 Beiträge, 731 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
. Vom Autor zurückgezogen oder Autor hat seine Registrierung nicht bestätigt  (nico am 04.11.2005, 14:42:59)
..  Re(2): Allgemeine Frage  (Psychopath am 04.11.2005, 14:44:17)
...  Re(3): Allgemeine Frage  (nico am 04.11.2005, 14:45:21)
....  Re(4): Allgemeine Frage  (Psychopath am 04.11.2005, 14:57:56)
.....  Uargh!  (gepeinigter_aon_neukunde am 04.11.2005, 15:52:18)
......  Re: Uargh!  (Psychopath am 04.11.2005, 15:53:41)
.......  Re(2): Uargh!  (gepeinigter_aon_neukunde am 04.11.2005, 15:55:43)
........  Re(3): Uargh!  (Psychopath am 04.11.2005, 15:57:36)
.........  Re(4): Uargh!  (gepeinigter_aon_neukunde am 04.11.2005, 16:06:24)
..........  Re(5): Uargh!  (Psychopath am 04.11.2005, 16:11:44)
...........  Re(6): Uargh!  (gepeinigter_aon_neukunde am 04.11.2005, 16:32:37)
............  Re(7): Uargh!  (Psychopath am 04.11.2005, 16:40:41)
.............  Re(8): Uargh!  (gepeinigter_aon_neukunde am 04.11.2005, 16:50:46)
..  Re(2): Allgemeine Frage  (john-cord am 04.11.2005, 14:44:32)
..  Re(2): Allgemeine Frage  (Don Chris am 04.11.2005, 14:55:24)
...  Re(3): Allgemeine Frage  (Entity am 04.11.2005, 14:57:03)
....  Re(4): Allgemeine Frage  (Valen314 am 05.11.2005, 15:47:22)
.....  Re(5): Allgemeine Frage  (Entity am 05.11.2005, 16:08:11)
......  Re(6): Allgemeine Frage  (Valen314 am 05.11.2005, 16:33:10)
...  Re(3): Allgemeine Frage  (nico am 04.11.2005, 15:24:09)
.  Re: Allgemeine Frage  (john-cord am 04.11.2005, 14:44:14)
..  Re(2): Allgemeine Frage  (Entity am 04.11.2005, 14:54:36)
...  Re(3): Allgemeine Frage  (john-cord am 04.11.2005, 16:28:46)
....  Re(4): Allgemeine Frage  (Entity am 04.11.2005, 16:32:19)
...  Re(3): Allgemeine Frage  (Collectors_edition am 04.11.2005, 23:09:03)
....  Re(4): Allgemeine Frage  (HILFE!!! am 05.11.2005, 00:41:34)
.....  Re(5): Allgemeine Frage  (Collectors_edition am 05.11.2005, 13:16:00)
.  Re: Allgemeine Frage  (Entity am 04.11.2005, 14:54:52)
..  Re(2): Allgemeine Frage  (Don Chris am 04.11.2005, 15:12:35)
.  PS: (fuckKLEINSCHREIBUNG)  (Entity am 04.11.2005, 14:56:29)
.  Re: Allgemeine Frage  (gepeinigter_aon_neukunde am 04.11.2005, 16:05:57)
..  Re(2): Allgemeine Frage  (Don Chris am 04.11.2005, 16:09:37)
...
Re(3): Allgemeine Frage
04.11.2005, 16:27:18
Kurzer Sinn meiner Antwort:

Teile eines Betriebssystems sind i.d.R. in Assembler zu schreiben. Computersysteme sind zu unterschiedlich, als daß ich sagen würde "immer" - daher "i.d.R." ;-). Du kannst aber in der Praxis von "immer" ausgehen.

Man geht im Endeffekt davon aus, daß ein Programmierer 6 Zeilen "finalen" Code am Tag produziert. Verblüffend wenig, ist aber so. Code wird immer und wieder umgeschrieben, und das Programmieren selbst macht bei sauberem Projektmanagement nur einen kleinen Teil (10-20%) der Zeit aus, der Rest geht in Plandefinitionen, Teststellungen, Dokumentation, ...

Ich würde mal behaupten, daß die Anzahl der LOC's (Lines Of Code - Programmzeilen) bei Assembler im Schnitt um den Faktor 100-1000 mehr sind als in einer höheren Sprache wie C.

Wenn du also ein Programm in C schreibst und das dort sagen wir 1000 Zeilen hat - wären das stattdessen 100000-1000000 Zeilen Assembler. (mich bitte nicht auf das genaue Zahlenverhältnis festnageln - nur als Daumen*Pi)

Assembler schreiben ist also unrentabel.

Früher wurde Assembler gerne benutzt, um "kritische" Routinen in deinem Programm zu schreiben - die schnell gehen mußten wie zB bei frühen 3D-Spielen.

Das macht heute auch keinen Sinn mehr, weil die Prozessoren zu unterschiedlich sind.

Angenommen (wieder nur Hausnummern) du willst ein Register (=eine der wenigen Prozessorvariablen) auf 0 setzen - und du hast auf einem 80286 gearbeitet. In Assembler konntest du schreiben
MOV AX, #0 ; Lade 0 in das Register AX.
das war mal der "offensichtliche" Befehl, und er kostete sagen wir 6 Taktzyklen.
Es gibt aber auch die Variante
XOR AX, AX ; Wende ein Exklusiv-oder von AX auf AX an.
Ein Exklusiv-oder zwischen 2 gleichen Zahlen liefert immer 0 - war also vom Ergebnis gleichwertig.
Du hast also in deinen Tabellen gegraben und bist draufgekommen, daß der nur 3 Taktzyklen kostet - also doppelt so schnell ist - und um 1-2 Bytes kürzer.

Daher hast du immer XOR AX,AX verwendet.

Mit dem 80386 änderte sich aber die Implementierung von MOV und XOR...
MOV kostete sagen wir 2 Taktzyklen, XOR 3 -> Schlagartig war auf deinem Prozessor die schlechtere Variante im Einsatz ;-)

Wenn du in C programmierst, sagst einfach
a=0;
und gibst beim Übersetzen an, für welchen Prozessor er optimieren soll - und hast immer schlagartig das bessere...

Wo ich hinwill:
Zwischen den Prozessorgenerationen - auch in der selben Linie wie 80x86 - ändert sich weit mehr als nur mehr Funktionalität und Speed... Statements, die früher teuer waren, wurden billig und umgekehrt.

[gute] Compiler sind inzwischen schlau genug, daß sie seeeehr effizienten Code liefern - daher fällt der vorletzte Grund für Assembler (Speed) aus - und du nutzt ihn nur dort, wo es wirklich nicht anders geht.

Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
....  Re(4): Allgemeine Frage  (Don Chris am 04.11.2005, 16:34:37)
....  Re(4): Allgemeine Frage  (LrAk.T am 05.11.2005, 17:33:05)
. Vom Autor zurückgezogen oder Autor hat seine Registrierung nicht bestätigt  (anbransa am 04.11.2005, 16:52:23)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung