Hier stehen die Flags erklärt:
https://www.mikrocontroller.net/arti...al:_Vergleiche
Gruß
Hier stehen die Flags erklärt:
https://www.mikrocontroller.net/arti...al:_Vergleiche
Gruß
Erster Anlaufpunkt sollte doch das Reference Manual sein:
http://ww1.microchip.com/downloads/e...set-manual.pdf
Tja, da schreibt man und tut man und verlinkt man, aber es interessiert sowie nicht wirklich, hauptsache man...
Erster Anlaufpunkt sollte doch das Reference Manual sein:
http://ww1.microchip.com/downloads/e...set-manual.pdf
S = N ⊕ V, for signed tests
Ganz toll, ich seh schon hier wirds auch nicht besser.
Bernd_Stein
CRS Robotics A255, TRONXY X3A, TinkerCAD, c´t-Lab, ProfiLab Expert, AVR8 Assembler
Die Rüge ist nicht gerechtfertigt. @shedepe hat doch das Assemblermanual verlinkt. da stehen alle Assemblerbefehle drin und welche Flags diese beeinflussen. Was gibt es jetzt da noch nicht zu verstehen, was viele Worte jetzt besser erklären könnten? Wenn du damit nicht zurechtkommst, installier die nen Assembler und probier einzelne Addition/Subtraktionen aus und dschau welche Flags da verändert werden. Ich habe mit AVR noch nix gemacht, meine Assembler-Anfänge hatten noch Z80 und 6502 zu tun und ich habe auch so gemacht.
Gruß
Gerhard
Genau, ich würde das schon fast frech nennen. Der Link von gunzelg führt zu
Ausschnitt aus gunzelgs Link nach dieser Zeile zu mikrocontroller.net ".. Hier stehen die Flags erklärt: .."
- - - - - - - Ausschnitt - - - - - -
Flags
Die Flags sind Bits im Statusregister SREG. Ihre Aufgabe ist es, das Auftreten bestimmter Ereignisse, die während Berechnungen eintreten können, festzuhalten. Speicherbefehle (LD, LDI, ST, MOV, ...) haben auf dem AVR grundsätzlich keinen Einfluss auf das Statusregister. Will man den Inhalt eines Registers explizit testen (z. B. nach dem Laden aus dem SRAM), so kann man hierfür den TST-Befehl verwenden.
Overflow (V)
I T H S V N Z C
Dieses Bit wird gesetzt, wenn bei einer Berechnung mit 2-Komplement Arithmetik ein Überlauf (Unterlauf) stattgefunden hat. Dies entspricht einem Überlauf von Bit 6 ins Bit 7.
Der Übertrag, der bei der Addition/Subtraktion von Bit 6 auf Bit 7 auftritt, zeigt daher – wenn er vorhanden ist – an, dass es sich hier um einen Überlauf (Overflow) des Zahlenbereichs handelt und das Ergebnis falsch ist. Das ist allerdings nicht der Fall, wenn auch der Übertrag von Bit 7 nach Bit 8 (Carry) aufgetreten ist. Daher ist das Overflow-Flag die XOR-Verknüpfung aus den Übertrag von bit 6 nach Bit 7 und dem Carry.
Beispiele für die Anwendung des V-Flags finden sich in saturierter Arithmetik.
Signed (S)
Das Signed-Bit ergibt sich aus der Antivalenz der Flags N und V, also S = N XOR V. Mit Hilfe des Signed-Flags können vorzeichenbehaftete Werte miteinander verglichen werden. Ist nach einem Vergleich zweier Register S=1, so ist der Wert des ersten Registers kleiner dem zweiten (in der Signed-Darstellung). Damit entspricht das Signed-Flag gewissermaßen dem Carry-Flag für Signed-Werte. Es wird hauptsächlich für 'Signed' Tests benötigt. Daher auch der Name.
- - - - - - - Ende Ausschnitt - - - - - -
Das sieht nach meinem Dafürhalten absolut anfängerfreundlich aus und sehr gut erklärt. Es trifft ja genau Deine eingangs genannte Frage:
Was genau ist jetzt noch unverständlich für Dich? Hattest Du denn die Dir genannten Links angesehen? Hattest Du denn insbesondere den Link zu zu mikrocontroller.net angesehen?.. Auf das S-Flag ist hier leider niemand eingegangen und hoffe nun hier befriedigende Antworten zu bekommen : ..
Hmmmm.*grins* noch einer *ggg*.. meine Assembler-Anfänge hatten noch Z80 und 6502 zu tun und ich habe auch so gemacht ..
Ciao sagt der JoeamBerg
Die Rüge ist schon gerechtfertigt, denn den uC-Artikel hatte ich ja selbst dort vorher verlinkt und daraufhin die Vermutung, dass das S-Flag nur die Befehle
BRGE & BRLT bedient und ansonsten uninteressant ist angestellt, aber den Verweis auf uC.net hat man ja nicht richtig durchgelesen - wenn überhaupt.
https://www.mikrocontroller.net/topic/295439#6853179
Hier gabs dann doch noch eine befriedigende Antwort :
https://www.mikrocontroller.net/topic/295439#6879714
Bernd_Stein
CRS Robotics A255, TRONXY X3A, TinkerCAD, c´t-Lab, ProfiLab Expert, AVR8 Assembler
Hallo zusammen,
vielleicht hat ja hier jemand eine Lösung um den Schönheitsfehler zu verbessern.
Bleibt leider immer noch der Schönheitsfehler mit dem Minuszeichen,
welches nicht direkt vor dem Wert steht. Außer natürlich es ist ein
hunderter Wert.
Ach, übrigens - auch wenn am Ende, bzw. überhaupt kein RET-Befehl steht,
ist diese Routine mit einem RCALL,- oder CALL-Befehl aufzurufen.
Seht evtl. auch hier nach :Code:;************************************************************************/ ;* */ ;* Display values on LCD */ ;* */ ;* Author: Peter Dannegger */ ;* danni@specs.de */ ;* mit Aenderungen f. Temperatursensor ( DS18B20 ) von Unbekannt */ ;************************************************************************/ ;************************************************************************/ ;------------------------------------------------------------------------- ; Anzeige ohne fuehrende Nullen ;------------------------------------------------------------------------- ;input: a = value 0..255 ;used: a, b, c ; _dec_out: tst a ;Negativer Wert ? brpl _positiv ;Nein -> springen mov c,a ;Wert sichern ldi a,$10 ;Cursor einen nach links um bei Minus Anzeige.. rcall _lcd_cmd ;..noch formatiert zu bleiben ldi a,'-' rcall _dou4 ;Zeichen ausgeben mov a,c ;gesicherten Wert zurueck holen neg a ;In positives Aquivalent umwandeln _positiv: mov c, a ;Wert f. weiterverarbeitung kopieren subi c, 100 ;Hunderter ermitteln brcc _hunderter ;if > = 100, die hunderter Stelle auswerten.. ldi a,' ' ;..ansonsten die hunderter Stelle durch Space ersetzen.. clt ;Keine Hunderter vorhanden rjmp _dou2 ;..und dies ausgeben _hunderter: set ;Hunderter vorhanden mov c, a ;Wert wieder neu laden und.. ldi a, '0' - 1 ;..Hunderter zaehlen.. _dou1: inc a ;..wobei die Ziffer in ASCII umgewandelt wird subi c, 100 ;100 subtrahieren brcc _dou1 ;< 100 -> Nein -> weiter zaehlen _dou2: rcall _dou4 ;output hundrets _zehner: ldi a, '0' +10 ;Zehnerstelle in ASCII umwandeln.. _dou3: dec a ;..und ASCII rueckwaerts von '9' subi c, -10 ;Zehner x +10 brcs _dou3 ;Zehner gezaehlt ? NEIN -> weiter zaehlen rcall _dou5 ;output tens subi c,-'0' ;Einerstelle in ASCII uberfuehren mov a, c ;output ones _dou4: rjmp _lcd_data ;ASCII-Zeichen ausgeben _dou5: cpi a, '0' ;Ist die Zehnerziffer eine Null ?.. brne _dou4 ;..Nein -> Zehnerziffer ausgeben.. brts _dou4 ;Waren vorher Hunderter vorhanden ? Ja -> Null ausgeben ldi a,' ' ;..Nein -> Null durch Space ersetzen und.. rjmp _dou4 ;..jetzt ausgeben ;------------------------------------------------------------------------------
https://www.mikrocontroller.net/topic/6516#6909211
Beziehungsweise überhaupt beim Ursprung :
https://www.mikrocontroller.net/topic/6516#41903
Bernd_Stein
CRS Robotics A255, TRONXY X3A, TinkerCAD, c´t-Lab, ProfiLab Expert, AVR8 Assembler
Lesezeichen