Инструкции
Mov копирование значений.
mov destination, source
destination: регистр или память. Source: регистр, память, число. Одновременно не может из памяти в память. Должны совпадать по размерам. Для расширения нулями меньших регистров (только регистр - регистр):
movsxd dest, source ; если dest - 64-разрядный операнд и source - 32-разрядный
movsx dest, source ; для всех остальных комбинаций операндов
Однако с знаком будут проблемы. Для беззнакового расширения нулями movzx:
mov al, 5
movzx rdi, cx
Значение регистра AL помещается в самый младший байт регистра RDI. Остальные байты (7 байт) регистра RDI заполняются нулями.
Add / sub сложение и вычитание
add operand1, operand2 ; operand1 = operand1 + operand2
inc rdi ; rdi = rdi + 1
sub rdi, rsi ; rdi = rdi - rsi
dec rdi ; rdi = rdi - 1
Переходы. Регистр rip указывает на адрес памяти, по которому будет выполняться следующая инструкция. Во время выполнения каждой инструкции процессор увеличивает rip, чтобы указывал на следующую.
JMP - безусловный переход.
jmp метка
jmp регистр
jmp адрес_в_памяти
Переход по метке:
global _start
section .text
_start:
mov rdi, 11 ; RDI = 11
jmp exit ; переходим к метке exit
mov rdi, 22 ; не выполняется
exit: ; метка exit
mov rax, 60 ; 60 - номер системного вызова exit
syscall
Переход по адресу в регистре:
global _start
section .text
_start:
mov rbx, exit ; в регистр RBX помещаем адрес метки exit
mov rdi, 22 ; RDI = 12
jmp rbx ; переходим к адресу из регистра RBX
mov rdi, 33 ; не выполняется
exit: ; метка exit
mov rax, 60 ; 60 - номер системного вызова exit
syscall