Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Assembler ::  verständnisfrage: asm nur für bestimmte cpus     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
blaukopf
Unregistrierter




Beitrag blaukopf Unregistrierter 13:36:40 28.01.2012   Titel:   verständnisfrage: asm nur für bestimmte cpus            Zitieren

hall eine frage:
Wenn ich etwas in Assembler programmiere, dann kann ich das ja nicht allgemeien halten weil es nur für bestimmte Prozessoren greift.

das kann ich mir so in der praxis gar nicht vorstellen, dass hieße ja das einige Programme/Spiele unter bestimmte Przessoren nicht laufen würden oder wie machen die das, dass der assemblercode auf möglichst allen computern läuft?
dot
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
Beitrag dot Mitglied 13:39:55 28.01.2012   Titel:   Re: verständnisfrage: asm nur für bestimmte cpus            Zitieren

blaukopf schrieb:
das kann ich mir so in der praxis gar nicht vorstellen, dass hieße ja das einige Programme/Spiele unter bestimmte Przessoren nicht laufen würden oder wie machen die das, dass der assemblercode auf möglichst allen computern läuft?

Gar nicht. Rat mal wieso es Hochsprachen gibt ;)

_________________
one point of view will never reveal the entire scene.
blaukopf
Unregistrierter




Beitrag blaukopf Unregistrierter 13:47:55 28.01.2012   Titel:              Zitieren

also hab ich recht und es ist scheiße in assembler zu programmieren weil es dann nicht alle nutzen können?
dot
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
Beitrag dot Mitglied 13:51:49 28.01.2012   Titel:              Zitieren

blaukopf schrieb:
also hab ich recht und es ist scheiße in assembler zu programmieren weil es dann nicht alle nutzen können?

Nö. Assembler ist eben Architekturabhängig. x86 Assembler ist eben nur für x86 CPUs. Darum ist es noch lange nicht "scheisse"...

_________________
one point of view will never reveal the entire scene.
blaukopf
Unregistrierter




Beitrag blaukopf Unregistrierter 14:02:56 28.01.2012   Titel:              Zitieren

ist das der grund warum es programme in 32 und 64bit versionen gibt?
Patrickssj6
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2012
Beiträge: 87
Beitrag Patrickssj6 Mitglied 14:16:21 28.01.2012   Titel:              Zitieren

Wenn wir schon einmal dabei sind: Die meisten Compiler unterstützen gar nicht die neusten Instruction Sets oder wie muss ich das sehen?

Benutzt .NET die neusten wenn die Sprache aus dem IL "übersetzt" wird?

Danke im Voraus :D Das hat mich schon immer interessiert.


Zuletzt bearbeitet von Patrickssj6 am 14:16:35 28.01.2012, insgesamt 1-mal bearbeitet
supernicky
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.11.2011
Beiträge: 50
Beitrag supernicky Mitglied 14:18:12 28.01.2012   Titel:   Re: verständnisfrage: asm nur für bestimmte cpus            Zitieren

blaukopf schrieb:
hall eine frage:
Wenn ich etwas in Assembler programmiere, dann kann ich das ja nicht allgemeien halten weil es nur für bestimmte Prozessoren greift.

das kann ich mir so in der praxis gar nicht vorstellen, dass hieße ja das einige Programme/Spiele unter bestimmte Przessoren nicht laufen würden oder wie machen die das, dass der assemblercode auf möglichst allen computern läuft?


Hallo,

Überlege mal wieviele verschiedene CPU's im normalen Handel erhältlich sind, dann erübrigt sich deine Frage.

Gruß Nicky
Unregistrierter





Beitrag Unregistrierter 14:23:44 28.01.2012   Titel:              Zitieren

Wenn in Assembler programmiert wird oder eine Hochsprache kompiliert wird dann werden meist die Befehle der CPU genutzt die auf allen x86 oder x64 CPU vorhanden sind. Somit läuft dann das Programm, egal ob nun x86, x64 Intel, AMD, VIA etc..

Bei besonders kritischen Stellen kann man dann immer noch spezialisierte Befehle der CPU einsetzten, da wird halt vorher geprüft ob dies von der CPU unterstützt wird und wenn nicht halt wieder auf den Standardbefehlssatz der x86-CPUs zurückgegriffen.

Wenn man natürlich den x86 Kompatiblen Bereich verlässt und z.B für ARM programmiert, so läuft dies wohl in den meisten Fällen auf eine Neuimplementierung zurück. Hier kommen dann die Hochsprachen zum tragen, wo "nur" neu kompliliert werden muss.

Wenn für 64Bit kompiliert oder direkt programmiert wird, dann nur weil Fähigkeiten der 64Bit Architektur sinnvoll für das Projekt ist. Ich glaube sicherheitstechnisch haben die 64bitter auch nen Vorteil, aber meine Assemblerkenntnisse sind noch aus den 80iegern und kurz mal x86 Realmode, also nicht gerade auf den neusten Stand. :)

Aber hier gibt es sicherlich ne menge Experten, die dir das viel genauer erklären können.
Nobuo T
Moderator

Benutzerprofil
Anmeldungsdatum: 09.10.2001
Beiträge: 4737
Beitrag Nobuo T Moderator 16:13:16 28.01.2012   Titel:              Zitieren

Die x86/x64-Architektur (siehe z.B. auch Wikipedia) hat im Wesentlichen ein standardisiertes Set von Instruktionen (andere architekturen mit einem komplett anderen Standardset von Befehlen waeren z.B. ARM oder MIPS). Solange in deinem PC also ein x86/x64-kompatibler, halbwegs aktueller Prozessor steckt, laufen die meisten Programme.
Praktisch wird meist irgendwann am Anfang der Programme geprueft, auf welcher CPU sie nun genau laufen, bzw. welche Befehlssaetze, die ueber den x86-Standard hinausgehen, diese unterstuetzt (MMX, SSE und wie sie alle heissen).
Abhaengig davon, welche erweiterten Befehle unterstuetzt werden, werden dann oft verschiedene Programmteile, die die eine oder andere Befehlssatzerweiterung benutzen oder eben nicht, zwecks beschleunigtem Programmablauf, ausgefuehrt.
Dass hier Probleme "vorprogrammiert" sind, ist wohl offensichtlich.
z.T. wird bei neueren Programmen die oben genannte genaue Pruefung von unterstuetzten CPU-Befehlen auch vernachlaessigt.

Beispiel:
Auf meinem 15Jahre alten 450MHz K6-3 crasht VLC in Windows mit einem schweren Ausnahmefehler, da vor Auftauchen von nicht Pentiumkompatiblen Befehlen (cmov) nicht geprueft wird, ob diese auch unterstuetzt werden.

_________________
==Mod im Assembler-Forum==

http://z0r.de/2908
abc.w
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2008
Beiträge: 1364
Beitrag abc.w Mitglied 18:24:54 28.01.2012   Titel:   Re: verständnisfrage: asm nur für bestimmte cpus            Zitieren

blaukopf schrieb:
das kann ich mir so in der praxis gar nicht vorstellen, dass hieße ja das einige Programme/Spiele unter bestimmte Przessoren nicht laufen würden oder wie machen die das, dass der assemblercode auf möglichst allen computern läuft?

Unter GNU/Linux Distributionen ist die gängige Praxis so, dass man sich für eine bestimmte CPU entscheidet, wie z.B. Pentium II oder von AMD xyz und alle Programm-Packete, Kernel, Treiber werden für diese eine CPU baut. Man entscheidet sich sozusagen für einen gemeinsamen Nenner.
Bei manchen Linux-Distributionen dagegen ist es möglich, in einer Konfigurationsdatei die Compiler-Parameter einzustellen wie z.B. unter Gentoo in /etc/make.conf. Bei der Installation von Gentoo kann man dort die CPU (-mtune, -march), Optimierungsstufe (von -Os bis -O3), Befehlsatz (SSEx) und andere Parameter wie -g0 (keine Debug-Symbole) und was einem so alles einfällt und von gcc/g++ akzeptiert wird, einstellen. Dann kann man das ganze System neu bauen lassen und bekommt danach ein System, in dem jedes Programm, Bibliotheken usw. für deine CPU optimiert wurden.
Zusätzlich kann man Linux-Kernel manuell bauen und im System installieren. Bei der Konfiguration des Kernels gibt es Optionen wie Optimize for Size (-Os) oder Optimize for Speed (-O2) und die CPU-Familie vom alten 80386er bis, glaube ich, Prescott - man kann also Kernel und Treiber für deine CPU optimieren lassen (und wenn man schon bei der Konfiguration des Kernels ist, kann man auch alle unnötigen Treiber rausschmeißen, die man im System nicht braucht und bekommt einen schlanken Kernel).
Unter Linux hat man also viele Freiheiten, die unter Windows nicht möglich sind. Die Frage ist nur, ob man es ausprobieren will und bereit ist, neues zu lernen. Siehe auch hier http://www.c-plusplus.de/forum/298633-full (Warum Linux?)

_________________
E = int * char^2
nachtfeuer
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.04.2010
Beiträge: 1167
Beitrag nachtfeuer Mitglied 20:20:26 28.01.2012   Titel:              Zitieren

Es kommt ein bißchen darauf an. In der Mikrokontrollerwelt gibt es viele verschiedene Prozessoren, die sich auch technisch mehr oder weniger stark unterscheiden, da ist man dann ganz froh, die ein oder andere Hochsprache (meist C) benutzen zu können, weil der Assemblercode jedesmal anders ist, der Hochsprachen Code bleibt dagegen weitgehend der gleiche.

Aber Hardwarestrukturen von Prozessoren sind aber auch in gewisser Weise ähnlich. Die Frage ist dann, wieviel man anpassen muss. Und letztlich gibt es auch ganz nette Inlineassembler- oder Metasyntaxlösungen, wie beim gas, oder man schreibt sich Übersetzter.

Bei Spielen ist es auch ganz oft so, dass das Microsoft-Team spezielle Patches für Spiele zusammenschreibt, d.h. im wirtschaftlichen Sinne. Windows selbst kann man als leistungsfähigen Multiemulator betrachten. Die Intelprozessoren sind untereinander unterschiedlich, aber sie haben Kompatibilität, ohne die sie nicht so erfolgreich geworden wären. Man kann nach wie vor Dos-Betriebssysteme laden, oder 32 Bit Programme unter 64bit Systemen laufen lassen.

In den 90ern gab es eine Übergangszeit, von Dos nach Windows. Hier mussten spezielle Dos-Extender (z.B. http://de.wikipedia.org/wiki/DOS_Protected_Mode_Interface ) geladen werden, damit die Programme (im Protected Mode) laufen.

_________________
HhxV9rU5D8o236dZF7bMQ4Dys1_TuUmI4mZM.d2qD15ERi_0dgcHP0UViL3e-4WUi0nXXNwDYqA10sLEgjBVtdhE
tpehI7qHRZESiO_7LhPZFMQWNoiVrJDsEGD26n.H0lV8wOwYAe8UsbUJe5m65NyPaghnSoMzROo2gJ6nTeVSkxLk
a6hvNe11r9U7xddV9mq6NEi_V0C9k4augEKVSW3PV8LgCYum7KaXc9Ijq_ZT7zhspI.=-
mfq
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.02.2012
Beiträge: 8
Beitrag mfq Mitglied 12:35:22 03.02.2012   Titel:              Zitieren

justchris schrieb:
Ich glaube sicherheitstechnisch haben die 64bitter auch nen Vorteil
Haben sie. ASLR (Adress Space Layout Randomization) ist hier aufgrund des größeren Adressraums natürlich bedeutend wirkungsvoller.

Ein weiterer Vorteil bei der Distribution von Binarys für x86-64-Systeme ist, dass man das Vorhandensein von SSE2 voraussetzen kann. Das kann man bei 32-Bit-Builds nicht einfach machen. Der größte gemeinsame Nenner im Featureset liegt dort viel tiefer.


Zuletzt bearbeitet von mfq am 12:35:35 03.02.2012, insgesamt 1-mal bearbeitet
C/C++ Forum :: Assembler ::  verständnisfrage: asm nur für bestimmte cpus   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.