Befehl sbc Assembler

OP #4380324
Hallo,

ich befasse mich gerade mit Assembler Befehlen und finde leider nicht so 
viele Beispiele für Befehl sbc im Netz. So wollte ich meine 
Beispielrechnung von Profis hier einmal überprüfen lassen.

R16=0x84 = 1000 0100
R17=0x06 = 0000 0110

C=1

sbc R16,R17

Schritt 1: ADD R17, Carry:

           0000 0110 + 0000 0001 = 0000 0111

Schritt 2: 2-er Komplement von R17 bilden:

           0000 0111 -> 1111 1001

Schritt 3: R16 und 2-er Komplement addieren:

           1000 0100
        +  1111 1001
          ------------
         1|0111 1101 = 0x7D

wäre das so richtig?
Gruß
Auch wenn es auf Englisch ist, das entscheidende Dokument zum Thema ist 
Atmels doc0856.pdf

Und da steht bei sbc:

"SBC Rd,Rr"
"Rd ← Rd - Rr - C"

Das Ergebnis ist also r17 - r16 - carrybit, in deinem Beispiel 0x84 - 
0x06 - carrybit.

Der Wert des Carrybit stammt dabei aus einer vorhergehenden Operation.

Es kann also zwei Ergebnisse geben, entweder 0x7E (wenn das Carrybit 
vorher Null war) oder 0x7D (wenn das Carrybit 1 war).

Oliver
Persönliche Seite
SBC ist praktisch bei Miltibyte-Subtraktion, z.B. die 24-Bit Subtraktion 
R22:20 -= R12:10
1
SUB R20, R10
2
SBC R21, R11
3
SBC R12, R12
Neben dem Carry (C) setzten SUB und SBC auch das Zero-Flag (Z).  Das Z 
ist nach der Operation genau dann gesetzt, wenn das Ergebnis 0 ist. 
Dazu ist es notwendig, dass SBC das Z-Flag der vorhergehenden Befehle 
beachtet, denn wenn has MSB des Ergebnisses 0 ist, ist noch lange nicht 
das Ergebnis selbst 0.
Gast
SBC setzt kein Zeroflag, sondern löscht es nur, wenn es gesetzt war und 
das Ergebnis der Subtraktion != 0 ist.
Somit ist Z nach einer Multibyte-Subtraktion nur dann gesetzt, wenn alle 
Teilsubtraktionen 0 ergaben.
Nur als kleiner Hinweis: Diese exakten Eigenschaften von Subtraktion 
allgemein und SBC auf AVR im Besonderen gelten nicht universell. Manche 
anderen Prozessoren handhaben das C-Flag komplementiert und die soeben 
beschriebene Kumulierung des Z-Flags ist eher selten anzutreffen.
Gast
@  A. K. (prx)

Wie funktioniert den SBC (oder wie immer der Befehl bei
Nicht-AVRs heißt) mit komplementiert-em C-Flag?
- Klingt erst mal nach komplett unbrauchbarem Unsinn.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.