CPX

From C64-Wiki
Jump to navigationJump to search

CPX (short for "ComPare X") is the mnemonic for a machine language instruction which compares the contents of the X index register against that of the specified operand by subtracting the latter from the former, and setting the negative and carry flags according to the result. Unlike SBC, the result of the subtraction is discarded rather than stored back into the register, which is thus unaffected by the CPX operation.

Usage[edit | edit source]

Main article: Comparisons in machine language

To compare integers in machine language, first use a comparison instruction such as CPX, CPY or CMP to compare the numbers, then "test" the result using a conditional branch instruction that acts on the carry and negative flags, i.e. BCC, BCS, BMI, or BPL:

  • If the compared values are unsigned integers, use BCC to branch if the contents of the X index register is less than that of the memory address, and BCS to branch if the register holds a number equal to or larger than that in memory.
  • If the compared values are signed integers, use BMI to branch if the contents of the X index register is less than that of the memory address, and BPL to branch if the register holds a number equal to or larger than that in memory.

Addressing modes[edit | edit source]

Opcode Addressing
mode
Assembler
format
Length
in bytes
Number of
cycles
Dec Hex
224 E0 Immediate CPX #nn 2 2
236 EC Absolute CPX nnnn 3 4
228 E4 Zeropage CPX nn 2 3

CPX supports 3 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.

CPU flags[edit | edit source]

CPX affects 3 of the CPU's status flags:

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