add
Adds the source (second) operand to the destination (first) operand and leaves the sum in the destination.
8086 and later
- Getting started with x86-64x86-64 assembly
- Memory, little endian and sizesx86-64 assembly
- Bytes, words, dwords and qwordsx86-64 assembly
- The x86-64 instruction setx86-64 assembly
- The flags registerx86-64 assembly
- Loopsx86-64 assembly
- Arithmetic, logic and bitsx86-64 assembly
- Arrays, strings and the string instructionsx86-64 assembly
- The stack, push and popx86-64 assembly
- call, ret and the System V conventionx86-64 assembly
- ● set from the result
- – not changed
Forms
Operands
r/m- A general-purpose register or memory location matching the operation’s size, for example
raxorqword [rbp-8]. The byte registersah,bh,chanddhcannot be used with a REX prefix, including when the memory address usesr8–r15. reg- A general-purpose register matching the operation’s size, for example
al,ax,eaxorrax. The byte registersah,bh,chanddhcannot be used with a REX prefix, which is required byspl,bpl,sil,dilandr8–r15. imm- An immediate value encoded in the instruction, written as a number, character or label. Its encoded width and any sign extension depend on the instruction; arithmetic immediates may be sign-extended, while shift counts are used without sign extension.
acc- The accumulator matching the operation’s size:
al,ax,eaxorrax. A shorter encoding may be available.
CF reports unsigned carry; OF reports signed overflow.
The destination is a register or memory operand; the source is a register, memory operand or immediate, with at most one memory operand. Register and memory operands have the same width. When the instruction writes a 32-bit register, that write clears the upper half of its 64-bit register.
An 8-bit immediate used with a wider operand is sign-extended from −128 through 127. For a 64-bit operation, the longer immediate field is only 32 bits and is also sign-extended; there is no full 64-bit immediate form. The encoded bits determine the value used by the operation. For example, a 32-bit field of 0xffffffff becomes 0xffffffffffffffff (−1), not positive 4294967295. An out-of-range constant can produce a warning and truncated bits; use a register for a value that cannot be represented by these sign extensions.
NASM normally chooses the short immediate encoding when it preserves the value; a byte qualifier is not required. strict with an immediate size can prevent that shortening.
global _start
section .text
_start:
mov rax, 12
mov rbx, 5
mov rcx, 3
mov rsi, 9
add rax, rbx
mov rax, 60 ; syscall 60: exit
xor rdi, rdi
syscall