Diskussion:Befehlssatzarchitektur

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 13 Jahren von Daniel5Ko in Abschnitt Operandenanzahl
Zur Navigation springen Zur Suche springen

Es gibt den Stammbaum der Programmiersprachen [1]. Gibt es sowas auch für ISAs? --84.56.129.64 00:41, 5. Feb. 2007 (CET)Beantworten

Umbennen

[Quelltext bearbeiten]

Das deutsche Wort für ISA lautet Befehlssatzarchitektur. Sollte man den Artikel nicht auch dahingehend umbenennen? --Strimo 16:17, 26. Mär. 2007 (CEST)Beantworten

Das möchte ich unterstützen, weil insbesondere die Abkürzung ISA ja ganz andere Assoziationen, nämlich ISA-Steckplätze im alten PC, hervorruft. --PeterFrankfurt 17:10, 26. Mär. 2007 (CEST)Beantworten
Verschiebung erledigt. Habe den Artikel im Zuge der Anpassung auf den neuen Namen grundlegend überarbeitet. Ich hoffe, er bietet jetzt eine bessere Grundlage für Erweiterungen. Ich bin mir sicher, dass zu dem Thema noch einiges zu sagen ist. --Ruscsi 21:45, 8. Jun. 2007 (CEST)Beantworten

Operandenanzahl

[Quelltext bearbeiten]

Der Abschnitt "Operandenanzahl" ist inhaltlich falsch. Die richtige Version ist u.a. in der englischen Wikipedia Instruction_Set_Architecture#Parts_of_an_instruction zu finden. Gezählt werden nicht die Speicherzugriffe, sondern die "operands explicitly specified in instructions". Also natürlich auch alle Register. Das einzige, was nicht gezählt wird, ist die implizite Stack-"Adresse".

In der in diesem Abschnitt zitierten Quelle werden die Operanden übrigens auch nach dem richtigen Prinzip gezählt. (nicht signierter Beitrag von 217.83.39.103 (Diskussion) 21:17, 28. Jun. 2011 (CEST)) Beantworten

Also sorry, Zitat aus jener Quelle:
Die Ein-Adress-Maschine
		(auch AKKU-Maschine genannt) 
	- Ein spezieller festgelegter Speicherort, der Akkumulator, enthält immer den 
	  1. Operanden und nimmt das Ergebnis auf
	- Akkumulator kann eine reservierte Arbeitsspeicherzelle sein, oder ein
	  Register im Prozessor 

	Befehlsbeispiel:
		Akku:=Akku+Betrag(222)
Der zählt den Akku (bitteschön ein Register) nicht als "Adresse". --PeterFrankfurt 02:25, 29. Jun. 2011 (CEST)Beantworten

Um noch einmal die englische Wikipedia zu zitieren: "Most instructions specify a single explicit right operand [...] with the implicit accumulator as both destination and left (or only) operand". Es werden die expliziten und nicht die impliziten Register gezählt. Deswegen ist die Akku-Maschine eine 1-Adress-Maschine. --217.83.45.182 07:43, 7. Jul. 2011 (CEST)Beantworten

Ich kann nicht erkennen, wie Du das aus diesem Zitat herausliest. Das steht da nicht drin. --PeterFrankfurt 01:40, 8. Jul. 2011 (CEST)Beantworten
Ich würde auch sagen, es ist falsch, zu behaupten, es würden Speicherzugriffe gezählt. Vor allem, weil es keinen Sinn ergibt. Beispiel: 8086 und da dann z.B. rep movsw. Der Befehl hätte ja bis zu 2^16 Operanden! Andererseits (immer noch x86): es gibt keinen Befehl, der explizit mehr als einen RAM-Operanden nimmt; außerdem: es gibt keine Befehle mit 3 expliziten Operanden (egal ob Register oder Speicher). → x86 ist als 2-Adress-Maschine zu klassifizieren. Man bemerke auch, dass es primär um den Befehlssatz geht, und zwar vor allem um die Kodierung der Befehle, nicht ihre Semantik. --Daniel5Ko 02:45, 9. Jul. 2011 (CEST)Beantworten
Aber x86 taugt auch hier nicht als allgemeingültiges Beispiel, weil er eben keinerlei 3-Adress-Befehle hat. Das haben anscheinend vor allem sehr alte Mainframe-CPUs, wenn ich es richtig sehe, mit denen ich mich ansonsten auch kaum auskenne. Insofern also lieber nicht zu sehr vom x86 ausgehen. --PeterFrankfurt 23:46, 9. Jul. 2011 (CEST)Beantworten
Das war ja nur mal ein Beispiel, das besonders seltsam ist.
Aber hier mal ein zufällig ausgewähltes Buch: [2]
Das spricht an der Stelle eigentlich fast nur von Registern. Ich konnte zwar nicht genug in der Vorschau sehen, aber ich vermute mal ganz stark, dass da nichts gebastelt wird, was z.B. bei 3-Adress-Befehlen überall echte Speicheroperanden möglich macht.
Anderes Buch: [3]
Dort wird explizit verlangt, dass eine k-Adress-Architektur wirklich k Speicheroperanden ermöglicht. Aber das Buch heißt auch "Embedded systems and computer architecture". Bei kleinem Adressraum und genügend langsamem und registerarmem Prozessor (also eben embedded oder vor langer Zeit) macht es auch einigermaßen Sinn, das überhaupt in Erwägung zu ziehen. Bei Prozessoren für z.B. heutige Desktop-PCs führt diese Forderung aus Performancegründen nur dazu, dass alle Befehlssatzarchitekturen 1-Adress-Architekturen sind, was der Artikel ja im Moment auch schon sagt. Man verliert eine durchaus sinnvolle Designentscheidungsdimension.
Es scheint also in etwa so zu sein: beide Bezeichnungsweisen sind üblich. Was ihnen gemeinsam ist, ist die ermöglichte explizite Angabe von (bis zu) k Operanden in den Befehlen.
(PS: load/store-Befehle müssen in beiden Fällen separat von den anderen behandelt werden, denn 0-Adress-Architekturen definieren beide Bücher - was ohne die Separation keinen besonders interessanten Rechner ergeben kann)
--Daniel5Ko 01:10, 10. Jul. 2011 (CEST)Beantworten
Interessant, das erste Zitat behandelt Register und Speicherzugriffe gleichberechtigt, während das zweite explizit "memory addresses" erläutert. Dass da embedded Prozessoren erwähnt werden, sollte nicht groß stören, bis auf die notorische Ressourcen-Enge sind mir keine prinzipiellen Unterschiede im Befehlssatz geläufig (selber jahrelang puren 6502-Assembler für Automotive-Steuergeräte geschrieben). Also langsam komme ich mit der Einschränkung auf RAM-Zugriffe ins Wanken. --PeterFrankfurt 23:38, 10. Jul. 2011 (CEST)Beantworten
Gut. Nun müssen wir "nur noch" überlegen, wie wir diesen in der Realität praktizierten Teil korrekt und verständlich und ohne irreführende Widersprüche im Artikel unterbringen. :) --Daniel5Ko 01:16, 11. Jul. 2011 (CEST)Beantworten
Viel einfacher wird es ja nicht. Denn wenn ich es richtig sehe, zählt der reine Akku weiterhin nicht, sonst könnte es ja keine 1-Adress-Befehle geben, die einen Speicherinhalt in den Akku laden. Sowas zählt meiner Beobachtung nach als 1-Adress- und nicht als 2-Adress-Befehl, zumindest solange man den Akku im Befehl nicht ausdrücklich als von der Befehlsmnemonik separierten Operand angeben muss (obwohl das ja wiederum nichts am Prinzip ändert, u. a. weswegen ich dachte, mit der Einschränkung auf Speicherzugriffe eine klarer nachvollziehbare Definition zu verwenden). Ich hoffe, alle Klarheiten beseitigt zu haben. --PeterFrankfurt 02:08, 12. Jul. 2011 (CEST)Beantworten
Dass irgend etwas einfacher wird, hat ja niemand behauptet. Ich schlage vor, wir suchen unabhängig voneinander noch ein paar Quellen, und wenn jemandem einfällt, wie man die verschiedenen, scheinbar auch Mode-abhängigen, Definitionen leicht verständlich unter einen Hut bringen könnte, schreibt er's halt in den Artikel.
Noch 'n Bissl Feedback zum Rest deines Diskussionsbeitrags:
  • Weiter oben schrub ich schon, dass es wahrscheinlich sinnvoll ist, load/store-Befehle als separate Klasse anzusehen. Stichwort 0-Adress-Zeug. Und wenn ein Akku-Register gegenüber anderen Registern ausgezeichnet ist und völlig anders behandelt wird, zählt er natürlich nicht als "Adresse".
  • Mit Mnemonics sollte man vermutlich überhaupt nicht argumentieren. Ich denke, das Binäre, also die Ausgabe eines Assemblers, bzw. der Programm-Input an die CPU, ist das entscheidendste und sinnvollste, wenn man schon so eine Klassifizierung vornehmen will.
--Daniel5Ko 02:12, 13. Jul. 2011 (CEST)Beantworten
Ich kann nur nochmal ausdrücklich dem ersten Beitrag in diesm Abschnitt zustimmen: Der Abschnitt "Operandenanzahl" ist inhaltlich falsch. Er sollte dringend überarbeitet werden. Leider habe ich dazu noch keine Zeit. Sowohl die Beschreibung als auch die Wertung sind falsch. Da ich oft meine Studenten auf Wikipedia-Artikel verweise, muß ich hier immer ausdrücklich vor diesem Abschnitt warnen. (Vielleicht komme ich nächstes Jahr mal dazu hier auch Inhaltlich etwas beizutragen)