nasm -f elf64 test1.asm && ld test1.o -o test1 Уровень 1: Простейшие (1 байт, без операндов) нет_операции (nop) - 0x90 вернуться (ret) - 0xC3 вызов_системы (syscall) - 0x0F 0x05 остановить (hlt) - 0xF4 установить_перенос (stc) - 0xF9 сбросить_перенос (clc) - 0xF8 отладка (int3) - 0xCC Уровень 2: Простые с одним регистром (1-2 байта) втолкнуть (push reg) - 0x50+r вытолкнуть (pop reg) - 0x58+r увеличить (inc reg) - 0x40+r (32-bit), 0x48 0xFF /0 (64-bit) уменьшить (dec reg) - 0x48+r (32-bit), 0x48 0xFF /1 (64-bit) Уровень 3: Регистр-регистр (2-3 байта) переместить (mov reg, reg) - 0x48 0x89 (modrm) прибавить (add reg, reg) - 0x48 0x01 (modrm) вычесть (sub reg, reg) - 0x48 0x29 (modrm) сравнить (cmp reg, reg) - 0x48 0x39 (modrm) Уровень 4: Регистр-непосредственное значение (3-10 байт) переместить_имм (mov reg, imm) - зависит от размера прибавить_непосредственно (add reg, imm) сравнить_с (cmp reg, imm) Уровень 5: Работа с памятью (3-7 байт) загрузить (mov reg, [reg]) - 0x48 0x8B (modrm) сохранить (mov [reg], reg) - 0x48 0x89 (modrm) втолкнуть_из_памяти (push mem) вытолкнуть_в_память (pop mem) Уровень 6: Относительные переходы (5 байт) переход (jmp rel32) - 0xE9 вызвать (call rel32) - 0xE8 переход_если_равно (je rel32) - 0x0F 0x84 Уровень 7: Сложная адресация (6-7 байт) загрузить_адрес (lea reg, [rip+disp]) - 0x48 0x8D (modrm+sib+disp) Уровень 8: 8-битные операции (особые случаи) загрузить_байт (mov reg8, imm8) прибавить_байт (add reg8, reg8) работа со старшими байтами (AH, CH, etc.) Уровень 9: Специальные/сложные умножить (mul) - 0xF7 /4 разделить (div) - 0xF7 /6 строковые операции ввод-вывод