kvs/nop/заметки.txt
2025-10-27 14:15:58 +03:00

55 lines
2.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
строковые операции
ввод-вывод