Beispiele für Programme in Maschinensprache

Zurück in die Steinzeit der Computergeschichte, als Speicher und Rechenleistung ein knappes Gut waren und jeder Programmcode gut überlegt sein musste.

Jumper auf ROM Modul Abb: Jumper auf dem ROM Modul

Du wirst erstaunt sein, welche Aufgaben Du trotzdem mit nur 16 Byte Programmcode und ein paar wenigen Maschinenbefehlen lösen kannst.

Inhalt

  1. Fibonacci Reihe
  2. Zahlen im Speicher dividieren
  3. Welche Zahl im Speicher ist größer
  4. Endlos Additionsmaschine
  5. Quadratzahl bis 15
  6. Zeigerakrobatik Quadratzahl
  7. BCD Umwandlung einer Zahl von 0 - 19
  8. ganzzahliger Mittelwert 2er Zahlen
  9. Laufschrift ausgeben
  10. Das könnte Dich auch interessieren

Fibonacci Reihe

Adr Befehl Code Beschreibung
00 LDA 13 0001 1101 lade Register A mit Inhalt von Adresse 13
01 ADD 14 0010 1110 addiere Wert von Adresse 14 zu Register A
02 OUT 1110 lade Register O mit dem Inhalt von Register A
03 JPC 10 0110 1010 springe wenn Carry Flag auf Adresse 10
04 STA 15 1000 1111 speichere Register A auf Adresse 15
05 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
06 STA 13 1000 1101 speichere Register A auf Adresse 13
07 LDA 15 0001 1111 lade Register A mit Inhalt von Adresse 15
08 STA 14 1000 1110 speichere Register A auf Adresse 14
09 JMP 0 0100 0000 springe auf Adresse 0
10 HLT 1111 halte Programm an
..
13 var 0000 0000 initial 0
14 var 0000 0001 initial 1
15 var 0000 0000 initial 0

Sieh Dir das Video Relais Computer rechnet die Fibonacci Reihe auf Youtube an @relaiscomputer

Relais Computer rechnet Fibonacci Reihe

Zahlen im Speicher dividieren

Adr Befehl Code Beschreibung
00 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
01 SUB 15 0010 1111 subtrahiere von Register A den Wert von Adresse 15
02 JPN 08 0101 1000 springe auf Adresse 8 falls (N)egativ Flag gesetzt
03 STA 14 1000 1110 speichere Register A auf Adresse 14
04 LDA 13 0001 1101 lade Register A mit Inhalt von Adresse 13
05 ADD 12 0010 1100 addiere Wert von Adresse 12 zu Register A
06 STA 13 1000 1101 speichere Register A auf Adresse 13
07 JMP 00 0100 1001 springe auf Adresse 0
08 LDA 13 0001 1101 lade Register A mit Inhalt von Adresse 13
09 OUT 1110 lade Register O mit dem Inhalt von Register A
10 HLT 1111 halte Programm an
..
12 var 0000 0001 Zahl (1)
13 var 0000 0000 Ergebnis Ganzzahl
14 var 0001 0001 1. Dividend (17) Ergebnis Rest
15 var 0000 0100 2. Divisor (4)

Welche Zahl im Speicher ist größer

Adr Befehl Code Beschreibung
00 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
01 SUB 15 0011 1111 subtrahiere von Register A den Wert von Adresse 15
02 JPN 08 0101 1000 springe auf Adresse 8 falls (N)egativ Flag gesetzt
03 JPZ 06 0101 1101 springe auf Adresse 6 falls (Z)ero Flag gesetzt
04 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
05 JMP 09 0100 1001 springe auf Adresse 9
06 LDA 13 0001 1101 lade Register A mit Inhalt von Adresse 13
07 JMP 09 0100 1001 springe auf Adresse 9
08 LDA 15 0001 1111 lade Register A mit Inhalt von Adresse 15
09 OUT 1110 lade Register O mit dem Inhalt von Register A
10 HLT 1111 halte Programm an
..
13 var 0000 0000 Wert für beide Zahlen gleich (0)
14 var 0000 0100 1. Zahl (4)
15 var 0000 1110 2. Zahl (14)

Endlos Additionsmaschine

Adr Befehl Code Beschreibung
00 INP 1101 lade Dezimaleingabe von Tastatur in Register A
01 ADD 15 0010 1111 addiere Wert von Adresse 15 zu Register A
02 STA 15 1000 1111 speichere Inhalt von Register A auf Adresse 15
03 OUT 1110 lade Register O mit dem Inhalt von Register A
04 HLT 1111 halte Programm an, weiter mit run
05 JMP 00 0100 0000 springe auf Adresse 0
..
15 var 0000 0000 initial 0

Quadratzahl bis 15

Adr Befehl Code Beschreibung
00 INP 1101 lade Dezimaleingabe von Tastatur in Register A
01 STA 15 1000 1111 speichere Inhalt von Register A auf Adresse 15
02 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
03 LDX 15 1011 1111 lade Register C mit Inhalt von Adresse 15
04 ADD 15 0010 1111 addiere Wert von Adresse 15 zu Register A
05 DCX 1100 dekrementiere Inhalt von Register C (-1)
06 JPX 04 0101 0100 springe auf Adresse 04 wenn Register C nicht Null (0) ist
07 OUT 1110 lade Register O mit dem Inhalt von Register A
08 HLT 1111 halte Programm an, weiter mit run
09 JMP 00 0100 0000 springe auf Adresse 0
..
14 var 0000 0000 initial 0
15 var aus Dezimaleingabe

Zeigerakrobatik Quadratzahl

Die Summe der ersten n ungeraden Zahlen ist stets die n-te Quadratzahl Wenn Daten zu code werden

Adr Befehl Code Beschreibung
00 LDX 12 1011 1100 lade Register C mit Inhalt von Adresse 12
01 LDA 05 0001 0101 lade Register A mit Inhalt von Adresse 5
02 ADD 15 0010 1111 addiere Wert von Adresse 15 zu Register A
03 STA 05 1000 0101 speichere Register A auf Adresse 5
04 LDA 11 0001 1011 lade Register A mit Inhalt von Adresse 11
05 code 0010 1100 initial (ADD 12)
06 STA 11 1000 1011 speichere Register A auf Adresse 11
07 DCX 1100 dekrementiere Inhalt von Register C (-1)
08 JPX 01 0101 0001 springe auf Adresse 01 wenn Register C nicht Null (0) ist
09 OUT 1110 lade Register O mit dem Inhalt von Register A
10 HLT 1111 halte Programm an
11 var 0000 0000 initial Ergebnis
12 var 0000 0011 n-te ungerade Zahl (3)
13 var 0000 0101 3. Zahl (5)
14 var 0000 0011 2. Zahl (3)
15 var 0000 0001 1. Zahl (1)

BCD Umwandlung einer Zahl von 0 - 19

Adr Befehl Code Beschreibung
00 INP 1101 lade Dezimaleingabe von Tastatur in Register A
01 STA 14 1000 1110 speichere Inhalt von Register A auf Adresse 14
02 SUB 15 0011 1111 subtrahiere von Register A den Wert von Adresse 15
03 JPN 07 0101 0111 springe auf Adresse 7 falls (N)egativ Flag gesetzt
04 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
05 ADD 13 0010 1101 addiere Wert von Adresse 13 zu Register A
06 JMP 08 0100 0000 springe auf Adresse 8
07 LDA 14 0001 1011 lade Register A mit Inhalt von Adresse 11
08 OUT 1110 lade Register O mit dem Inhalt von Register A
09 HLT 1111 halte Programm an, weiter mit run
10 JMP 00 0100 0000 springe auf Adresse 0
..
13 var 0000 0110 Pseudotetrade (6)
14 var 0000 0000 aus Dezimaleingabe
15 var 0000 1010 Zahl (10)

ganzzahliger Mittelwert 2er Zahlen

Adr Befehl Code Beschreibung
00 INP 1101 lade Dezimaleingabe von Tastatur in Register A
01 STA 15 1000 1111 speichere Inhalt von Register A auf Adresse 15
02 HLT 1111 halte Programm an, weiter mit run
03 INP 1101 lade Dezimaleingabe von Tastatur in Register A
04 ADD 15 0010 1111 addiere Wert von Adresse 15 zu Register A
05 SRA 1001 verschiebe Register A nach rechts
06 OUT 1110 lade Register O mit dem Inhalt von Register A
07 HLT 1111 halte Programm an, weiter mit run
08 JMP 00 0100 0000 springe auf Adresse 0
..
15 var 0000 0000 aus Dezimaleingabe

Laufschrift ausgeben

Adr Befehl Code Beschreibung
00 LDA 11 0001 1011 lade Register A mit Inhalt von Adresse 11
01 OUT 1110 lade Register O mit dem Inhalt von Register A
02 LDA 12 0001 1100 lade Register A mit Inhalt von Adresse 12
03 OUT 1110 lade Register O mit dem Inhalt von Register A
04 LDA 13 0001 1101 lade Register A mit Inhalt von Adresse 13
05 OUT 1110 lade Register O mit dem Inhalt von Register A
06 LDA 14 0001 1110 lade Register A mit Inhalt von Adresse 14
07 OUT 1110 lade Register O mit dem Inhalt von Register A
08 LDA 15 0001 1111 lade Register A mit Inhalt von Adresse 15
09 OUT 1110 lade Register O mit dem Inhalt von Register A
10 JMP 00 0100 0000 springe auf Adresse 0
11 var 0000 1100
12 var 1100 0000
13 var 0000 1101
14 var 1101 1110
15 var 1110 0000

zurück zum Seitenanfang