XOR - The Bitwise XOR Command
The XOR command is a bitwise operation that preforms an exclusive OR to the value held in the accumulator with the specified value (argument) and resaves the new value into the accumulator.
"XOR"ing a bit will turn it on if they are different and turn it off if they match. It is used to find the difference between two bitfields.
Unlike the OR command none of the bits maintain state. All are processed by an XOR command. |
Tasking ports often store data in bitfields and commands like XOR are useful for isolating the data you want.
Syntax
XOR x
Where x is the value, memory location, or tasking port you want to XOR against the accumulator value.
ACC |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
MASK |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
RESULT |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
Examples
Example 1
{
...
LDA ^17,0 //Get the keyswitch port
XOR ~10 //Compare to previous state stored in ~10
CMP #0x01 //Was switch 1 changed?
BRZ Switch1 //Branch to switch 1 if it matches.
CMP #0x02 //Was switch 2 changed
BRZ Switch2 //Branch to switch 2 if it matches.
NULL //End if nothing matches.
...
}
Example 2
This task checks dipswitches to see if any have changed. (CMP would work just as well)
{
...
ChangeCheck:
LDA ^59,0 //Get the dipswitch port
XOR ~10 //Compare to previous state stored in ~10
BNE Change //If anything is changed branch.
Delay(.5) //Wait a bit befor checking again
BRA ChangeCheck //Go check again.
...
}