Section
07 Part 02 – The SVC, SVS, ST & SF Instructions |
“One must learn to be a sponge if one wants to be loved by
hearts that overflow." ~Friedrich Nietzsche |
The SVC
Instruction
SVC – Set on oVerflow Clear
If
the V flag of the CCR is clear, the
destination
operand is set (%11111111). Otherwise, the destination operand is cleared (%00000000).
Examples
This
is based on whether or not overflow occurred:
cmpi.w #$0020,d0 svc.b d1 |
We’ll
pretend d0 contains 2400801E, the CMP is word, so only the 801E
is taken into account. 801E - 0020 = 7FFE. Since we’re subtracting from a negative
value, the result is suppose to be negative.
But, since the result has turned positive, we have an impossible result
(i.e. overflow). The V flag has been set.
The SVS
Instruction
SVS – Set on oVerflow Set
If
the V flag of the CCR is set, the destination operand is set (%11111111). Otherwise, the destination operand is cleared (%00000000).
Examples
This
is the opposite of SVC:
cmpi.w #$0020,d0 svs.b d1 |
Again,
using the same example, with d0 containing 2400801E. 801E - 0020 = 7FFE, the result is impossible,
overflow has occurred. The V flag is set.
The ST
& SF Instructions
These
two will automatically set (%11111111)
and clear (%00000000) the destination operand regardless of the CCR
conditions. These two are not
conditional based instructions, but they still belong to the S## area of
functionality.
The ST
Instruction
ST – Set on True
The destination operand is set as true (%11111111). No CCR flags are changed by this instruction.
Example
st.b d1 |
If d1 contained 01234567, then
after this instruction, d1
will contain 012345FF.
The SF Instruction
SF – Set on False
The destination operand is cleared as false (%00000000). No CCR flags are changed by this instruction.
Example
sf.b d1 |
If d1 contained 01234567, then
after this instruction, d1
will contain 01234500.