Befehl sbc Assembler

OP #4380324
Lesenswert?
• ▲
▼
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ß
#4380343
Lesenswert?
• ▲
▼
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 #4380358
Lesenswert?
• ▲
▼
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 #4380454
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.