Assembler umständliche Auswertung

P

perceptron

Gast
Hallo,

ich arbeite gerade bei den MIKR das LM2 durch. Bei einem Assemblerbeispiel soll festegestellt werden, ob eine Speicherstelle kleiner, gleich oder größer 5 ist. Dazu wird der Speicher um 5 verkleinert, und das Z-Bit ausgelesen, welches aussagt ob der Wert kleiner, gleich oder größer Null ist.
Ich finde das ein bischen umständlich, weshalb kann man da nicht direkt abfragen ob der Wert kleiner, gleich oder größer 5 ist?

Mir ist auch aufgefallen dass manchmal bei den Befehlen die Version mit dem I(Immediately) verwendet wird, z.B. MVI statt einfach MOV, oder CPI statt CMP. Würde das mit dem jeweils anderen Befehl nicht funktionieren?

Woher weiß ich wann ich welche Variante benutzen muss?

Mfg, Martin.
 
AW: Assembler umständliche Auswertung

HI!

Ich finde das ein bischen umständlich, weshalb kann man da nicht direkt abfragen ob der Wert kleiner, gleich oder größer 5 ist?
Mit welchem Befehl aus dem gegebenen Befehlssatz?

cu
Volker
 
AW: Assembler umständliche Auswertung

Hallo,

Es wäre schön, wenn du uns noch die Information geben würdest, um welche Art Assembler es sich handeln soll (Prozessortyp).
 
AW: Assembler umständliche Auswertung

HI!

und wie unterscheidest Du dann größer/kleiner als der angegebene Wert?
Beim Abziehen z.B. der 5 greifst du danach doch auf die Flags zurück - und da gibt es dann sowohl die Abfrage auf 0 (Gleichheit) oder negativ(größer/kleiner).

cu
Volker
 
P

perceptron

Gast
AW: Assembler umständliche Auswertung

HI!

und wie unterscheidest Du dann größer/kleiner als der angegebene Wert?
Beim Abziehen z.B. der 5 greifst du danach doch auf die Flags zurück - und da gibt es dann sowohl die Abfrage auf 0 (Gleichheit) oder negativ(größer/kleiner).

cu
Volker
Folgendes Programm hatten wir im Seminar:

Vergleich

mov A,P0
clr C
jz gleich
jc kleiner
setb P1,7
jmp weiter
gleich: setp P1,3
jmp weiter
kleiner:setb P1,0
weiter:mov

Das läuft doch dann ähnlich, hier wird doch der Akku von sich selber abgezogen, und dann auf noch ein Bit abgezogen. Danach wird dann der Zero und Carry-Bit abgefragt. Habe ich das so richtig verstanden?
Ist der das übliche Weg bei Assembler?

Wo gibt es gute Beispielprogramme, am besten mit Erklärugen dazu?

Mfg, Martin.
 
AW: Assembler umständliche Auswertung

Hallo perceptron,

wo wird denn der Akku von sich selber abgezogen?

Folgendes Programm hatten wir im Seminar:

Vergleich

mov A,P0
clr C
jz gleich
jc kleiner
setb P1,7
jmp weiter
gleich: setp P1,3
jmp weiter
kleiner:setb P1,0
weiter:mov

.


MOV A, P0 -schreibe Inhalt Register Port 0 in Akku
CLR C -lösche Carry-Flag
JZ gleich -springe, wenn Akku Null ist, zu "gleich"
JC kleiner -springe wenn Carry-Flag gesetzt ist
SETB P1,7 -setze Bit 7 vom Port 1
.
.
.

Der Programm-Code macht so eigentlich wenig Sinn. Zuerst wird das Carry-Flag gelöscht und zwei Zeilen später wird abgefragt. Ja welchen Zustand soll es wohl in der Zwischenzeit haben? Dazwischen passiert doch nichts mit dem Carry. Kann es sein, dass da irgend etwas fehlt oder aus dem Zusammenhang gerissen wurde?



Carry-Flag: Wird bei einem Übertrag des Ergebnisses gesetzt. Der Übertrag tritt bei einer Addition auf, wenn das Ergebnis größer 8 Bit ist. Er tritt bei eriner Subtraktion auf, wenn das Ergebnis negativ wird (Borrow).

Du scheinst es mit einem Sonderfall des 8051 zu tun zu haben. Die Befehle MVI, CMP und CPI sind mir nicht bekannt. Sie stammen nicht aus dem Standard-Befehlssatz. In diesem Fall hilft wohl nur ein Blick ins Datenblatt des Controllers.
 
Zuletzt bearbeitet:
P

perceptron

Gast
AW: Assembler umständliche Auswertung

Hallo perceptron,

wo wird denn der Akku von sich selber abgezogen?





MOV A, P0 -schreibe Inhalt Register Port 0 in Akku
CLR C -lösche Carry-Flag
JZ gleich -springe, wenn Akku Null ist, zu "gleich"
JC kleiner -springe wenn Carry-Flag gesetzt ist
SETB P1,7 -setze Bit 7 vom Port 1
.
.
.

Der Programm-Code macht so eigentlich wenig Sinn. Zuerst wird das Carry-Flag gelöscht und zwei Zeilen später wird abgefragt. Ja welchen Zustand soll es wohl in der Zwischenzeit haben? Dazwischen passiert doch nichts mit dem Carry. Kann es sein, dass da irgend etwas fehlt oder aus dem Zusammenhang gerissen wurde?



Carry-Flag: Wird bei einem Übertrag des Ergebnisses gesetzt. Der Übertrag tritt bei einer Addition auf, wenn das Ergebnis größer 8 Bit ist. Er tritt bei eriner Subtraktion auf, wenn das Ergebnis negativ wird (Borrow).

Du scheinst es mit einem Sonderfall des 8051 zu tun zu haben. Die Befehle MVI, CMP und CPI sind mir nicht bekannt. Sie stammen nicht aus dem Standard-Befehlssatz. In diesem Fall hilft wohl nur ein Blick ins Datenblatt des Controllers.
SUBB A,#07H hatte ich vergessen.

In den Unterlagen steht nur 8051 und nichts besonders dabei.
Was den MVI-Befehl angeht, steht dabei dass man den benutzt um in ein beliebiges Register zu kopieren.

Mfg, Martin.
 
AW: Assembler umständliche Auswertung

HI!

in LM 2 geht es aber nicht um den 8051 - taucht kein einziges mal auf - dafür in LM 3 - und beim Befehlssatz des 8051 gibt es dann eben auch kein mvi.

die 2 Lernmodule behandeln unterschiedliche Dinge!

cu
Volker
 
P

perceptron

Gast
AW: Assembler umständliche Auswertung

HI!

in LM 2 geht es aber nicht um den 8051 - taucht kein einziges mal auf - dafür in LM 3 - und beim Befehlssatz des 8051 gibt es dann eben auch kein mvi.

die 2 Lernmodule behandeln unterschiedliche Dinge!

cu
Volker
Hast recht, ich ging davon aus dass sich alles auf den 8051 bezieht, von einem anderen µC steht aber auch nix drin. Ich versuche krampfhaft irgendwie ein System reinzubringen, so dass ich einigermaßen vernünftig lernen kann. Wie hast Du Dich auf die MIKR - Prüfung vorbereitet?
Btw das gleiche gilt auch für die Automatisierungsprüfung, wenn wir schon dabei sind. ;-)

Mfg, Martin.
 
Top