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