Generische Assemblersprache ?

Hallo …
Wir schreiben bald eine Klausur zu diesem Thema doch leider blick ich noch nicht 100% durch. Es gibt anscheinend unterschiedliche Assemblersprachen und bräuchte dringend eine Internetseite oder jemanden der mir ein wenig unter die Arme greifen könnte… Einfach ein paa Beispiel Aufgaben oder so … :smile:

Bis jetzt hab ich das so weit verstanden, dass man bei diesen Sprachen direkt mit seinen Speicheradressen „spricht“ und auch deren Inhalt direkt verändert ??!! Ist das so ?

Wir benutzen diese Befehle :

LOAD R, Wert 16-Bit-Zahl Wert in Register R schreiben

READ R, (Addr) Speicherzelle Addr auslesen und in A schreiben

WRITE (Addr), R Register R in Speicherzelle Addr schreiben

INC R, DEC R R inkrementieren, dekrementieren: Überlauf möglich

LOAD R,R’ R:=R’

ADD R,R’ R:=R+R’: Überlauf möglich

SUB R,R’ R:=R-R’: Überlauf möglich

SHL R R wird um 1 Bit nach links verschoben: Überlauf möglich

SHL R,n R wird um n Bits nach links verschoben

SHR R,n R wird um n Bits nach rechts verschoben

ROL R,n R wird um n Bits nach links rotiert

ROR R,n R wird um n Bits nach rechts rotiert

JUMP Addr Sprung: Befehlszähler wird auf Addr gesetzt

JMZ Addr Sprung zu Addr, wenn Register A gleich Null

JMNZ Addr Sprung zu Addr, wenn Register A ungleich Null

JMGR Addr Sprung zu Addr, wenn Register A gröÿer Null

JMOF Addr Sprung, wenn ein Überlauf stattgefunden hat

AND R,R’ R := (bitweise AND-Verknüpfung von R und R’)

OR R,R’ R := (bitweise OR-Verknüpfung von R und R’)

XOR R,R’ R := (bitweise XOR-Verknüpfung von R und R’)

NOT R’ R := (bitweises invertieren von R)

OS 00 Betriebssystem: Programmende, okay

OS 01 Betriebssystem: Programmende, Fehler

OS 02 Inhalt von A dezimal ausgeben

OS 03 Inhalt von A hexadezimal ausgeben

Doch leider finde ich im Internet nur Beispiele mit anderen Befehlen :frowning:

Bitte helft mir !?

Hallo,

Es gibt anscheinend
unterschiedliche Assemblersprachen

bitte nimm es mir nicht übel aber das sagt bereits der erste Absatz dazu in der Wikipedia
https://de.wikipedia.org/wiki/Assemblersprache
„Jede Computerarchitektur hat folglich ihre eigene Assemblersprache“
Dein Handy hat also eine andere Sprache als dein PC.

Bis jetzt hab ich das so weit verstanden, dass man bei diesen
Sprachen direkt mit seinen Speicheradressen „spricht“ und auch
deren Inhalt direkt verändert ??!! Ist das so ?

Speicherzellen sind wie Bauklötze und deine Hände sind der Prozessor. Du kannst immer nur eine bestimmte Anzahl an Bauklötzen in die Hand nehmen (meistens 2) und bearbeiten. Wenn du damit fertig bist und etwas anderes tun willst musst du die Steine wieder aus der Hand ablegen, kannst sie aber jederzeit von dort wieder aufnehmen. Einen Bauklotz selber kannst du dir als Einheit von 16 nebeneinander liegenden Abteilungen für 0 oder 1 vorstellen.

Wir benutzen diese Befehle :

Doch leider finde ich im Internet nur Beispiele mit anderen
Befehlen :frowning:

Wie bereits oben gesagt - es gibt quasi unzählige Sprachen, die sich mehr oder weniger unterscheiden. Dass du Beispiele für genau deine Sprache findest halte ich daher für seeeehr unwahrscheinlich es sei denn die entstammt einem bekannteren Lehrbuch o.ä.

Ich hoffe das hilft dir auf den Weg.
Viel Erfolg!

Hallo Kathi,

Internetseite oder jemanden der mir ein wenig unter die Arme…

SIEHE UNTEN - 6502 suchen

Sprachen direkt mit seinen Speicheradressen „spricht“

JA

und auch

deren Inhalt direkt verändert ??!! Ist das so ?

JA

Hallo,
… das ist so 30 Jahre her. Alle Unterlagen verschwanden in’s Narawana.

Jeder Befehl belegt xx Bites (Anzahl steht im Buch).
Andere haben eine feste Adresse mit einer Funktion. Mit NOP kannst du zur Reserve Speicherplatz reservieren.
Da gibt es gar nichts dynamisch, alles ist fest. Für Sprungadresse musst du abklären, ob die noch frei ist.
Zahlenbereiche (Binär, Integre (+ ganzzahlig),… brauchten mehr Bits…).
Firmen beschäftigten Hobbyprogrammierer (BASIC!) „mei“, gab das Arbeit…

Assembler:
-Diese Sprache ist streng an die betreffende Hardware gebunden. Je nach Hardware gibt es diverse „Dialekte“.

Im Gegensatz zu anderen Programmiersprachen wo der Befehlssatz vor der Ausführung übersetzt wird, ist die Ass.Sprache sehr schnell und konnte so z.B. für die Sortierung von Datensätzen genutzt werden.

Suche mal im Google nach 6502 (65xx), dort findest du was dein „Herz“ begehrt.

Viel Spass

Müsst ihr wirklich eine Anwendung schreiben? Was für welche?

Hallo Kathi!

Wie du schon richtig erkannt hast, gibt es mehrere Assembler-Sprachen. Allgemein betrachtet, wandeln die Assembler die Schreib-Befehle in Bit-Folgen, also 01-Reihen um, welche in bytes gruppiert werden. Einerseits gibt es Assembler, die andere namen für die Funktionen verwenden, die sie eingänglicher finden, andererseits Assemblersprachen, die Funktionen zusammenfassen. MASM kennt beispielsweise Schleifen-Befehle mit Abbruch-Kriterium, während man nativ mit 2 gotos oder jumps arbeitet.

Üblicherweise sollten sich die Sprachen allerdings nicht großartig voneinander unterscheiden. Dementsprechend auch Beispiele für andere Sprachen anschaulich sein.
Habt ihr keine Übungen zu diesem Thema gehabt?

Ich konnte leider nicht auf die Schnelle herausfinden, welche Sprache das nun ist. Da die Sprachen direkt in Maschinencode umgewandelt werden bzw. fast schon sind, kommt es auch auf den Rechner an, den du verwendest, was am Ende funktioniert.

Sprachen, die mir spontan einfallen sind
FASM, HLA, MASM, NASM, TASM, GoAsm

mit freundlichen Grüßen
Julian

Hallo Kathi,

leider kann ich Dir bei Deiner konkreten Frage nicht weiterhelfen. Ich nehme an es geht um Übungen in der Informatik. Ich bin leider Experte für theoretische Informatik, Hauptbereich Berechenbarkeit und Komplexitätstheorie.

Konkret zu Deiner Frage: Da ich nicht in Deiner Vorlesung sitze, kann ich Dir auch nicht den Kontext dazu liefern. Es könnte sein, dass es irgendeine tatsächliche „Assemblersprache“ gibt, die genau die von Dir genannten Befehle enthält. Im Allgemeinen ist es aber so, dass man in einer Vorlesung eine theoretische Sprache entwirft und die dann untersucht.
Es ist eigentlich sehr wahrscheinlich, dass ihr bereits Aufgaben bekommen habt. Falls nicht, kannst Du Dir zur Übung irgendwelche Aufgaben selber stellen. Z.B. programmiere einen Taschenrechner. Fange mit der Addition an, wenn x und y >0.

beste Grüße
Nne

Vielen Dank für deine schnelle Hilfe… :smile: … jetzt weiß ich das ich das mit den „Bauklötzen“ schon mal richtig hatte :smile:

Vielen Dank für deine schnelle Hilfe… wir haben einige einfache Übungen gemacht, die auch zu verstehen waren.

In unserer Probeklausur war das Programm was wir schreiben sollten nicht mehr so einfach :frowning:… da sollten wir zählen wie viele 4 Nibbles ungleich null sind und diese Anzahl dezimal ausgeben. Nach dem das besprochen wurde habe ich auch verstanden wo mein Fehler war … :smile:

Nur jetzt zuhause beim üben, kann ich ja meine Fehler nicht sehen und lerne es nachher Falsch, deswegen wäre ich sehr Dankbar für Beispiel Aufgaben… aber ihr Antwort war sehr Hilfreich Danke

Vielen Dank für deine Hilfe und die Bemühung meine Assembler Sprache herauszufinden…

wir haben einige einfache Übungen gemacht, die auch zu verstehen waren.

In unserer Probeklausur war das Programm was wir schreiben sollten nicht mehr so einfach … da sollten wir zählen wie viele 4 Nibbles ungleich null sind und diese Anzahl dezimal ausgeben. Nach dem das besprochen wurde habe ich auch verstanden wo mein Fehler war … :smile:

Nur zuhause beim üben, kann ich ja meine Fehler nicht sehen und lerne es nachher Falsch… :frowning: deswegen wäre ich sehr Dankbar für Beispiel Aufgaben… wie sie ja zu modernen Sprachen wie Java überall im Internet zu finden sind… was mir beim Java lernen sehr geholfen hat :smile:

Hoi Kathi,
Ich muss passen. Dass es so was überhaupt noch gibt Assembler.

Du bist zu mir zu weit weg …
Müsste mal über Lerninhalte diskutieren und was das soll. Heute muss man doch (immer mehr) möglich viel und selbständig lernen können.
Ich wünsche Ihnen alles Gute…

Wie gesagt, gibt es verschiedene Sprachen.

Eine sehr native Umsetzung, speziell für Einstiegs-Informatik-Vorlesungen ist der von-Neumann-Emulator.
Die Software emuliert einen Rechner, du kannst also dein Programm direkt testen. Die Befehle sind alle sehr nativ und ähnlich zu denen, die du benutzt, allerdings nicht gleich.
Eine Anleitung zum emulator gibt’s hier:
http://tu-dresden.de/die_tu_dresden/fakultaeten/faku…
(Kapitel 4 hat Befehle)
Den Emulator gibt es kostenlos hier:
http://homepage.ruhr-uni-bochum.de/daniel.reinert/So…

mit freundlichen Grüßen
Julian

Kleines Beispiel:
Ab Adresse 8192 stehen 10 Zahlen, die zusammenaddiert werden sollen.

Beispielprogramm:
LOAD R0, 10 //Schleifenzähler
LOAD R1, 8192 //Zeiger auf momentane Adresse
LOAD A, 0 //aktuelle Summe
loop:
READ R3, (R1) //lies Wert aus Speicher
ADD R2, R3 //addiere Wert auf aktuelle Summe
INC R1 //erhöhe Zeiger zu nächster Speicherstelle
DEC R0 //Schelifendurchläufe abzählen
JNZ loop //Wenn Schleifenzähler nicht 0, wiederhole Addition
OS 02 //Ausgabe von A

Schneller liefe der Code natürlich ohne Schleife, indem man einfach 10*2 Zeilen hintereinander schreibt mit READ R3, (8192); ADD R2, R3; READ R3, (8193); ADD R2, R3; … Man spart sich dann nämlich Schleifenoverhead (Initialisierung, DEC, JMNZ). Allerdings kann man dann nicht mehr eben schnell mal 100 Speicherinhalte aufaddieren. Bin allerdings nicht sicher, ob bei diesem Beispielprozessor hier ein READ R3, (R1) erlaubt ist, oder ob man in Klammer eine feste Zahl schreiben muss. Wäre dann allerdings ein sehr schwacher Prozessor mit wenigen/schwachen sogenannten Adressierungsarten. Eine nützliche Addressierungsart wäre z.B. ADD R, (R’). Aber nach deiner Beschreibung funktioniert ADD nur mit 2 Registern.

Anstelle von label muss eigentlich die Speicherstelle zu der gesprungen wird. Dazu braucht man allerdings eine Startadresse, ab der der Code im Speicher liegt. Normalerweise wird der Code allerdings wie oben beschrieben und vom Assembler beim Übersetzen in Maschinencode die reale Adresse eingesetzt.

Vielleicht sind Fehler drin, aber dazu ist die Erklärung der Befehlsmöglichkeiten nicht genau genug.

Noch Fragen?

gruss, mofte

Huhu :wink:

Zuersteinmal ist es wichtig zu verstehen, WAS assembler überhaupt ist.
Es ist ja so: Jeder Prozessor „spricht“ nur binär - 1 und 0, an und aus, Strom und kein Strom.
Da aber jede Prozessorfamilie (Microcontroller wie eine PixAXE oder x86-kombatible wie die Desktoprechner von Intel und AMD) ihre eigenen sogenannten Befehlssätze hat, also quasie eine „andere“ Binärsprache sprichtm gibt es auch zig verschiedene Assemblersprachen.
Assembler macht nichts anderes, als jeweils einen Maschinenbefehl (also eine Folge von Einsen und Nullen) halbwegs menschenlesbar zu machen, in dem es diesem einen Namen gibt (sogenannte Mnemonics).

Das heißt, dass du genau wissen musst, für welchen Prozessor du Assembler schreiben willst, denn nur dieser wird die Befehle, die du gelernt hast, auch verstehen.
Und wenn du einfach nur nach „Assembler-Beispiel“ suchst, oder so, wirst du höchstwahrscheinlich primär auf Assemblercode für Heimcomputer (x86-kompatibel) stoßen. Un auch für den gleichen Prozessor kann es syntaktische Unterschiede geben - da es manchmal mehrere Standards gibt, den Maschinencode zu Mnemonics zuzuordnen, je nach verwendeter Assemblersoftware.

Da muss ich leider passen, habe ich meine Unterlagen doch weggelegt - sorry

Hallo Kathi,

ich kann Dir leider nicht helfen - sorry.

Ich habe assembler nie kennengelernt, da die Sprache noch älter ist als ich :smiley:

Trotzdem viel Erfolg!