A.5.3 ADD: Add Integers
ADD r/m8,reg8 ; 00 /r [8086]
ADD r/m16,reg16 ; o16 01 /r [8086]
ADD r/m32,reg32 ; o32 01 /r [386]
ADD reg8,r/m8 ; 02 /r [8086]
ADD reg16,r/m16 ; o16 03 /r [8086]
ADD reg32,r/m32 ; o32 03 /r [386]
ADD r/m8,imm8 ; 80 /7 ib [8086]
ADD r/m16,imm16 ; o16 81 /7 iw [8086]
ADD r/m32,imm32 ; o32 81 /7 id [386]
ADD r/m16,imm8 ; o16 83 /7 ib [8086]
ADD r/m32,imm8 ; o32 83 /7 ib [386]
ADD AL,imm8 ; 04 ib [8086]
ADD AX,imm16 ; o16 05 iw [8086]
ADD EAX,imm32 ; o32 05 id [386]
ADD performs integer addition: it adds its two operands together, and
leaves the result in its destination (first) operand. The destination
operand can be a register or a memory location. The source operand can
be a register, a memory location or an immediate value.
The flags are set according to the result of the operation: in
particular, the carry flag is affected and can be used by a subsequent
ADC instruction.
In the forms with an 8-bit immediate second operand and a longer first
operand, the second operand is considered to be signed, and is sign-
extended to the length of the first operand. The BYTE qualifier can be
used to force NASM to generate this form of the instruction. Recent
versions of NASM automatically optimise to this form if the immediate
operand's value is known during the assembling of that instruction, and
fits in the range of a signed byte. The longer variant can then still be
forced using the STRICT WORD or STRICT DWORD qualifier.