Assembly
Обмеження:
Embedded systems
У бізнесі Assembly рідко виступає як основною мовою. * розуміння компіляції;
- низькорівневих фрагментів;
- performance analysis;
- debugging;
- embedded;
- reverse engineering;
- runtime systems. Він містить:
Спрощено:
Поширені помилки:
- little-endian;
- big-endian. Тому немає одного універсального Assembly; так само реалізовано ARM/AArch64 assembly, RISC-V assembly і інші варіанти. GNU assembler історично часто використовує AT&T syntax для x86, але здатна підтримувати й Intel syntax залежно від режиму. * ISA — Instruction Set Architecture, набір інструкцій і правил CPU. * System call — звернення програми до kernel. * immediate value;
- register;
- memory address;
- register + offset;
- base + index;
- PC-relative addressing. * низька продуктивність розробника;
- складність підтримки;
- залежність від architecture;
- ризик memory bugs;
- складність тестування;
- складність portability;
- сучасні компілятори часто оптимізують краще;
- для бізнес-систем майже завжди краще високорівнева мова. x86-64 — 64-бітне розширення, яке широко застосовують, коли потрібно на desktop, laptop і server системах.[1]
Assembly особливо корисний для:
Stack
call
!
У x86-64 register rsp часто вказує на верх stack. mov
У коді часто зустрічаються:
- RAX;
- RBX;
- RCX;
- RDX;
- RSI;
- RDI;
- RSP;
- RBP;
- R8–R15. * Linker — інструмент, що об’єднує object files у executable. Endianness — порядок байтів у багатобайтових числах. * x86-64 — 64-бітна технічна архітектура Intel/AMD. Arm A-profile A64 documentation надає HTML-опис A64 instruction set architecture. Assembly виступає як проміжним рівнем:
- чому код повільний;
- як функціонує stack;
- що таке pointer;
- що робить compiler;
- чому native extension падає;
- як працюють CPU caches;
- чому data layout важливий.== Side-channel attacks ==
- компілюються в machine code;
- виконуються через VM;
- JIT-компілюються;
- викликають native libraries;
- використовують runtime.== CPU architecture ==
Bootloader здатна:
- прямий контроль над CPU;
- робота з registers;
- розуміння machine code;
- embedded і firmware;
- kernels і drivers;
- debugging native crashes;
- reverse engineering;
- performance analysis;
- SIMD optimization;
- навчання computer architecture.
Compiler output
Instruction Set Architecture або ISA — набір правил, які визначають, які інструкції підтримує процесор.[2]
- binary formats;
- network protocols;
- embedded systems;
- file parsing;
- reverse engineering;
- interoperability. # Покривати код тестами. Приклади AArch64 registers:
Calling convention
ARM і AArch64
Він часто застосовується для в Linux/Unix toolchains. Linker об’єднує object files і libraries у фінальний executable.== Assembly і Python/C#/Go/Swift/Dart == ldr Wasm застосовується для для:
Дивіться так само
Assembly найкраще використовувати як точний інструмент для специфічних низькорівневих задач, а не як універсальну мову для застосунків. * Calling convention — правила передачі arguments і результатів між функціями. Під час роботи з Assembly варто:
Типові помилки в Assembly
MASM здатна зустрічатися в:
Він здатна бути потрібен для:
ABI — Application Binary Interface. Це не інтуїтивно для великих застосунків, але дуже корисно для системного програмування, embedded, debugging і розуміння того, як функціонує код “під капотом”. * C;
- C++;
- Rust;
- Go;
- C#;
- Swift;
- Java;
- Python;
- JavaScript;
- Dart. Його використовують для:
Stack frame — частина stack, яка належить конкретному function call. ARM і RISC-V — RISC-напрям. Сценарії:
У Malware analysis часто передбачено читання Assembly. * Reverse engineering — аналіз binary або системи для розуміння її роботи. Як і будь-який інструмент, Assembly здатна використовуватися відповідально або шкідливо. WebAssembly не виступає як класичним CPU Assembly, але концептуально близький: це низькорівневий instruction format для stack-based virtual machine.== Головна ідея ==
- objdump;
- llvm-objdump;
- gdb;
- lldb;
- radare2;
- Ghidra;
- IDA Free/IDA Pro;
- Hopper. У сучасних CPU ця різниця складніша, бо внутрішня реалізація здатна відрізнятися від зовнішньої ISA. # Документувати register usage. Reverse engineering здатна використовуватися для:
mov rax, 1
Коли Assembly особливо корисний
Сьогодні більшість програм не пишуть на 100% на Assembly. # Писати мінімальні Assembly-фрагменти. * buffer overflow;
- stack corruption;
- return address overwrite;
- use-after-free;
- integer overflow;
- calling convention mismatch;
- unsafe system calls;
- race conditions;
- side-channel leaks;
- gadget-based exploitation.== Disassembler ==
- audio/video;
- image processing;
- cryptography;
- numerical computing;
- ML inference;
- compression;
- signal processing. je zero_case
SEO title: Assembly — асемблер, машинний код, регістри, інструкції CPU, x86-64, ARM, RISC-V, NASM, GAS і низькорівневе програмування
SEO keywords: Assembly, assembler, асемблер, мова асемблера, машинний код, machine code, x86 assembly, x86-64 assembly, ARM assembly, AArch64 assembly, RISC-V assembly, NASM, MASM, GAS, GNU assembler, LLVM assembler, registers, CPU instructions, stack, memory, calling convention, ABI, linker, object file, disassembler, objdump, embedded systems, низькорівневе програмування, reverse engineering, debugging assembly, performance optimization
</noinclude>
{{SEO
Шаблон для службового SEO-опису сторінки.
}}
* embedded systems; * bootloaders; * kernels; * drivers; * compiler/runtime development; * reverse engineering; * malware analysis; * performance-critical routines; * SIMD optimization; * ABI debugging; * crash dump analysis; * security research; * навчання computer architecture; * low-level hardware access. Але inline assembly має ризики: * порушити calling convention; * не зберегти callee-saved registers; * зламати stack alignment; * переплутати operand order; * неправильно порахувати offset; * не врахувати endianness; * зробити out-of-bounds memory access; * забути про sign extension; * переплутати instruction size; * не врахувати ABI; * не тестувати edge cases; * оптимізувати без вимірювання; * не документувати register usage; * писати Assembly там, де достатньо C або Rust.== Object file == * розуміння native crash у сторонній бібліотеці; * аналіз performance на рівні compiled code; * інтеграційні функції ERP з embedded device; * driver або low-level connector; * reverse engineering старого binary-компонента з дозволом; * аудит native dependency. Assembly — це важлива низькорівнева мова, яка дає можливість зрозуміти й контролювати роботу процесора. * '''ABI''' — binary-level правила сумісності між модулями.[[Категорія:ARM]] '''A64''' — instruction set для AArch64. # Перевіряти stack alignment. Instruction — команда CPU. * overflow; * alignment; * zero-length input; * boundary values; * calling convention; * register preservation; * stack alignment.== Assembly і тестування == [[Категорія:Compiler]] == Performance optimization == == WebAssembly == == System calls == '''MASM''' — Microsoft Macro Assembler. Основна частина kernel часто пишеться C/C++ або Rust, але низькорівневі частини можуть потребувати Assembly. Приклад ідеї: == Branching == всіх комп’ютерів: виступає як x86/x86-64 assembly забезпечується через Кожна технічна архітектура процесора має власний набір інструкцій.
Assembly залишається важливим для:
- registers;
- instruction formats;
- memory addressing;
- data types;
- privilege levels;
- exceptions;
- calling conventions частково через ABI;
- system instructions;
- vector instructions. * Stack frame — частина stack для конкретного виклику функції. * Assembly — низькорівнева мова, що текстово описує інструкції CPU. * x86;
- x86-64;
- ARM;
- AArch64;
- RISC-V;
- MIPS;
- PowerPC;
- AVR;
- 6502;
- Z80;
- WebAssembly-like virtual instruction sets. Підхід !! * Stack — область пам’яті для function calls і local data. cmp rax, 0
Потрібно пояснювати:
SIMD — Single Instruction, Multiple Data.
Високорівневі мови не виконуються “магічно”. Ідея
High-level code → Compiler → Assembly → Assembler → Machine code
RISC-V — open standard instruction set architecture. * де лежать functions;
- як зв’язати symbols;
- які libraries підключити;
- які relocations застосувати;
- як сформувати executable format. Це без зусиль низькорівневий інструмент. NASM має власний синтаксис і macros.== MASM ==
Це корисно для:
Linker вирішує:
Знання Assembly оптимізує читати compiler output. ARM — технічна архітектура, дуже поширена в мобільних пристроях, embedded, Apple Silicon, servers і IoT. # Мати reference implementation високого рівня. Assembly або мова асемблера — це низькорівнева мова програмування, яка описує інструкції процесора у текстовій формі, близькій до машинного коду. * ARM — поширена RISC-архітектура для mobile, embedded і servers. * crash;
- data corruption;
- undefined behavior;
- security vulnerability;
- неправильний результат. У cryptography потрібно уникати data-dependent timing, якщо це здатна розкрити секрети.[3]
ret
Але Rust теж компілюється в машинний код і здатна взаємодіяти з Assembly, intrinsics і ABI. # Не використовувати Assembly без реальної потреби.== Inline assembly == Приклади x86-like інструкцій: Але сучасні компілятори дуже сильні. * Disassembler — інструмент, що перетворює binary code у assembly-like текст. ABI містить:
- load;
- store;
- address;
- pointer;
- offset;
- stack;
- heap;
- alignment;
- memory access size.
ret
str
Object file — проміжний файл після компіляції або асемблювання. * Bootloader — ранній код запуску системи. Register — дуже швидке місце зберігання всередині CPU.Assembler — програма, яка перетворює Assembly-код у машинний код або object file. # Вказувати assembler і syntax.== x86 і x86-64 ==
Stack frame
Інструменти:
GAS підтримує багато architectures і часто застосовується для compiler toolchains.== CISC і RISC ==
Приклади:
- Чітко вказувати target architecture.== LLVM assembler ==
* iPhone; * Android; * Apple Silicon Mac; * embedded systems; * microcontrollers; * cloud ARM servers; * low-power devices. * '''Object file''' — проміжний файл із machine code і symbols. Це критично для: * X0–X30; * SP; * PC; * V0–V31.[[Категорія:RISC-V]] Сучасні CPU мають branch prediction, тому pattern переходів здатна впливати на performance. '''критично:''' reverse engineering здатна бути легальним або незаконним залежно від контексту, ліцензій і юрисдикції. * '''AArch64''' — 64-бітний execution state ARM. * [[C Sharp]] * [[Go]] * [[Swift]] * [[Dart]] * [[PowerShell]] * [[Visual Basic]] * [[Python]] * [[MATLAB]] * [[Розробка в K2 ERP]] * [[Тестування коду]] * [[API K2 ERP]] * [[Інтеграції K2 ERP]] * [[Deep Learning]] * [[Великі мовні моделі]] * [[GitHub Copilot]] * [[Cursor]] * [[Tabnine]] * [[Штучний інтелект]] * [[Генеративний AI]] add rax, 2 * [https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html Intel — Intel 64 and IA-32 Architectures Software Developer’s Manuals] * [https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-1-manual.html Intel — Intel 64 and IA-32 Architectures Software Developer’s Manual] * [https://developer.arm.com/documentation/ddi0602/2025-12/Base-Instructions Arm Developer — A64 Base Instructions] * [https://developer.arm.com/zh-TW/products/architecture/instruction-sets/a64 Arm Developer — A64 Instruction Set Architecture] * [https://github.com/riscv-non-isa/riscv-asm-manual RISC-V Assembly Programmer’s Manual] * [https://sourceware.org/binutils/docs/as/ GNU Binutils — Using as, GNU assembler documentation] * [https://www.gnu.org/software/binutils/ GNU Binutils] * [https://llvm.org/docs/ LLVM Documentation] * [https://lldb.llvm.org/ LLDB Debugger] * [https://sourceware.org/gdb/documentation/ GDB Documentation] * [https://webassembly.org/ WebAssembly] * [https://developer.mozilla.org/en-US/docs/WebAssembly MDN — WebAssembly] * [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki — Help:Formatting] * [https://www.mediawiki.org/wiki/Help:Links MediaWiki — Help:Links] == ABI == [[Категорія:Debugging]] Assembly важливий для reverse engineering. Intrinsics часто кращі за inline assembly, бо компілятор краще розуміє код і здатна оптимізувати його. ABI описує binary-level правила взаємодії між compiled modules. * '''Alignment''' — вирівнювання даних у пам’яті. # Уникати зайвої “магії”. Особливо критично тестувати edge cases: * machine code; * symbols; * relocation information; * debug information; * sections; * metadata. Для корпоративної роботи потрібні правила, дозвіл і юридична перевірка. * Windows low-level code; * legacy projects; * Visual Studio workflows; * x86/x64 assembly для Windows; * driver-related старих матеріалах. '''Calling convention''' — правила виклику функцій. * '''RISC-V''' — open standard instruction set architecture. * move/load/store; * arithmetic; * logic; * compare; * branch/jump; * call/return; * stack operations; * SIMD/vector operations; * system instructions; * atomic operations. * '''x86''' — історична технічна архітектура Intel/AMD. * порядок operands; * префікси registers; * позначення sizes; * immediate values; * memory addressing syntax. # Читати офіційний ISA manual. Підходи: <div style="background:#f6ffed;border-left:6px solid #27ae60;padding:14px 18px;margin:16px 0;border-radius:8px;"> == Memory == Приклади: Bootloaders часто містять Assembly, бо високорівневе runtime-середовище ще не готове.[[Категорія:Embedded Systems]] '''Side-channel attack''' використовує побічні сигнали, як приклад timing або cache behavior. * '''SIMD''' — виконання однієї операції над кількома даними. Він не веде обліковий облік, не проводить документи, не керує складом і не формує бізнес-звіти. * if; * loops; * switch; * function calls; * error handling; * state machines. # виміряти performance; # знайти bottleneck; # перевірити algorithm complexity; # оптимізувати data layout; # перевірити compiler flags; # подивитися generated assembly; # розглянути intrinsics; # тільки потім писати hand-written assembly. Приклади типів інструкцій: Для Assembly важлива документація. Stack зазвичай росте вниз у пам’яті, але це залежить від архітектури й ABI. add * stack canaries; * ASLR; * DEP/NX; * control-flow integrity; * memory-safe languages; * sanitizers; * fuzzing; * code review; * static analysis; * careful ABI adherence. cmp Це здатна бути корисно для: * target architecture; * assembler syntax; * ABI; * calling convention; * register usage; * clobbered registers; * assumptions; * alignment; * supported OS; * tested CPUs; * build commands; * reason for hand-written assembly. * '''Intrinsic''' — compiler-provided функція для спеціальних CPU інструкцій.== Endianness == '''CISC''' — Complex Instruction Set Computer.== Assembly у бізнесі == Вона здатна містити: <pre> * return address; * old frame pointer; * local variables; * saved registers; * temporary storage. * multithreading; * atomics; * locks; * lock-free programming; * compiler optimization; * CPU reordering. У кінці все зводиться до машинного коду — байтів, які CPU розуміє як інструкції. mov rax, rbx <pre> Корисно, коли: * concurrency; * locks; * lock-free data structures; * reference counters; * synchronization; * kernel code.== Хороші практики == * performance optimization; * understanding inlining; * checking vectorization; * reverse engineering bugs; * learning compiler behavior; * ABI debugging. * '''A64''' — instruction set для AArch64. * '''WebAssembly''' — portable binary instruction format для sandboxed runtime. В Assembly ви постійно думаєте: “у якому регістрі це лежить?” і “чи не перезапишу я потрібне значення?”. Assembly пов’язаний із безпекою, бо функціонує близько до пам’яті й CPU. NASM часто використовують у: як приклад, для x86-64 можна побачити щось подібне: '''Atomic operations''' — операції, які виконуються неподільно щодо інших threads. Вони дозволяють: Деякі CPU працюють швидше або навіть вимагають, щоб інформаційні дані були вирівняні за певними адресами. * general-purpose registers; * SIMD/vector instructions; * stack; * calling conventions; * complex instruction set; * legacy modes; * operating system support. Для звичайних ERP, CRM, web, mobile або reporting systems Assembly майже ніколи не виступає як правильним вибором. * gdb; * lldb; * WinDbg; * Visual Studio debugger; * objdump; * perf; * Intel VTune; * Instruments; * perfetto; * platform-specific debuggers. * важко переносити; * швидко порушити ABI; * compiler optimizations можуть взаємодіяти неочікувано; * складно тестувати; * складно підтримувати. ret Приклад ідеї: loop_start: '''Stack''' — область пам’яті для function calls, local variables, return addresses і тимчасових даних.</div> * ELF — Linux; * PE/COFF — Windows; * Mach-O — macOS/iOS.== Assembly і C/C++ == '''x86''' — історична технічна архітектура Intel/AMD. movq %rbx, %rax * потрібен web app; * потрібна ERP-бізнес-логіка; * потрібен backend API; * потрібна мобільна розробка програмного забезпечення; * потрібна швидка підтримуваність; * команда не має low-level досвіду; * продуктивність ще не вимірювали; * задачу можна вирішити C/Rust/Go; * потрібна portability; * потрібна безпечна робота з пам’яттю. Arm documentation описує A64 як instruction set, used in AArch64 and supported by Armv8-A, Armv8-R AArch64 and Armv9-A architectures.== Assembler == Потім linker об’єднує object files у executable або library. Compiler із високорівневої мови сам генерує подібні конструкції.== Reverse engineering == Assembly здатна бути невдалим вибором, якщо: == Джерела == C і C++ найближчі до Assembly серед масових мов високого рівня. Для цього використовують disassemblers, debuggers і decompilers. Disassembler корисний для: Branches потрібні для: <pre> Alignment важливий для: Формати executable/object files: Приклади наборів: jmp bl == Пояснення термінів == x86-64 має: Але Assembly сам по собі не виступає як “шкідливою мовою”. '''Intrinsics''' — функції компілятора, які дають доступ до спеціальних CPU instructions без написання сирого Assembly. Без документації Assembly-код оперативно стає майже нерозбірливим.== Debugging Assembly == '''RISC''' — Reduced Instruction Set Computer. Регістрів мало, тому Assembly-код має уважно працювати з ними. System call interface залежить від OS і architecture. * unit tests через C harness; * integration tests; * emulator tests; * hardware-in-the-loop; * property-based tests; * fuzzing; * differential testing; * comparing with reference implementation; * ABI tests; * performance tests. У контексті [[K2 ERP]] Assembly здатна бути корисним лише опосередковано: через Assembly знання користувачі можуть в debugging. RISC-V Assembly Programmer’s Manual описує стандартну RISC-V assembly language, яку підтримують GNU as і LLVM assembler. '''Проста аналогія:''' високорівнева мова каже “відсортуй список”, а Assembly каже процесору “поклади це значення в регістр, порівняй, зроби перехід, запиши в пам’ять”. Помилки з пам’яттю можуть бути дуже серйозними: * embedded; * OS kernels; * performance; * compilers; * reverse engineering; * security research; * legacy systems.== Bootloader == '''Коротко:''' Assembly — це мова, де програміст функціонує майже напряму з процесором: регістрами, пам’яттю, стеком, інструкціями й calling conventions. System calls потрібні для: '''Практична думка:''' у високорівневій мові ви створюєте змінні майже без обмежень. '''Inline assembly''' — вставка Assembly-коду в C/C++ або іншу мову. Це значно читабельніше, ніж відповідні байти машинного коду.</div> * debugging; * reverse engineering; * аналізу compiler output; * malware analysis; * performance tuning; * вивчення binary. '''WebAssembly''' або '''Wasm''' — binary instruction format для portable execution.
Багато Assembly вивчають саме через C/C++ compiler output. # Вимірювати performance до оптимізації. * NASM;
- MASM;
- GNU assembler або GAS;
- LLVM assembler;
- FASM;
- YASM;
- platform-specific assemblers. # Використовувати debugger і disassembler.== Intel syntax і AT&T syntax ==
Зазвичай використовують:
Addressing modes сильно залежать від ISA. Захист:
Перед ручною оптимізацією треба:
Disassembler — інструмент, який перетворює машинний код назад у assembly-like текст. Приклади:
x86-64 зазвичай little-endian.Ризики: Не варто плутати WebAssembly з x86 або ARM Assembly: Wasm виконується через runtime, а не напряму CPU як native ISA.[[Категорія:Програмування]] LLVM toolchain має власні assembler/disassembler функції ERP. Calling convention залежить від платформи. '''GNU assembler''' або '''GAS''' — assembler у складі GNU Binutils.== Alignment == * performance; * SIMD; * ABI; * structs; * embedded systems; * binary compatibility.
Kernel і драйвери
AT&T syntax часто виглядає так:
Головна ідея Assembly — дати людині текстовий спосіб записувати машинні інструкції.== Instructions ==
GNU assembler
Assembly часто застосовується для в embedded systems. * Endianness — порядок байтів у багатобайтових значеннях. * Register — швидке сховище всередині CPU. # Розглядати intrinsics перед hand-written assembly. # Писати коментарі не “що”, а “чому”. Приклади x86-64 registers:
SIMD корисний для:
Assembly іноді використовують для performance. * працювати з pointers;
- контролювати layout;
- викликати intrinsics;
- взаємодіяти з ABI;
- писати системний код;
- використовувати inline assembly;
- компілювати під різні ISA. Неправильне розуміння memory model здатна призвести до рідкісних і дуже складних bugs. GNU assembler documentation зазначає, що це user guide для
asGNU Binutils.== Assembly і malware ==
- спеціальних CPU instructions;
- performance-critical fragments;
- embedded;
- low-level control;
- compiler barriers;
- hardware access. ARM/AArch64 важливий для:
Loops
Цикли в Assembly зазвичай будуються через labels і conditional jumps. Branching — умовні або безумовні переходи.
Типові варіанти: Але бізнес-логіку ERP майже завжди потрібно писати високорівневою мовою, а не Assembly.== SIMD і vector instructions == Memory model описує правила видимості операцій із пам’яттю між threads або cores. LLVM assembly і machine code tooling важливі для сучасних компіляторів. Окремо варто відзначити регістрів і правил. LLVM застосовується для в:* return address; * local variables; * saved registers; * function arguments, якщо не вистачає registers; * stack frames. * startup code; * interrupt handlers; * bootloaders; * direct hardware access; * microcontroller initialization; * performance-critical routines; * power-sensitive code; * tiny memory environments.== Intrinsics == Assembly залежить від архітектури CPU. Debuggers часто використовують stack frames, щоб показати call stack. Машинний код — це байти, які виконує процесор. * освіти; * досліджень; * embedded; * custom processors; * open hardware; * experimentation; * academic CPU design. SIMD instructions виконують одну операцію над кількома елементами одночасно. * програма падає в native code; * немає source code; * треба читати crash dump; * треба зрозуміти stack trace; * виступає як memory corruption; * compiler optimization ускладнює debugging; * потрібно перевірити ABI; * performance profiler показує hot instruction.== NASM == Популярні assemblers:Assembly і документація
Для x86 Assembly виступає як різні синтаксиси. * Inline assembly — Assembly-код, вставлений у код C/C++ або іншої мови. RISC-V важливий для: sub Assembly знання оптимізує зрозуміти: * які arguments ідуть у registers; * які arguments ідуть у stack; * де повертається result; * які registers зберігає caller; * які registers зберігає callee; * як вирівнюється stack; * як обробляються variadic functions.== Assembly і Rust == Вони або: x86 часто вважають CISC-архітектурою. b Atomic assembly instructions складні, бо треба враховувати memory ordering і CPU architecture. Якщо ABI порушено, код здатна компілюватися, але падати або працювати неправильно.== Linker ==Assembly — це читабельний текстовий запис цих інструкцій. Intel manual Volume 2 містить повний instruction set reference для Intel 64 і IA-32. * embedded продуктів; * industrial hardware; * firmware; * high-performance libraries; * cryptography; * drivers; * legacy binary support; * reverse engineering; * security audit; * performance-critical modules.== RISC-V == Rust застосовується для для системного програмування з фокусом на memory safety. * Machine code — байти інструкцій, які виконує процесор. GNU assembler documentation описуєAddressing modes
asяк user guide для GNU assembler у складі GNU Binutils. Assembly не виступає як ERP-системою. * Instruction — команда процесора. * аналізу старих програм; * compatibility; * malware analysis; * security research; * debugging binary without source; * understanding protocols; * firmware analysis. Часто швидше оптимізує кращий алгоритм або layout даних. Assembly функціонує з пам’яттю напряму або через адреси. # Дотримуватися ABI і calling convention. Assembler перетворює assembly text у object file або machine code.== Atomic operations == Assembly здатна використовуватися в operating system kernels і drivers.[4] Endianness важливий для: Відмінності:* файлів; * процесів; * пам’яті; * мережі; * вводу/виводу; * таймерів; * permissions.[5] * web; * sandboxed execution; * plugins; * edge computing; * cross-language runtime; * portable modules. * навчанні; * OSDev; * bootloaders; * low-level x86 experiments; * hand-written assembly modules. movAssembly і ERP-системи
Stack застосовується для для:Коли Assembly здатна бути невдалим вибором
* Clang; * Swift compiler ecosystem; * Rust compiler backend historically via LLVM; * many modern language toolchains; * cross-compilation; * optimization pipelines. * Assembler — програма, яка перетворює Assembly у machine code або object file.Практичний висновок
Assembly і високорівневі мови
add Вони потрібні для: * calling convention; * object file format; * type layout; * name mangling; * exception handling; * dynamic linking; * system call interface. * context switching; * interrupt handling; * system call entry; * low-level CPU setup; * synchronization primitives; * memory management; * hardware-specific code. Вона визначає: Код для x86-64 не запуститься напряму на ARM без перекомпіляції або емуляції. Intel Software Developer’s Manual описує архітектуру, середовище програмування та повний instruction set reference для Intel 64 і IA-32 процесорів. Assembly-level знання важливе для розуміння таких атак, бо вони часто залежать від CPU, memory access і branch behavior. jnz loop_startRegisters
; тіло циклу Assembly-код теж потрібно тестувати. Він застосовується для в Microsoft/Windows ecosystem. Сильні сторони: Процесор не виконує Python, C#, Go або Swift напряму. |-Instruction Set Architecture
| CISC | складніші інструкції, історично більше можливостей в одній інструкції |
| RISC | простіші інструкції, регулярніший набір операцій |
Rust здатна замінити частину C/C++ там, де раніше могли знадобитися небезпечні низькорівневі підходи. як приклад, Linux x86-64 і Windows x86-64 мають різні механізми виклику системних функцій. Сценарії: Приклади AArch64-like інструкцій: як приклад, SIMD intrinsics дозволяють використовувати vector instructions через C/C++ API.[6] jmp done як приклад, x86-64 Windows і x86-64 Linux мають різні calling conventions. Bootloader — код, який запускається дуже рано й готує систему до виконання основної програми або OS. У embedded часто пишуть базовий код на C/C++, а Assembly — тільки там, де потрібен прямий контроль. AArch64 — 64-бітний execution state для Arm. Alignment — вирівнювання даних у пам’яті.== Memory model == dec rcx * налаштувати CPU; * підготувати memory; * завантажити kernel; * перевірити firmware; * налаштувати hardware; * перейти в інший execution mode. * SSE; * AVX; * AVX2; * AVX-512; * NEON; * SVE; * RISC-V Vector extension.[7]
Безпека
Популярний інструмент для навчання — Compiler Explorer, де можна подивитися Assembly output для C/C++, Rust, Go та інших мов. Addressing mode — спосіб вказати, де знаходиться operand.== Assembly і машинний код == System call — звернення програми до operating system kernel. Intel syntax часто виглядає так: NASM — Netwide Assembler, популярний assembler для x86/x86-64. Практичний принцип: Assembly — останній інструмент оптимізації, а не перший. ISA описує:
- ↑ https://github.com/riscv-non-isa/riscv-asm-manual
- ↑ https://sourceware.org/binutils/docs/as/
- ↑ https://developer.arm.com/zh-TW/products/architecture/instruction-sets/a64
- ↑ https://developer.arm.com/documentation/ddi0602/2025-12/Base-Instructions
- ↑ https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html
- ↑ https://sourceware.org/binutils/docs/as/
- ↑ https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-1-manual.html