add


Adds.

[Syntax]

-

add reg1, reg2

-

add imm, reg2

 

The following can be specified for imm:

-

Absolute expression having a value of up to 32 bits

-

Relative expression

[Function]

-

Syntax "add reg1, reg2"

Adds the value of the register specified by the first operand to the value of the register specified by the second operand, and stores the result into the register specified by the second operand.

-

Syntax "add imm, reg2"

Adds the value of the absolute expression or relative expression specified by the first operand to the value of the register specified by the second operand, and stores the result in the register specified by the second operand.

[Description]

-

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

-

If the following is specified as imm in syntax "add imm, reg2", the assembler generates one add machine instructionNote.

(a)

Absolute expression having a value in the range of -16 to +15

add     imm5, reg
add     imm5, reg

Note

The add machine instruction takes a register or immediate value in the range of -16 to +15 (0xFFFFFFF0 to 0xF) as the first operand.

 

-

If the following is specified for imm in syntax "add imm, reg2", the assembler executes instruction expansion to generate one or more machine instructions.

(a)

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

add     imm16, reg
addi    imm16, reg, reg

(b)

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

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

Else

add     imm, reg
mov     imm, r1
add     r1, reg

(c)

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

add     !label, reg
addi    !label, reg, reg
add     %label, reg
addi    %label, reg, reg
add     $label, reg
addi    $label, reg, reg

(d)

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

add     #label, reg
mov     #label, r1
add     r1, reg
add     label, reg
mov     label, r1
add     r1, reg
add     $label, reg
mov     $label, r1
add     r1, reg

[Flag]

CY

1 if a carry 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

---