Übungsstunde: Erstes Assembler Programm für einen Prozessor

In dieser Übungsstunde haben wir unser erstes Programm für einen Prozessor geschrieben. Der Prozessor ist fiktiv. Das Programm lässt sich so nicht 1:1 auf einen echten Prozessor übertragen.

Assembler ist einer der untersten Programmiersprachen. Also eine, die am nächsten an der Maschine arbeiten.

Unser erstes Prozessorprogramm in Assembler. Dazu gibt es im ersten Sinne folgende Befehle:

LOAD <Speicherzelle>	 	 
STORE <Speicherzelle>	 	 
ADD <Speicherzelle>	 	 
SUB <Speicherzelle>	 	 
JUMP <Label>	 	 
JUMPZ <Label>	 	 
LOADA // Lesen der ausgerechneten Speicherzelle

Wir haben die obrigen Befehle zur Verfügung. Dazu gilt es nun folgende Aufgaben zu lösen:

1. Schreiben Sie ein Programm (ohne Schleife), das die Inhalte der Speicherzellen 1-4 addiert und das Ergebnis in Speicherstelle 5 ablegt.

Load 1;
Add 2;
Add 3;
Add 4;
Store 5;

2. … Speicherzelle 1 sagt wie viele Speicherzellen nachfolgend addiert werden sollen.

LOAD 3; // Laden der SZ 3
JUMPZ FERTIG; // Wenn SZ == 0; Ende
SUB 1; // Subtrahieren der SZ 1
STORE 3; // Speichern in SZ 3

ADD 2; // Laden der SZ 2
LOADA; // Adresse des momentan Speichers lesen
ADD 4; // Addieren der SZ 4 (Inhalt == Zwischensumme)
STORE 4; // Speichern in SZ 4

JUMP LOOP; // Wieder zum Anfang springen

SZ = Speicherzelle
Die nächste Tabelle zeigt die Einteilung der Speicherzellen mit ihrem Inhalt, um den letzten Teil des Codes besser verstehen zu können.

Speicherzelle 0 1 2 3 4 5 6 7 8
Inhalt 0 1 4 Zwischensumme n x1 x2 x3

Hiermit haben wir unsere erste Schleife in Assembler realisiert.

Leider geht bei diesem Programm unsere Speicherzelle 5 kaputt. Deswegen erweitern wir unser Programm darum, das wir uns eine Kopie von 5 anlegen und damit weiterarbeiten. Dadurch wird die Speicherzelle 5 nicht überschrieben und wir können diese beliebig oft verwenden.

LOAD 5
STORE 3 // Kopie von "n" (SZ 5) anlegen

LOAD 0
STORE 4 // Summe auf 0 zurücksetzen
LOAD 3 // Laden der SZ 3
JUMPZ FERTIG // Wenn SZ == 0; Ende
SUB 1 // Subtrahieren der SZ 1
STORE 3 // Speichern in SZ 3

ADD 2 // Laden der SZ 2
LOADA // Adresse des momentan Speichers lesen
ADD 4 // Addieren der SZ 4 (Inhalt == Zwischensumme)
STORE 4 // Speichern in SZ 4

JUMP LOOP // Wieder zum Anfang springen

FERTIG

LOAD 5
ADD 2
ADD 1

STOREAR
LOAD 4
STORE


Speicherzelle 0 1 2 3 4 5 6 7 8
Inhalt 0 1 4 Kopie von n (SZ 5) Zwischensumme n x1 x2 x3

An dieser Stelle benötigen wie ein Adressregister und fügen somit folgende Befehle an:

STOREAR //Speichern in Adressregister
LOADAR // Laden aus Adressregister
STORE <Ohne Angaben>
LOAD <Ohne Angaben>

Mit diesen Befehlen lässt sich nun der komplett geforderte Code realisieren. Dies ist die Grundfunktionsweise eines Prozessors und der Programmiersprache Assembler, die dafür verwendet wird, Maschinen zu Programmieren.

Marvin Sengera

Hey! Ich bin Marvin Sengera, Inhaber der Internetagentur "Binärfabrik" aus Paderborn. Ich habe mein Bachelorstudium Informatik mit Schwerpunkt Industriespionage an der Hochschule Hamm Lippstadt abgeschlossen und absolviere derzeit meinen Master in Fachrichtung "Technical Entrepreneurship and Innovation". Ich beschäftige mich rund um die Themen Informatik, Innovation & Unternehmensgründung.

Das könnte dich auch interessieren …

Schreibe einen Kommentar