Description:

This instruction performs a compare between two registers Rd and Rr. None of the registers are changed. All conditional branches can be used after this instruction.

Operation:

Rd - Rr

Syntax: Operands: Program Counter:

CP Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 PC ← PC + 1

16-bit Opcode:

0001

01rd

dddd

rrrr

Status Register (SREG) and Boolean Formula:

I

T

H

S

V

N

Z

C

-

-

H:

Set if there was a borrow from bit 3; cleared otherwise

S: N ⊕ V, For signed tests.

V:

Set if two's complement overflow resulted from the operation; cleared otherwise.

N:R7 Set if MSB of the result is set; cleared otherwise.

Z:

Set if the result is $00; cleared otherwise.

C:

Set if the absolute value of the contents of Rr is larger than the absolute value of Rd; cleared otherwise.

R (Result) after the operation.

Example:

cp r4,r19 ; Compare r4 with r19
brne noteq ; Branch if r4 ⇔ r19
...
noteq: nop ; Branch destination (do nothing)

Words: 1 (2 bytes)

Cycles: 1