Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

assembler - wie funktioniert das

Alekom / 45 Antworten / Baumansicht 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
Borlander Alekom „assembler - wie funktioniert das“
Optionen

Ich bin mir nicht ganz sicher ob ich Deine Frage korrekt verstanden habe, versuche aber trotzdem mal zu Antworten und vielleicht auch passendes Material zum Einlesen und Weiterfragen zu liefern ;-)

zb Beispiel der Befehl Mov aus was besteht der und wo wird der "abgelegt" oder "eingegossen"?

Das hängt von der CPU-Architektur ab. Am Ende besteht ein solcher Befehl aus einem Opcode und maximal einem, bei einigen Architekturen auch mehrer Operanden.

Wenn wir nun einen Befehl (x86-ASM) wie

MOV CX, 5

betrachten, dann steht dahinter der Maschinenbefehl "Lade eine Konstante in das Register CX" und der 5 als Operand (in diesem Fall ein Konstanter Wert). Beim Assemblieren würde daraus dann die binäre Darstellung eines Maschinenbefehls und des Operators.

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

Die CPU kennt nur die binären Darstellungen der Maschinenbefehle. Diese sind u.U. so optimiert, dass das Steuerwerk möglichst einfach designed werden kann.

Zum Weiterlesen:

Gruß
Borlander

bei Antwort benachrichtigen
Alekom Borlander „Ich bin mir nicht ganz sicher ob ich Deine Frage korrekt ...“
Optionen

hallo Borlander,

danke für die Links, einige kannte ich schon, wurde aber leider auch dadurch nicht schlauer.

der Befehl Mov ....ja das er was bestimmtes machen soll wusste ich eh.

aber mir gehts ja nicht so sehr was er machen soll, sondern WIE dieser befehl "gebaut" wird.

Dieser muss ja gebaut werden, irgendwo abgelegt und dann verarbeitet.

Nur um das gehts mir, das es mein Verständnis verbessert.

Beispiel unter Befehlsvorrat:

Ein einfacher Grundbefehl wie SHL/SHR, der einen Registerwert um eine bestimmte Anzahl von Stellen nach links oder rechts verschiebt ist schon im 8086 vorhanden

ich lese vorhanden. jetzt frage ich mich, wie haben die es gemacht das dieser Befehl im 8086er SCHON verhanden ist. ist es ein chip, ist es was fototechnisches oder oder oder?

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Andreas42 Alekom „hallo Borlander, danke für die Links, einige kannte ich schon, ...“
Optionen

Hi!

ich lese vorhanden. jetzt frage ich mich, wie haben die es gemacht das dieser Befehl im 8086er SCHON verhanden ist.

Ich glaube, du müsstest uns am besten kurz erklären, wie du dir bisher die Entwicklung der Maschinensprachebefehle einer CPU vorstellst.

Hast du die Vorstellung, dass Befehle mehr oder weniger Zufällig seit dem 8086 existierten und erst heute entdeckt und genutzt werden?

Ganz konkret zu SHL/SHR (Shift Left und Shift Right). Das sind mit die grundlegensten Befehle neben der einfachen Addition oder Subtraktion, die eine CPU ausführen kann. Die kennt jede CPU und auch bei mir waren es mit die ersten CPU-Kommandos die ich für den MOS6510 gelernt habe - das war die CPU im Commodore 64.
Alle Bits nach Links oder Rechts zu schieben bedeutet einen Zahlenwert durch 2 zu teilen oder mal 2 zu nehmen. Die CPU des C64 kannte keine Befehle für Multiplikation und Division von beliebigen Zahlen, daher war mit die erste Übung beim Lernen, eine solche Routine zu schreiben und die verwendete diese Kommandos.

Eine CPU ist dafür gedacht einen Code auszuführen. Dieser Code wird als "Maschinensprache" bezeichnet. Technisch sind das mindestens eine handvoll Befehle zum Laden und Schreibern von Werten in den Speichern. Dann benötigt jede CPU Befehle um geladene Daten zu modifizieren (Addieren, Subtrahieren, Shift-Left/Right usw.).

Das "Aussehen" der Codes wird festgelegt und dann in der "Verdrahtung" der CPU fest hinterlegt (man definiert also die Syntax des Maschinencodes vorab).

Ein wichtiges Thema bei der CPU Entwicklung ist Kompatibilität: man will mit der neuen CPU Maschinencode ausführen, der für eine ältere CPU geschrieben wurde. Wie macht man das? Ganz einfach: ich nehme die Definition des Maschinencodes der alten CPU und baue darauf den Maschinencode der neuen CPU auf. Und schon ist die neue CPU abwärtskompatibel.

War es das, was du wissen wolltest?

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Alekom Andreas42 „Hi! Ich glaube, du müsstest uns am besten kurz erklären, wie du ...“
Optionen

Das "Aussehen" der Codes wird festgelegt und dann in der "Verdrahtung" der CPU fest hinterlegt (man definiert also die Syntax des Maschinencodes vorab).

Auch dies kommt schon näher hin ...

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
mi~we Alekom „hallo Borlander, danke für die Links, einige kannte ich schon, ...“
Optionen
ist es ein chip, ist es was fototechnisches oder oder oder?

Mir ist auch noch nicht so ganz klar, was genau du jetzt eigentlich erklärt haben möchtest.
Der Maschinencode ist bei einem Prozessor auch noch nicht das Ende der Fahnenstange. Eine CPU hat eine "Instruction Decode Unit (IDU)", die solche Maschinenbefehle in noch elementareren "Microcode" umwandelt. Dieser wird dann an eine Ausführungseinheit "Execution Unit (EXU)" übergeben, die diesen "Microcode" schließlich ausführt. Die Implementierung eines Maschinenbefehls steckt also quasi in der IDU.
Wenn du jetzt detaillierte Erklärungen willst, wie so eine IDU oder EXU funktionieren .... Oje!

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
mi~we Nachtrag zu: „Mir ist auch noch nicht so ganz klar, was genau du jetzt ...“
Optionen

Vielleicht befriedigt ja das hier deine Neugier: Ein ganz primitiver "Prozessor" mit einer ganz primitiven "IDU"

https://www.cs.uaf.edu/2009/fall/cs441/lecture/09_22_tkgate.html

"Es wäre dumm, sich über die Welt zu ärgern. Sie kümmert sich nicht darum." (Marc Aurel)
bei Antwort benachrichtigen
Alekom mi~we „Mir ist auch noch nicht so ganz klar, was genau du jetzt ...“
Optionen

ja das kommt aber schon eher hin :)

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „hallo Borlander, danke für die Links, einige kannte ich schon, ...“
Optionen
aber mir gehts ja nicht so sehr was er machen soll, sondern WIE dieser befehl "gebaut" wird.

Der liegt am Ende in Form einer durch Silizium-Transistoren (das können durchaus ein paar Hundert oder auch Tausend werden!) realisierte Digitalschaltung vor. Diese Schaltung hat irgendwann mal ein Mensch entworfen. Und damas gab es noch keine Hardwarebeschreibungssprachen wie Verilog und VHDL, dafür hatte man noch nicht die Probleme die sich die heute so Engen Strukturbreiten ergeben…

Das Steuerwerk, dass auch nur eine solche Digitalschaltung ist kann auf Basis der Op-Codes dann die Verbindung der Operandeneingänge mit der jeweiligen Einheit im Rechenwerk herstellen.

ist es was fototechnisches

Optische Techniken kommen höchstens zur Belichtung bei der Chip-Herstellung zum Einsatz.

bei Antwort benachrichtigen
Alekom Borlander „Der liegt am Ende in Form einer durch Silizium-Transistoren das ...“
Optionen

also eine realisierte digitalschaltung.

gehe ich recht in der annahme das jeder befehl dann eine eigene schaltung ist?

würde das bedeuten, das ich mit "normalen" bauteilen, wie transistoren, widerstände, kondensatoren, diode in geeigneter schaltung auch sowas wie einen befehl konstruieren könnte?

weil das wäre anschaulich. für mich zumindest.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Andreas42 Alekom „also eine realisierte digitalschaltung. gehe ich recht in der ...“
Optionen

Hi!

gehe ich recht in der annahme das jeder befehl dann eine eigene schaltung ist?

Da alles in der CPU irgendwie als Schaltung existieren muss, ist deine Schlussfolgerung korrekt.

Beachte aber, dass moderne CPUs heute sehr komplex aufgebaut sind: die führen ihren Maschinencode oft nicht direkt aus, sondern wandeln die einzelnen Befehle in einfachere Codes um, die sie dann ausführen ("Microcode").
Einfache und alte CPUs sollten aber für jeden Befehl einen Schaltungsteil besitzen (wobei man nicht vergessen darf, dass vorher noch eine Schaltung kommt, die Bytes der Reihe nach einliest, das geladene Byte analysiert und die passenden Schaltung ansteuert.

Wie das nun genau funktioniert, hat mich aber nie wirklich interessiert. Ich hab mich auf die Anwendung zum Programmieren beschränkt, also Assembler. Elektronenschubsen war mir dann doch zu hoch.
Mein erster Maschinencode auf dem C64 habe ich noch ohne Assembler durch heraussuchen der Bytewerte geschrieben. Da hatte ich nicht auch noch Zeit um mich um profane Leitungen und Transistoren zu kümmern. Zwinkernd

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Alekom Andreas42 „Hi! Da alles in der CPU irgendwie als Schaltung existieren muss, ...“
Optionen

also in der tiefsten ebene ist es als schaltung konzipiert, DAS verstehe ich, alles andere ist dann auf diesem aufgebaut.

entweder seriell oder parallel, mehr gibts ja nicht, so denke ich dann, das eine kombination aus den Grundschaltungen andere Befehle ermöglicht.

ob die entwickler das mathematisch erkundet haben oder empirisch, das ist nicht so wichtig,

Für mich und meinem Verständnis ist es aber von höchster Wichtigkeit, das der Grund offenbart wird. Das Programmieren kommt bei mir an zweiter Stelle.

Hab ich alles jetzt kompliziert dargelegt? Lachend

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „also in der tiefsten ebene ist es als schaltung konzipiert, DAS ...“
Optionen
Für mich und meinem Verständnis ist es aber von höchster Wichtigkeit, das der Grund offenbart wird.

Welcher Grund?

also in der tiefsten ebene ist es als schaltung konzipiert,

In der tiefsten Ebene wird das ganze auf mehrere Schichten und Bereiche aus unterschiedlich dotiertem Sizilium- abgebildet. Und die Umsetzung erfolg dann auch nicht unbedingt so wie man es intiutiv mit boolscher Algebra lösen würde, sondern eher durch eine Kombination aus NAND- und NOR-Schaltungen weil diese sich mit weniger Transistoren realisieren lassen.

ob die entwickler das mathematisch erkundet haben oder empirisch, das ist nicht so wichtig,

Die grundlegen Digitalschaltungen haben ein deterministisches Verhalten und formal beweisbares Verhalten, dass sich vollständig in einer Wahrheitstabellen abbilden lässt. Das ist nicht wo man empirisch herumwurschteln würde oder sollte…

bei Antwort benachrichtigen
Alpha13 Alekom „also in der tiefsten ebene ist es als schaltung konzipiert, DAS ...“
Optionen

Du versuchst das Pferd von der falschen Seite aufzuzäumen und das kann nur sowas von in die Hose gehen!

Wer nicht Assembler versteht (und sich auch nicht einarbeiten will) für den bleiben die anderen Sachen immer böhmische Dörfer und nicht umgekehrt!

Was du suchst ist Fastfood ohne wirkliches Grundwissen zu haben und das kannst du knicken.

bei Antwort benachrichtigen
andy11 Alekom „assembler - wie funktioniert das“
Optionen

Es gibt ihn noch, den  Rechner auf Papier oder.....

http://www.wolfgang-back.com/knowhow_home.php

Ganz unten kann man sich den Rechner downloaden.

Andy

Alle Menschen sind klug ? die einen vorher, die anderen nachher. Voltaire
bei Antwort benachrichtigen
Xdata andy11 „Es gibt ihn noch, den Rechner auf Papier oder..... ...“
Optionen

Weckt alles - alte Erinnerungen ..

Programmierung des 6502 von Rodnay Zaks, es gab noch viel "leichtereLächelnd" 6502 Bücher.

Diese CPU, 6502 ist ganz gut geeignet,
minimale Grundlagen
zu verstehen.

Nicht unbedingt Assemler selbst, sondern wie der eigentlich "rechnet".

Die "Verschiebung" von Registern oder so wurde ja schon angedeutet.
Damals gab es wohl  EinPlatinen Systeme mit LED Displays für den 6502?
 Aber ohne Garantie, ist schon eine Weile her.

Das Buch von Rodnay Zaks geht schon viel zu weit, mehr in Richtung von Assembler Progammen.
Ein anderes Buch hat eher die grundlegende (Register) Arithmetik betrachtet, anhand des 6502.
Den Namen hab ich leider Vergessen ..

bei Antwort benachrichtigen
gelöscht_323936 Alekom „assembler - wie funktioniert das“
Optionen
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.

Assembler ist eine maschinenorientierte Programmiersprache. Wie das auf PCs und anderen Minirechnern läuft weiß ich nicht so genau - normalerweise wird Assembler mit einem Compiler in die Maschinensprache übersetzt; anders als Basic, das schrittweise abgearbeitet weden kann. So gibt es auch für jeden Rechner ein bißchen unterschiedliches Assembler - eben abhängig von dem Rechner und seinem Aufbau.

Unterschied zur Maschinensprache:  es gibt Variable und auch Felder. Schreibt sich einfacher.
Assembler gibt es auch für Großrechner - und da gehört eben wie für C, FORTRAN, ALGOL usw. ein Compiler dazu, der daraus die Maschinenbefehle erzeugt.
Es gab unendlich lange Programme in Assembler. Ist wohl eher Vergangenheit seit C.

Grundlage für die heute -noch- üblichen Rechner ist vor allem die von-Neumann-Architektur (etwa 1945) von Rechnern. Einfach gesagt besteht der Rechner aus einem "Rechenwerk" und einem Speicher, der sowohl Befehle als auch Werte (Zahlen oder codierte Zeichen) enthält.
( Zuse hatte einen ähnlichen Aufbau)

Für die (Maschinen-)Operationen mit verschiedenen Kleinrechnern sind oben einige Beispiele genannt.
Und das ist eben das wichtige - welche Befehle im Rechner was machen. (Dabei ist wohl Addition und Multiplikation das gleiche...) Assembler wird einfach in diese Befehle übersetzt!

Sonst noch was?
Assembler hat man in den 60ern und 70ern viel benutzt, als es noch kein C und C++ gab und wenige Funktionen - wie z.B. MIN, MAX, SORT und so weiter. Das hat man/frau selbst in Assembler geschrieben.

bei Antwort benachrichtigen
Alekom gelöscht_323936 „Assembler ist eine maschinenorientierte Programmiersprache. Wie ...“
Optionen

ich habe während meiner mechatroniker-ausbildung etwas an assembler geschnuppert.

es war so, wie ein ahnungsloser irgendwo herumstochert.

intuitiv ist das ganze gar nicht gewesen. gut ich bin ja auch mehr der praktiker.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Alpha13 Alekom „ich habe während meiner mechatroniker-ausbildung etwas an ...“
Optionen

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

Wer sowas schreibt hat definitiv keinen blassen Schimmer von Assembler.

bei Antwort benachrichtigen
Alekom Alpha13 „Was Assembler ist weiss ich ja, es sind mnemotechnische ...“
Optionen

drum schrieb ich ja VORHER:

es war so, wie ein ahnungsloser irgendwo herumstochert.

gut das mit den binäre einheiten war falsch formuliert.

was ist es denn dann?

In Assemblersprache werden die Opcodes (Befehle) der jeweiligen CPU mit Namen, den sogenannten Mnemonics versehen ...

sorry das ich die ziffern 0 und 1 als binäre Einheiten versehen habe. is owa trotzdem richtig.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Alpha13 Alekom „drum schrieb ich ja VORHER: es war so, wie ein ahnungsloser ...“
Optionen

http://www.lowlevel.eu/wiki/Teil_2_-_Assembler_101#Begriffe

Befehl + Operanden sollten einem da schon definitiv einiges sagen und die sagen dir nix und ein Maschinenbefehl ist zudem AFAIK immer hexadezimal und absolut nicht nur der.

http://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren/_Druckversion

bei Antwort benachrichtigen
Alekom Alpha13 „http://www.lowlevel.eu/wiki/Teil_2_-_Assembler_101 Begriffe ...“
Optionen

jo und genau deswegen hab i den thread erst überhaupt eröffnet:

Das Mnemonic ist der Assemblername eines Befehls, z.B. add

wie wird der "gebaut" und wo wird der abgelegt?

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Alpha13 Alekom „jo und genau deswegen hab i den thread erst überhaupt eröffnet: ...“
Optionen

Beim x86er hat natürlich Intel die Sachen vorgegeben und "gebaut" und da ist nix mit umbauen!

http://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren/_Rechnen_mit_dem_Assembler

http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

Welche Operanden (Register) man beim add Befehl von den vorhandenen "general purpose Registern" man nimmt ist schon dem Programmierer überlassen!

bei Antwort benachrichtigen
gelöscht_323936 Alekom „ich habe während meiner mechatroniker-ausbildung etwas an ...“
Optionen

Hi Alekom – lass Dich nicht ärgern!
Manchmal kommt sowas raus, wenn Lehrer oder Ausbilder etwas nicht vernünftig rüber bringen.

Assembler braucht nicht jeder und auch meine jungen Arbeitskollegen wissen wohl kaum, was das ist.  Und sind alle den ganzen Tag am Computer, auf Arbeit und zu Hause. (Aber keine Informatiker oder so).

bei Antwort benachrichtigen
Beeper Alekom „assembler - wie funktioniert das“
Optionen

Hier meine Interpretation :-)

Die Assemblersprache verwendet das Hexadezimal System und bietet damit eine "einfachere" Darstellung der binär Zahlen. Dieser Link http://home.snafu.de/sicpaul/midi/hexbin.htm zeigt dir eine Umrechnungstabelle von HEX nach Binär. Beispiel B0 entspricht dem Binär Wert 1011 0000. Diese Darstellung entspricht 8 Transistor Schaltungsstellungen auf der CPU. 1 = Beim Transistor fliesst Strom. 0 = es fliesst kein Strom. Jede Ziffer für sich entspricht 1 Bit. Für 1011 0000 werden nun also elektronisch z.b. in der LED Anzeige die LED Segmente aktiviert um B0 darstellen zu können.

Dieser Link http://de.wikipedia.org/wiki/Assemblersprache zeigt bei der Beschreibung den Binär Code 10110000 01100001 welcher umgerechnet in HEX 'B0 61' entspricht oder dem Assemblerbefehl für move.

Wie rechnet die CPU nun mit diesen Bits? Hierfür wird die boolsche Algebra angewandt. Dazu dieser Link http://www.freebasic-portal.de/tutorials/boolsche-algebra-rechnen-im-dualsystem-63.html welcher das Rechnen des Dualsystems erklärt.

Gruss Beeper

 

bei Antwort benachrichtigen
Alekom Beeper „Hier meine Interpretation :- Die Assemblersprache verwendet das ...“
Optionen

wie man mit binären ziffern rechnet weiss ich eh. damit hab ich keine probleme.

einzig und allein geht es mir nur darum, wie man einen befehl wie move baut und wo der "abgelegt" ist.

aber vielleicht geht das nicht zu erklären. es ist wie mit dem begriff energie. den kann man auch nicht so wirklich erklären. nein damit ist nicht gemeint der satz das es nix anderes heisst als arbeit zu verrichten.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
gelöscht_323936 Alekom „wie man mit binären ziffern rechnet weiss ich eh. damit hab ich ...“
Optionen

Hallo Alekom,
da wird nix gebaut aber wohl abgelegt.
Oben sind diverse Links zu Assembler-Sprachbeschreibungen.
Wurden denn in dem Fach keine Beispiele geschrieben und ausgeführt? Was war das denn für eine Ausbildung?

Wie bei jedem Programm Zeile für Zeile schreiben. (Editor oder andere Oberfläche)
Im Gegensatz zu Basic und VBA werden (wurden in der Regel) die Texte übersetzt und  können dann benutzt oder aufgerufen werden.

Wieso imme move-Befehl?
Wichtiger ist es doch, externe Geräte und Schnittstellen anzusprechen, Dateien zu öffnen, darein zu schreiben usw.

Am besten - Beispiel ansehen und nachmachen.

Tipp: Standardübung war immer das Programm "Hello World" - Eintippen und den Text gesamt am Bildschirm anzeigen lassen.....

https://de.wikipedia.org/wiki/Hallo-Welt-ProgrammIn den Beispielen wird nicht über die Tastatur eingegeben, das ist dann der nächste Lern-Schritt.

Viel Erfolg dabei!

bei Antwort benachrichtigen
Borlander gelöscht_323936 „Hallo Alekom, da wird nix gebaut aber wohl abgelegt. Oben sind ...“
Optionen
Wichtiger ist es doch, externe Geräte und Schnittstellen anzusprechen

Genau da würde dann aber fast sicher wieder irgendwo ein MOV zum Einsatz kommen: z.B. wenn Status-Flags auf die Adresse einer Schnittstelle geschrieben werden.

bei Antwort benachrichtigen
gelöscht_323936 Borlander „Genau da würde dann aber fast sicher wieder irgendwo ein MOV zum ...“
Optionen
ein MOV zum Einsatz

Ja, vielleicht.Beim Ansprechen von Geräten heißt das eher 'OPEN' und 'PUT' und so.

Das MOV braucht man wohl doch ziemlich oft, um was in Register oder das Rechenwerk zum Bearbeiten zu schieben und zurück.

Meine Kenntnisse sind da mehr aus dem Mainframe-Bereich, und da ist das auch schon lange Vergangenheit. Roboter-Programmierung oder Geräte-Software - und dafür ist Assembler nötig - kam bei mir nicht vor.
Für umfangreichere Sachen hatte man ja dann C oder Pascal.

Doch was man zum Assembler wissen muss, ist eben erst mal wie der Computer arbeitet und dann wie die Syntax aussieht.
Es ist ja im Prinzip fast die Maschinensprache, wobei die Befehle eben leicher zu merken sind.
Ich wüßte nicht, wie im Maschinencode eine Schleife oder Sprungbefehl aussehen - ist in ASS. eben anschaulicher...

bei Antwort benachrichtigen
Borlander gelöscht_323936 „Ja, vielleicht.Beim Ansprechen von Geräten heißt das eher OPEN ...“
Optionen
Beim Ansprechen von Geräten heißt das eher 'OPEN' und 'PUT' und so.

Da bist Du dann aber bereits auf der Ebene von Hochsprachen (oder ASM-Makros). Das ist zumindest auf x86 nichts was als Maschinenbefehl zur Verfügung steht.

oder das Rechenwerk zum Bearbeiten zu schieben und zurück.

Direkt ins Rechenwerk schiebst Du eher nichts. Du lädtst Daten in Register und das Rechenwerk arbeitet dann ausschließlich auf den Registern. Bei einfachen Architekturen schaut es sogar so aus, dass die Operanden in exakt vorgegebenen Registern liegen müssen.

Meine Kenntnisse sind da mehr aus dem Mainframe-Bereich, und da ist das auch schon lange Vergangenheit.

Da laufen heute noch Bestandssysteme auf ASM-Basis…

bei Antwort benachrichtigen
gelöscht_323936 Borlander „Da bist Du dann aber bereits auf der Ebene von Hochsprachen oder ...“
Optionen

GET PUT - Jetzt weiß ich das nicht mehr im Einzelnen - das ist ja schon Jahre her.

Bei Mainframes waren get und put und solche Befehle zum Lesen und Ausgeben von Lochkarten - zum Beispiel. Aber wie die dann in Maschinencode aussahen - das weiß ich nicht mehr. Jedenfalls etliche Zeilen.

Klar, dass heute für Maschinen zur Steuerung das jeweilige Assembler eingesetzt wird.  Das ist sinnvoll wegen Zeit und Platz.

Alekom schrieb ja, das er in Mechatroniker-Ausbildung war. Da sind ASSEMBLER-Kenntnisse sicher sinnvoll!

bei Antwort benachrichtigen
Borlander gelöscht_323936 „GET PUT - Jetzt weiß ich das nicht mehr im Einzelnen - das ist ja ...“
Optionen
Klar, dass heute für Maschinen zur Steuerung das jeweilige Assembler eingesetzt wird.  Das ist sinnvoll wegen Zeit und Platz.

Das macht heute eigentlich auch keiner mehr. Rechenleistung kostet nichts mehr und Entwicklerzeit ist teuer. Mich Hochsprachen bekommst Du wartbarere Anwendungen und Du hast auch eine ausreichende Auswahl an hart echtzeitifähigen Systemumgebungen.

Alekom schrieb ja, das er in Mechatroniker-Ausbildung war. Da sind ASSEMBLER-Kenntnisse sicher sinnvoll!

Ich behaupte, dass wenige bis eher kein einziger Azubi von ASM-Kenntnissen profitiert. Da dürfte es viele Themen geben die wichtiger sind und in den Berufsschulen zu kurz kommen.

bei Antwort benachrichtigen
Andreas42 gelöscht_323936 „GET PUT - Jetzt weiß ich das nicht mehr im Einzelnen - das ist ja ...“
Optionen

Hi!

Klar, dass heute für Maschinen zur Steuerung das jeweilige Assembler eingesetzt wird.

Das ist eher weniger der Fall, sofern die Werkzeug- oder Fertigungsmaschinen/anlagen meinst. Man setzt zur Maschinensteuerung (also direkt an der Maschine) heute eher auf SPSen (Speicher-Programmierbare-Steuerungen).

Bekannt sind hier zum Beispiel die Siemens SPSen S5 und S7.

Der Grund ist das Maschinensteuerungen sicherheitsrelevant sind und man bei Maschinensteuerung sicherstellen muss, dass der Steuerungsrechner auf Signaländerungen in der Maschine - z.B.Notaus - jederzeit reagieren können muss (Echtzeitfähigkeit) oder zudem selbst erkennen kann, ob die Steuerung technisch korrekt arbeitet (Watchdog-Funktion).

Hier haben sich in der Praxis schon seit Jahren kleine Steuerungsrechner, mit speziellen Programmiersprachen durchgesetzt. Der Vorteil ist dann auch, dass die eigentliche SPS (d.h. der eigentliche Steuerrechner) unabhängig von der Maschine ist. Die SPS sieht nur Eingänge und Ausgänge, die sie auslesen und setzen kann. Damit kann ein Steuerungsrechner dann an unterschiedlichsten Maschinen eingesetzt werden. Die "Anpassung" an die jeweilige Hardware der Maschine erfolgt dann durch das erstellen der entsprechenden SPS-Programme.

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
gelöscht_323936 Andreas42 „Hi! Das ist eher weniger der Fall, sofern die Werkzeug- oder ...“
Optionen

Danke für die Korrektur und die ausführliche Erklärung.
Mit einigen aktuellen Entwicklungen bin ich ich sicher nicht up to date und bin auch keine Technikerin.

Ich kann mir denken, dass es eine ganze Reihe von angepassten Sprachen für die Entwicklung von Steuerungen gibt. Welche Vielfalt...

Wieso Assembler nicht echtzeitfähig sein soll, verstehe ich aber nicht.  Vielleicht gibt es Ereignisse, die nicht im Befehlssatz erfasst sind. (?)
Aber wie arbeitet der  Steuerungsrechner? Also ohne Programm?
Assembler ist direkt Maschinencode, nur einfacher zu lesen.

Ich finde die Diskussion spannend und kann damit mal wieder -vor der endgültigen Entsorgung- in alte Unterlagen schauen. Assembler Handbücher noch mit Vorwort von Konrad Zuse, 4.Aufl 1988.

Bis dann Annegret

bei Antwort benachrichtigen
Andreas42 gelöscht_323936 „Danke für die Korrektur und die ausführliche Erklärung. Mit ...“
Optionen

Hi!

Bei der Echtzeitfähigkeit geht es darum sicherzustellen, dass ein Programm in einer gewissen Zeit garantiert alle Eingänge abfragen kann und darauf reagieren kann. Das Programm darf dabei nicht zu lange unterbrochen oder gar gestoppt werden (passiert das, dann muss eine Fehlerroutine angesprungen werden). Die SPS überwacht sich quasi parallel zur Programmausführung im Hintergrund selbst.

Man kann das natürlich in Assambler erreichen, schließlich Verwendet die SPS auch nur einen Interpreter und der wird letztendlich als Maschinencode auf der verwendeten CPU der SPS ausgeführt. Das Betriebssystem der SPS könnte also durchaus mit einem Assembler programmiert worden sein.

Aber in der Praxis will man sich hier nicht um die komplexen Programmierungen direkt auf der CPU kümmern. Man müsste schließlich die ganze Funktionalität zur Selbstüberwachung zusätzlich einbauen, welche die Echtzeitfähigkeit erfordert.

Die SPS nimmt einem hier viel Arbeit ab, weil sie das ganze Drumherum mitbringt, was die Echtzeitfähigkeit erfordert. Es wäre einfach zu aufwendig und zu teuer eine solche Steuerung komplett echtzeitfähig in Assembler für jede Maschine neu zu programmieren, wenn man eine fertige SPS einfach zukaufen kann und dann die Maschine darüber programmiert.

Bis dann

Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Borlander gelöscht_323936 „Ja, vielleicht.Beim Ansprechen von Geräten heißt das eher OPEN ...“
Optionen
Doch was man zum Assembler wissen muss, ist eben erst mal wie der Computer arbeitet und dann wie die Syntax aussieht.

Das fasst es ganz gut zusammen.

Wobei die Syntax nun wirklich nicht kompliziert ist ;-)

bei Antwort benachrichtigen
Borlander Alekom „wie man mit binären ziffern rechnet weiss ich eh. damit hab ich ...“
Optionen
vielleicht geht das nicht zu erklären

Das ist alles erklärbar. Aber nicht auf einer Seite Text und vor allem nicht ohne umfangreichere theoretische Vorkenntnisse.

Welche Vorkenntnisse sind denn bei Dir vorhanden? Informatik-Studium, Ausbildung zum Fachinformatiker, sonstiges in technischer Richtung?

bei Antwort benachrichtigen
Alekom Borlander „Das ist alles erklärbar. Aber nicht auf einer Seite Text und vor ...“
Optionen

:)

ich bin leider nur ein umschulungs-mechatroniker, der die ausbildung in 18 monaten absolviert hat.

das heisst, alles in schnellsiedekurse "erlernt". also alles eher an der oberfläche.

schwerpunkt war bei uns eindeutig der elektrotechnische bereich.

programmiert haben wir hauptsächlich in SPS. assembler war vielleicht ein thema für 1 Tag.

und genau dort hatte ich null Durchblick!

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
giana0212 Alekom „: ich bin leider nur ein umschulungs-mechatroniker, der die ...“
Optionen

Hi, Alekom. Vieleicht hilft Dir das:

https://homepages.thm.de/~hg6458/AS.pdf

Mir war das auch immer zu kompliziert. Sowas kriege ich nicht in den Kopf. Leider hatte mich auch SPS nicht interessiert. War einfach zu trocken.

Ein Irrtum dieser Zeit ist es, Glück mit Besitz zu verwechseln.
bei Antwort benachrichtigen
Alpha13 Alekom „: ich bin leider nur ein umschulungs-mechatroniker, der die ...“
Optionen

Den Mechatroniker möchte Ich sehen, der sich mit CPUs + Assembler wirklich auskennt (kennen muß)!

Das ist da ein Job für Ingenieure und das sollte klar wie Kloßbrühe sein!

bei Antwort benachrichtigen
Alekom Alpha13 „Den Mechatroniker möchte Ich sehen, der sich mit CPUs Assembler ...“
Optionen

es gibt unterschiedliche mechatroniker!

  • Mechatroniker für Manuelle Fertigung für Hausmeisteranlagen in technischen Bereichen von Schulen
  • Mechatroniker für Maschinen- und Fertigungstechnik
  • Mechatroniker für Elektromaschinenbau und Automatisierung
  • Mechatroniker für Medizingerätetechnik
  • Mechatroniker für Elektronik, Büro- und EDV-Systemtechnik (zur Ausübung der Tätigkeiten der Kälte- und Klimatechniker sowie der Kommunikationselektroniker berechtigt)
  • Durch die GewO-Novelle 2002 wurden der Elektroniker und der Bürokommunikationstechniker zum Mechatroniker für Elektronik, Büro- und EDV-Systemtechnik zusammengefasst.

zumindest in Österreich ist das so. Es kommt halt sehr stark auf den Betrieb an, in dem man arbeitet. DEN Mechatroniker gibts ja nicht.

Alles mit einer Lehre erlernbar. Zumindest wenn man nicht Uni-Niveau benötigt.

Ich kenne aber persönlich niemanden der sich mit Assembler noch beschäftigt.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Alpha13 Alekom „es gibt unterschiedliche mechatroniker! Mechatroniker für ...“
Optionen

Was Ich schrieb gilt allgemein und auch in Österreich!

Es beschäftigen sich nur ausgebildete "Programmierer" und Ingenieure wirklich mit dem Thema oder Leute, die es sich das ausschließlich selbst beigebracht haben und von denen gibts immer weniger!

Nur Techniker machen das AFAIK manchmal auch und die liegen in Deutschland zwischen Ingenieuren und Mechatronikern!

http://www.kununu.com/news/mechatroniker-mechatronikerin-die-richtige-ausbildung-fur-dich

Und Mechatroniker sind AFAIK in beiden Ländern quasi identisch!

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
Alekom xafford „Zu deiner Frage wurde ja schon vieles richtig geschrieben, aber ...“
Optionen

Wo wird Assembler zum dem, was letztendlich als Ergebnis heraus kommt?

jou, es kommt schon näher zu dem Punkt, was ich wissen möchte ...

und das Befehle fest verdrahtet sind, erscheint mir ja eigentlich "logischer", denn irgendwo muss ja die CPU mal "beginnen".

Aber das ist dann "nur" mathematisches Vorgehen, was passieren muss, wenn ich entsprechende Elektronik nach einen gewissen Schema verdrahte?

Demzufolge denke ich, das diverse Befehle nur ausgemachte Sachen sind, also Befehl Move könnte dann auch Befehl Hudriwudri heissen.

Stimmt mein Denken: Ein Befehl = eine spezifische Verdrahtung *und nix softwaremäßiges*

dann müssten ja 100 Befehle hundert Verdrahtungen entsprechen?

Wenn das so stimmt, dann kann ich viel mehr damit anfangen. Weil es MEINEM Grundverständnis entspricht. Ich brauche alles anschaulich erklärt, da ich kein Theoretiker bin.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „Wo wird Assembler zum dem, was letztendlich als Ergebnis heraus ...“
Optionen
Aber das ist dann "nur" mathematisches Vorgehen, was passieren muss, wenn ich entsprechende Elektronik nach einen gewissen Schema verdrahte?

Irgendwie verstehe ich diese Frage nicht.

das diverse Befehle nur ausgemachte Sachen sind, also Befehl Move könnte dann auch Befehl Hudriwudri heissen.

Könnte er. Aber das wäre nicht so viel hilfreicher als die Binärrepräsentation des Maschinencodes (oder Programme in der Sprache Brainfuck). Eigentlich hattest Du doch selbst schon im ersten Satz Deines Startpostings darauf hingewiesen, dass die "ASM-Befehle" lediglich einfach zu merkende Kürzel sind.

Stimmt mein Denken: Ein Befehl = eine spezifische Verdrahtung *und nix softwaremäßiges*

Das kommt auf die CPU-Architektur an. Bei einfachen RISC-CPUs könnte das tatsächlich so sein, bei x86 CPUs kann man eine solche 1:1-Zuordnung aber ausschließen. Wenn Du selben Befehl mit unterschiedlichen ggf. beliebig kombinierbaren Operanden nutzen kannst, dann wird man bei der Ausführung mehrere "Teilbefehlsverdrahtungen kombinieren". Z.B. könnte eine einfache Addition:

ADD EAX, EBX

aus folgenden Teilen bestehen:

  • Verbinde Register EAX mit Operandeneingang 1 und Ausgang des Rechenwerks
  • Verbinde Register EBX mit Operandeneingang 2 des Rechenwerks
  • Nutze das Addierwerk (dort passiert dann die eigentliche Arbeit)
bei Antwort benachrichtigen
gelöscht_323936 Alekom „Wo wird Assembler zum dem, was letztendlich als Ergebnis heraus ...“
Optionen

Noch mal wie ganz oben: Assembler ist eine maschinennahe Programmiersprache und wird Befehl für Befehl in Maschinencode übersetzt.

Die Abfolge der Maschinenbefehle als Programm wird zum Ausführen in den Hauptspeicher geladen, genau wie die benötigten oder zu berechnenden Daten. 
Das ist in etwa die von-Neumann-Architektur". Dazu hatte jemand auch oben einen Link eingestellt.

Dann kommt die Programmverarbeitung - (Maschinen-)Befehl nach Befeh- in der CPU. Borlander hat das grade anschaulich für eine Addition beschrieben.

In einer CPU gibt es nicht nur Verdrahtungen, es gibt da verschiedene Stellen, wo sich das Teil etwas merkt. Zum Beispiel Register, dann können Flags gesetzt werden.
Die CPU muss wissen, wie ein Befehl mit welchem mit dem Operanden arbeiten soll.
Und da hört schon die Verdrahtung für jeden einzelnen Befehl auf.

HIER: Andy11 hat oben (09.06.2015, 08:57) geschrieben

Es gibt ihn noch, den  Rechner auf Papier oder....

So ist das Prinzip von dem Ganzen.

Die Vorstellung von "Verdrahtung" der Befehle in der CPU habe ich unter Programmierern so noch nicht gehört.
Vielleicht denken Steuerungs-Ingenieure über so was nach. Für Assembler kann das weg bleiben. 

Ganz einfach denken. Und sich ein bißchen mit dem Aufbau der CPU beschäftigen, für die das Assembler steht.

bei Antwort benachrichtigen