Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

assembler - wie funktioniert das

Alekom / 45 Antworten / Flachansicht Nickles

Hallo Leute,

Was Assembler ist weiss ich ja, es sind mnemotechnische Abkürzugen für binäre Einheiten.

Zumindest hab ich das so verstanden. Also anstatt alles in 0 oder 1 zu programmieren, hat man Assembler-Befehle entwickelt.

Und genau da hapert bei mir das Verständnis.

Wie entwickelt man solche Befehle?

Sind diese in einem Chip verdrahtet, so das ein Chip 1 Befehl darstellt oder wie kann man das verstehen?

Weil ja irgendein Register muss ja diese Befehle verarbeiten, aber wie  zum Teufel merkt er sich solche Abkürzungen?

Ich habe noch nirgends wo was gelesen wie solche Befehle "gemacht" werden.

zb Beispiel der Befehl Mov

aus was besteht der und wo wird der "abgelegt" oder "eingegossen"?

ich hoffe meine Frage verständlich ausgedrückt zu haben.

netten Gruß

Alekom

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
xafford Alekom „assembler - wie funktioniert das“
Optionen

Zu deiner Frage wurde ja schon vieles richtig geschrieben, aber ich habe den Eindruck, dass die Antworten vielleicht etwas zu "akademisch" waren und vielleicht deswegen etwas an deiner Kernfrage vorbei: Wo wird Assembler zum dem, was letztendlich als Ergebnis heraus kommt?

Das Problem bei der Beantwortung liegt darin, dass es von der grundlegenden Architektur abhängt und vom Assembler-Dialekt, beziehungsweise dem Befehl.

Grundsätzlich gibt es in einer CPU normalerweise verschiedene, fest in Hardware verdrahtete Rechenwerke für verschiedene Aufgaben. Einige beispielsweise machen nichts anderes, als Werte zu addieren. Wenn also der Assembler-Befehl kommt zwei skalare Werte zu addieren, dann ist diese Instruktion (extrem vereinfacht gesagt) in Hardware fest vorgegeben und 1:1 in Hardware abgebildet. In modernen CPUs gibt es auch ganze Funktionsblöcke, die nur für ganz bestimmte Aufgaben eine feste Verdrahtung haben um diese besonders schnell erledigen zu können (beispielsweise bestimmte komplexe Verschlüsselungsbefehle).

Dann gibt es komplexere Assembler-Befehle, die nicht über eine Instruktion abgebildet und auf eine feste Ausführungseinheit in der CPU abgebildet sind, sondern mehrere Rechenschritte (oder verschiedene Ausführungseinheiten) benötigen. In der Regel sind aber auch diese Befehle dann in der Instruktionseinheit fest verdrahtet, sie weiß also schon in Hardware, welche Einheiten wie und in welcher Reihenfolge genutzt werden müssen.

Dann gibt es noch sehr komplexe Befehle, welche fast schon kleine, eigenständige Programme sind und deren Art der Ausführung über den Microcode beeinflusst und geändert werden kann.

Es gibt also nicht eine Stelle, wo aus Assembler der eigentliche Maschinencode wird, sondern mehrere, prinzipiell stellt eine moderne CPU einen kleinen Computer für sich dar.

Vielleicht wird Dir einiges klarer, wenn Du dich ein bisschen einliest in das Thema RISC, CISC, Microcode, ASIC und moderne Techniken wie CUDA und OpenCL.

DISCLAIMER: Das soll jetzt keinen Anspruch auf absolute Korrektheit erheben, das war alles extrem vereinfacht und soll nur dazu dienen zu erklären, dass es meist keine feste Stelle in der CPU gibt, an der ein Assembler-Befehl in Hardware zu lokalisieren ist.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen