We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

SBC (Super FX): Difference between revisions

From SnesLab
Jump to: navigation, search
(Added details like carry flag and subtraction with a constand with carry (or lack thereof))
(made affected flags more prominent)
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
{| class="wikitable" style="float:right;clear:right;width:40%"
{| class="wikitable" style="float:right;clear:right;width:50%"
!colspan="8"|Basic Info
!colspan="8"|Basic Info
|+
|+
|'''Addressing Mode'''
|'''Opcode'''
|'''Opcode'''
|'''Length'''
|'''Length'''
Line 8: Line 9:
|'''Cache Speed'''
|'''Cache Speed'''
|+
|+
|[[Implied]] (type 1)
|3D6n
|3D6n
|2 bytes
|2 bytes
Line 18: Line 20:
!colspan="9"|Flags Affected
!colspan="9"|Flags Affected
|+
|+
|B
|[[B Flag|B]]
|ALT1
|[[ALT1]]
|ALT2
|[[ALT2]]
|[[O/V]]
|[[Sign Flag|S]]
|[[CY]]
|[[Zero Flag|Z]]
|+
|0
|0
|0
|O/V
|O/V
|S
|S
|CY
|CY
|Z
|Z
|+
|0
|0
|0
|
|
|
|
|}
|}


'''SBC''' (SuBtract with Carry) is a [[Super FX]] instruction that performs a subtraction with regards to the [[CY|carry flag]].
'''SBC''' (SuBtract with Carry) is a [[Super FX]] instruction that performs a subtraction with regards to the [[CY|carry flag]].
Unlike [[ADD (Super FX)]], [[ADC (Super FX)]] and [[SUB (Super FX)]], this one can only be used with registers, not with constant values since since the ALT3 version of SUB is a [[CMP (Super FX)]] instead.
Unlike [[ADD (Super FX)|ADD]], [[ADC (Super FX)|ADC]] and [[SUB (Super FX)|SUB]], this one can only be used with registers, not with constant values since since the ALT3 version of SUB is a [[CMP (Super FX)|CMP]] instead.
 
The [[ALT0]] state is restored.
 
The source and destination registers should be specified in advance using [[WITH]], [[FROM]], or [[TO]].  Otherwise, R<sub>0</sub> serves as the default.
 
==== Syntax ====
<pre>
SBC Rn
</pre>
 
==== Example ====
Let:
S<sub>reg</sub> : R<sub>4</sub>
D<sub>reg</sub> : R<sub>6</sub>
R<sub>4</sub> = 5682h
R<sub>5</sub> = 3609h
CY = 1
After executing SBC R<sub>5</sub>:
R<sub>6</sub> = 2079h
CY = 0


=== See Also ===
=== See Also ===
Line 42: Line 64:
* [[ADC (Super FX)]]
* [[ADC (Super FX)]]
* [[SUB (Super FX)]]
* [[SUB (Super FX)]]
* [[ALT1]]


=== Reference ===
=== Reference ===
* [https://archive.org/details/SNESDevManual/book2/page/n264 page 2-9-108 of Book II] of the official Super Nintendo development manual
* 9.78 on [https://archive.org/details/SNESDevManual/book2/page/n264 page 2-9-108 of Book II] of the official Super Nintendo development manual


[[Category:ASM]]
[[Category:ASM]]
[[Category:Super FX]]
[[Category:Super FX]]
[[Category:Two-byte Instructions]]
[[Category:Expects Sreg/Dreg Prearranged]]

Latest revision as of 09:07, 1 August 2024

Basic Info
Addressing Mode Opcode Length ROM Speed RAM Speed Cache Speed
Implied (type 1) 3D6n 2 bytes 6 cycles 6 cycles 2 cycle
Flags Affected
B ALT1 ALT2 O/V S CY Z
0 0 0 O/V S CY Z

SBC (SuBtract with Carry) is a Super FX instruction that performs a subtraction with regards to the carry flag. Unlike ADD, ADC and SUB, this one can only be used with registers, not with constant values since since the ALT3 version of SUB is a CMP instead.

The ALT0 state is restored.

The source and destination registers should be specified in advance using WITH, FROM, or TO. Otherwise, R0 serves as the default.

Syntax

SBC Rn

Example

Let:

Sreg : R4
Dreg : R6
R4 = 5682h
R5 = 3609h
CY = 1

After executing SBC R5:

R6 = 2079h
CY = 0

See Also

Reference