Description:

Subtracts a register and a constant and places the result in the destination register Rd. This instruction is working on Register R16 to R31 and is very well suited for operations on the X, Y and Z pointers.

Operation:

(i)Rd ← Rd - K

Syntax: Operands: Program Counter:

(i)SUBI Rd,K 16 ≤ d ≤ 31, 0 ≤ K ≤ 255 PC ← PC + 1

16-bit Opcode:

0101

KKKK

dddd

KKKK

Status Register 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 K is larger than the absolute value of Rd; cleared otherwise.

R (Result) equals Rd after the operation.

Example:

subi r22,$11 ; Subtract $11 from r22
brne noteq ; Branch if r22⇔$11
 ...
 noteq: nop ; Branch destination (do nothing)

Words: 1 (2 bytes)

Cycles: 1