subr


Subtracts reverse.

[Syntax]

-

subr reg1, reg2

-

subr imm, reg2

 

The following can be specified for imm:

-

Absolute expression having a value of up to 32 bits

-

Relative expression

[Function]

-

Syntax "subr reg1, reg2"

Subtracts the value of the register specified by the first operand from the value of the register specified by the second operand, and stores the result in the register specified by the second operand.

-

Syntax "subr imm, reg2"

Subtracts the value of the absolute expression or relative expression specified by the first operand from the value of the register specified by the second operand, and stores the result into the register specified by the second operand.

[Description]

-

If the instruction is executed in syntax "subr reg1, reg2", the assembler generates one subr machine instruction.

-

If the instruction is executed in syntax "subr imm, reg2", the assembler executes instruction expansion and generates one or more machine instructionsNote.

(a)

0

subr    0, reg
subr    r0, reg

(b)

Absolute expression having a value of other than 0 within the range of -16 to +15

subr    imm5, reg
mov     imm5, r1
subr    r1, reg

(c)

Absolute expression exceeding the range of -16 to +15, but within the range of -32,768 to +32,767

subr    imm16, reg
movea   imm16, r0, r1
subr    r1, reg

(d)

Absolute expression having a value exceeding the range of -32,768 to +32,767

If all the lower 16 bits of the value of imm are 0

subr    imm, reg
movhi   HIGHW(imm), r0, r1
subr    r1, reg

Else

subr    imm, reg
mov     imm, r1
subr    r1, reg

(e)

Relative expression having !label or %label, or that having $label for a label having a definition in the sdata/sbss-attribute section

subr    !label, reg
movea   !label, r0, r1
subr    r1, reg
subr    %label, reg
movea   %label, r0, r1
subr    r1, reg
subr    $label, reg
movea   $label, r0, r1
subr    r1, reg

(f)

Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section

subr    #label, reg
mov     #label, r1
subr    r1, reg
subr    label, reg
mov     label, r1
subr    r1, reg
subr    $label, reg
mov     $label, r1
subr    r1, reg

Note

The subr machine instruction does not take an immediate value as an operand.

[Flag]

CY

1 if a borrow occurs from MSB (Most Significant Bit), 0 if not

OV

1 if Integer-Overflow occurs, 0 if not

S

1 if the result is negative, 0 if not

Z

1 if the result is 0, 0 if not

SAT

1 if a borrow occurs from MSB (Most Significant Bit),0 if not