kvs/nop/заметки.txt

55 lines
2.4 KiB
Plaintext
Raw Normal View History

2025-10-27 14:15:58 +03:00
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
строковые операции
ввод-вывод