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.
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
- Fibonacci Reihe
- Zahlen im Speicher dividieren
- Welche Zahl im Speicher ist größer
- Endlos Additionsmaschine
- Quadratzahl bis 15
- Zeigerakrobatik Quadratzahl
- BCD Umwandlung einer Zahl von 0 - 19
- ganzzahliger Mittelwert 2er Zahlen
- Laufschrift ausgeben
- 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 |
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 |
|
Das könnte Dich auch interessieren
zurück zum Seitenanfang ↑