From C64-Wiki
Jump to navigationJump to search

ORA (short for "Logical OR on Accumulator") is the mnemonic for a machine language instruction which performs a bit-wise boolean "or" between each of the eight bits in the accumulator and their corresponding bits in the memory address specified. The eight resulting bits form a byte, which is stored in the accumulator.

Addressing modes[edit | edit source]

Opcode Addressing
in bytes
Number of
Dec Hex
9 09 Immediate ORA #nn 2 2
13 0D Absolute ORA nnnn 3 4
29 1D Absolute,X ORA nnnn,X 3 4*
25 19 Absolute,Y ORA nnnn,Y 3 4*
5 05 Zeropage ORA nn 2 3
21 15 Zeropage,X ORA nn,X 2 4
1 01 Indexed-indirect ORA (nn,X) 2 6
17 11 Indirect-indexed ORA (nn),Y 2 5

ORA supports eight different addressing modes, as shown in the table at right. In the assembler formats listed, nn represents a single-byte (8-bit) figure, and nnnn is a two-byte (16-bit) address.
With some addressing forms (marked with an asterisk, *, in the "Number of cycles" column) the execution time for ORA depends on the circumstances: In cases where the indexing requires the CPU to "reach across" a page boundary from the base address, the execution time is 1 cycle longer than listed here.

CPU flags[edit | edit source]

ORA affects 2 of the CPU's status flags:

  • The negative status flag is set if the result is negative, i.e. has its most significant bit set.
  • The zero flag is set if the result is zero, or cleared if it is non-zero.