Minimalmaschine Moduloberechnung?
Hallo, ich schaue mir gerade ein Programm and mit dem man innerhalb einer MIMA modulo n für eine zahl berechnen kann. Ich habe hier beispielsweise einmal modulo 2 für die Zahl 42 berechnet. Ich verstehe aber das Konzept hinter dem Code nicht wirklich. Hier einmal das Programm:
a1: DS 42
a2: DS
mod: DS
tmp: DS
neg: DS
start: LDC 2
STV mod
NOT
STV tmp
LDC 1
ADD tmp
STV neg
LDV a1
loop: ADD neg
JMN end
JMP loop
end: ADD mod
STV a2
HALT
Vielen Dank im Voraus :)
1 Antwort
Soweit ich das verstehe folgende Nomenklatur:
<Bezeichner>: <Datentyp> <Initialwert>
zur deklarierung von Speicherbereichen oder auch zum setzen von Sprungmarken.
LDC <Wert>
Zum Laden eines Wertes in den Akkumulator.
STV <Bezeichner>
Speichern des Wertes im Akkumulator in den Speicherbereich mit dem gegebenem Bezeichner.
NOT
Bitweises negieren des Wertes im Akkumulator.
ADD <Bezeichner>
Addieren des Wertes im Speicherbereich des gegebenen Bezeichners zum Akkumulator.
LDV <Bezeichner>
Laden des Wertes vom Speicherbereich des gegebenen Bezeichners in den Akkumulator.
JMN <Bezeichner>
Wenn der Wert im Akkumulator negativ ist wird zum Code an der Stelle gesprungen, die durch den Bezeichner bezeichnet wird.
JMP <Bezeichner>
Es wird zum Code an der Stelle gesprungen, die durch den Bezeichner bezeichnet wird.
HALT
Beendet die Ausführung des Programms.
Zum Programm:
Es wird solange zwei vom gegebenem Wert abgezogen, bis der Wert im Akkumulator negativ wird.
Ist das der Fall, wird einmal 2 addiert, um das Ergebnis zu erhalten, den Rest, der nicht durch 2 teilbar war (kleiner als zwei war) und somit zu einem negativem Ergebnis bei der Subtraktion führte.
Das hat mir geholfen, Ich Danke dir vielmals
Die Bedeutungen hast du alle richtig interpretiert