Bit is a dual-purpose instruction which performs operations against the accumulator and memory. It is usually used immediately preceding a conditional branch instruction
First it set's the n flag to reflect the value of the high bit of the data in memory and the v flag to the next-to-highest bit of that data.
For 8-bit processors n has the value of bit 7 and v the value of bit 6 of the memory location.
For 16-bit processors, when m=0, n has the value of bit 15 and v the value of bit 14 of the memory location.
Second it performs a logical AND of the memory and the accumulator. If the result is zero the z flag is set.
In both operations, the contents of the accumulator and memory are not modified.
|n||Takes value of most significant bit of memory data, not in immediate addressing|
|v||Takes value of the next-to-highest bit of memory data, not in immediate addressing|
|z||Set if logical AND of memory & accumulator is zero, otherwise clear|
|Syntax||Opcode||Available on:||# of||# of||Addressing Mode|
|BIT dp||24||x||x||x||2||52, 3||Direct Page|
|BIT addr,X||3C||x||x||3||42, 4||Absolute Indexed X|
|BIT dp,X||34||x||x||2||42, 3||Direct Page Indexed X|
- 65816: Add 1 byte if m=0 (16-bit memory/accumulator)
- 658116: Add 1 cycle if m=0 (16-bit memory/accumulator)
- 65816: Add 1 cycle if low byte of Direct Page register is not 0
- Add 1 cycle if adding index crosses a page boundary