Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

Π—Π° Ρ‡Ρ‚ΠΎ я люблю Assembler?

Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

ΠžΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡ΠΊΠΈ

Π₯ΠΎΡ‡Ρƒ сразу ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ «ассСмблСр» (assembler), Π° «язык ассСмблСра» (assembly language), ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ ассСмблСр – это транслятор ΠΊΠΎΠ΄Π° Π½Π° языкС ассСмблСра (Ρ‚.Π΅. ΠΏΠΎ сути, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° MASM, TASM, fasm, NASM, UASM, GAS ΠΈ ΠΏΡ€., которая ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ исходный тСкст Π½Π° языкС ассСмблСра Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ исполняСмый Ρ„Π°ΠΉΠ»). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ· сообраТСния краткости ΠΌΠ½ΠΎΠ³ΠΈΠ΅, говоря «ассСмблСр» (асм, asm), ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ «язык ассСмблСра».

Бинтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², стандартных макросов ΠΈ ΠΏΡ€. структурных элСмСнтов Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠ² (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, MASM, fasm, NASM, GAS), ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ довольно сущСствСнно. МнСмоники (ΠΈΠΌΠ΅Π½Π°) инструкций (ΠΊΠΎΠΌΠ°Π½Π΄) ΠΈ рСгистров, Π° Ρ‚Π°ΠΊΠΆΠ΅ синтаксис ΠΈΡ… написания для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСссора ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π°Ρ… (Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ срСди популярных ассСмблСров являСтся Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ GAS (GNU Assembler) Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ синтаксиса AT&T для x86, Π³Π΄Π΅ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ инструкций ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ суффиксы, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ довольно ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½ΡŽΠ°Π½ΡΡ‹, ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ с Ρ‚ΠΎΠ»ΠΊΡƒ программиста, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠ΅Π³ΠΎ ΠΊ классичСскому ассСмблСру, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΈΠ½ΠΎΠΉ порядок указания ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², хотя всё это лСчится ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ€Π΅ΠΆΠΈΠΌ классичСского синтаксиса Intel).

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ассСмблСр – самый Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык программирования, довольно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ компилировался Π±Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ процСссоров (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, x86 ΠΈ ARM), для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСссора (16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ long mode; Π° Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ написан ΠΊΠ°ΠΊ с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π²Ρ€ΠΎΠ΄Π΅ SSE, AVX, FMA, BMI ΠΈ AES-NI, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π· Π½ΠΈΡ…) ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм (Windows, Linux, MS-DOS). Π₯ΠΎΡ‚ΡŒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Β«ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉΒ» ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ), скаТСм, для 32- ΠΈ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ОБ Windows (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ для Windows ΠΈ Linux), Π½ΠΎ это Π±Ρ‹Π²Π°Π΅Ρ‚ нСчасто. Π’Π΅Π΄ΡŒ каТдая строка ΠΊΠΎΠ΄Π° Π½Π° ассСмблСрС (Π½Π΅ считая ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², макросов ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ) – это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ инструкция, которая ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора ΠΈ ОБ, ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ кроссплатформСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов ΠΈ условных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора, получая Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΡ€ΠΎΠΉ вСсьма Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции, слоТныС для понимания.

ΠžΡ‚ΠΊΡƒΠ΄Π° растут Π½ΠΎΠ³ΠΈ?

АссСмблСром я увлёкся Π»Π΅Ρ‚ Π² 12–13, ΠΈ ΠΎΠ½ мСня изрядно «затянул». ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

Но с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 2-Ρ… дСсятков Π»Π΅Ρ‚, ΠΈ сСйчас экономия памяти (особСнно дисковой) Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°, Π΄Π° ΠΈ скорости соврСмСнных процСссоров для выполнСния повсСднСвных Π·Π°Π΄Π°Ρ‡ Π²ΠΏΠΎΠ»Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ (ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ языков свСрхвысокого уровня ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ это, хотя Π·Π°ΠΊΠΎΠ½ Π’ΠΈΡ€Ρ‚Π° Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ отмСнял). А соврСмСнныС компиляторы Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ скорости Π΄Π°ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ программиста Π² ассСмблСрС, вСдь исходники Π½Π° Π½Ρ‘ΠΌ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡŠΡ‘ΠΌΠ½Ρ‹Π΅ ΠΈ слоТныС, Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ трСбуСтся большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ внимания (Π² Ρ‚.Ρ‡. Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ)?

Π’ΠΎΠ½ ΠΎΠ½ΠΎ Ρ‡Ρ‚ΠΎ!

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ свои Π΄ΠΎΠ²ΠΎΠ΄Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆ ассСмблСр.

Π’ ассСмблСрС Π΅ΡΡ‚ΡŒ особая магия ΠΈ ΠΏΡ€ΠΈΡ‚ΡΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ! Но справСдливости Ρ€Π°Π΄ΠΈ скаТу, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ всСгда Π½Π° ассСмблСрС – занятиС Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, усилий, вСроятности Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ кроссплатформСнности (я сам Ρ€Π΅ΠΆΠ΅ ΠΏΠΈΡˆΡƒ Π½Π° ассСмблСрС, Π½Π΅ΠΆΠ΅Π»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках). НС Ρ‚Π°ΠΊ часто Π½Π°ΠΌ трСбуСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡΡ‚ΠΎΠ»ΡŒ ΡƒΠΆ Тёсткая оптимизация, ΠΊΠΎΠ³Π΄Π° экономия ΠΏΠ°Ρ€Ρ‹ Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора ΠΈΠΌΠ΅Π΅Ρ‚ критичСски Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

На Ρ‚ΠΎΠΌ ΠΆΠ΅ C/C++ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ практичСски всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π½Π° ассСмблСрС, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ сразу ΠΏΠΎΠ΄ дСсяток ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ ОБ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ опциями компилятора использованиС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² инструкций, Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€.

Но ΠΈΠ½ΠΎΠ³Π΄Π° использованиС ассСмблСра Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€). Часто ассСмблСр Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ вставок Π² ΠΊΠΎΠ΄ Π½Π° Π―Π’Π£ (посмотритС RTL-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Delphi, Ρ‚Π°ΠΌ этого Π΄ΠΎΠ±Ρ€Π° Π² ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠΈ). Π”Π° ΠΈ использованиС интринсиков, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ опасно) Π±Π΅Π· знания ассСмблСра.

ΠŸΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠΌβ€¦

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ассСмблСр.

Π‘Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ?

Π’Π°ΠΊ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ассСмблСр соврСмСнному программисту? Если Π²Ρ‹ ΡƒΠΆΠ΅ Π½Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈ Ρƒ вас ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ Π°ΠΌΠ±ΠΈΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ассСмблСра, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ функционирования ΠΆΠ΅Π»Π΅Π·Π° (особСнно процСссоров, памяти), Π° Ρ‚Π°ΠΊΠΆΠ΅ использованиС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… инструмСнтов для дизассСмблирования, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ эффСктивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜Π½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ слоТно Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» любимого компилятора (хотя Π±Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ…), ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° любом языкС программирования ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ стоит ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ слишком Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π² эту Ρ‚Π΅ΠΌΡƒ, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° Python ΠΈΠ»ΠΈ JavaScript. А Π²ΠΎΡ‚ Ссли ваш язык – C ΠΈΠ»ΠΈ C++, Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π½ΡŒΠΊΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ассСмблСр Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.

ВмСстС с Ρ‚Π΅ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Β«Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠ΅Β», Π½ΠΎ ΠΈ ΠΎ «стратСгии» написания ΠΊΠΎΠ΄Π°, поэтому Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ (ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ΅Π½ для создания эффСктивных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π΅ΠΆΠ΅Π»ΠΈ низкоуровнСвая оптимизация), ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… программист Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сСбя соврСмСнным.

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ

Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ассСмблСр ΠΈ ΠΎΠΊΡƒΠ½ΡƒΡ‚ΡŒΡΡ Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΈ инструмСнты:

ВсС эти ссылки (Π° Ρ‚Π°ΠΊΠΆΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ вошли Π² эту ΡΡ‚Π°Ρ‚ΡŒΡŽ) Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ, ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ² сюда.

Π’Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΈΠ³Π»Π°ΡΠΈΡ‚ΡŒ вас Π² наш ΡƒΡŽΡ‚Π½Ρ‹ΠΉ Β«Π»Π°ΠΌΠΏΠΎΠ²Ρ‹ΠΉΒ» Ρ€Π°Π·Π΄Π΅Π» Assembler Π€ΠΎΡ€ΡƒΠΌΠ° Π½Π° Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ….Π Ρƒ πŸ˜‰

ΠšΡ‚ΠΎ интСрСсуСтся дСмосцСной ΠΈ сайзкодингом, welcome here.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π—Π° Ρ‡Ρ‚ΠΎ я люблю ассСмблСр?

Π­Ρ‚ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΡƒΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ 3 Π³ΠΎΠ΄Π°. Однако сСгодня я Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ΄Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π½Π° Π₯Π°Π±Ρ€.

Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

ΠžΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡ΠΊΠΈ

Π₯ΠΎΡ‡Ρƒ сразу ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ «ассСмблСр» (assembler), Π° «язык ассСмблСра» (assembly language), ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ ассСмблСр – это транслятор ΠΊΠΎΠ΄Π° Π½Π° языкС ассСмблСра (Ρ‚.Π΅. ΠΏΠΎ сути, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° MASM, TASM, fasm, NASM, UASM, GAS ΠΈ ΠΏΡ€., которая ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ исходный тСкст Π½Π° языкС ассСмблСра Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ исполняСмый Ρ„Π°ΠΉΠ»). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ· сообраТСния краткости ΠΌΠ½ΠΎΠ³ΠΈΠ΅, говоря «ассСмблСр» (асм, asm), ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ «язык ассСмблСра».

Бинтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², стандартных макросов ΠΈ ΠΏΡ€. структурных элСмСнтов Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠ² (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, MASM, fasm, NASM, GAS), ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ довольно сущСствСнно. МнСмоники (ΠΈΠΌΠ΅Π½Π°) инструкций (ΠΊΠΎΠΌΠ°Π½Π΄) ΠΈ рСгистров, Π° Ρ‚Π°ΠΊΠΆΠ΅ синтаксис ΠΈΡ… написания для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСссора ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π°Ρ… (Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ срСди популярных ассСмблСров являСтся Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ GAS (GNU Assembler) Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ синтаксиса AT&T для x86, Π³Π΄Π΅ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ инструкций ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ суффиксы, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ довольно ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½ΡŽΠ°Π½ΡΡ‹, ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ с Ρ‚ΠΎΠ»ΠΊΡƒ программиста, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠ΅Π³ΠΎ ΠΊ классичСскому ассСмблСру, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΈΠ½ΠΎΠΉ порядок указания ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², хотя всё это лСчится ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ€Π΅ΠΆΠΈΠΌ классичСского синтаксиса Intel).

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ассСмблСр – самый Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык программирования, довольно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ компилировался Π±Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ процСссоров (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, x86 ΠΈ ARM), для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСссора (16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ long mode; Π° Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ написан ΠΊΠ°ΠΊ с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π²Ρ€ΠΎΠ΄Π΅ SSE, AVX, FMA, BMI ΠΈ AES-NI, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π· Π½ΠΈΡ…) ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм (Windows, Linux, MS-DOS). Π₯ΠΎΡ‚ΡŒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Β«ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉΒ» ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ), скаТСм, для 32- ΠΈ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ОБ Windows (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ для Windows ΠΈ Linux), Π½ΠΎ это Π±Ρ‹Π²Π°Π΅Ρ‚ нСчасто. Π’Π΅Π΄ΡŒ каТдая строка ΠΊΠΎΠ΄Π° Π½Π° ассСмблСрС (Π½Π΅ считая ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², макросов ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ) – это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ инструкция, которая ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора ΠΈ ОБ, ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ кроссплатформСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов ΠΈ условных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора, получая Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΡ€ΠΎΠΉ вСсьма Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции, слоТныС для понимания.

ΠžΡ‚ΠΊΡƒΠ΄Π° растут Π½ΠΎΠ³ΠΈ?

АссСмблСром я увлёкся Π»Π΅Ρ‚ Π² 12–13, ΠΈ ΠΎΠ½ мСня изрядно «затянул». ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, экономия памяти (дисковой ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ) ΠΈ погоня Π·Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Π² Ρ‚Π΅ DOS-овскиС Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π΄Π°Π»Ρ‘ΠΊΠΈΡ… 90-Ρ… Π³ΠΎΠ΄ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚Π΅ΠΌΠ°ΠΌΠΈ, Ρ‡Π΅ΠΌ сСйчас.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… (ΠΈ это Π±ΠΎΠ»Π΅Π΅ сущСствСнно), Π½Π° ассСмблСрС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° языках высокого уровня (Π―Π’Π£, Π½Π΅ ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ с Java) нСльзя, Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ Ρ‚Π°ΠΊ эффСктивно. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Но с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 2-Ρ… дСсятков Π»Π΅Ρ‚, ΠΈ сСйчас экономия памяти (особСнно дисковой) Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°, Π΄Π° ΠΈ скорости соврСмСнных процСссоров для выполнСния повсСднСвных Π·Π°Π΄Π°Ρ‡ Π²ΠΏΠΎΠ»Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ (ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ языков свСрхвысокого уровня ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ это, хотя Π·Π°ΠΊΠΎΠ½ Π’ΠΈΡ€Ρ‚Π° Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ отмСнял). А соврСмСнныС компиляторы Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ скорости Π΄Π°ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ программиста Π² ассСмблСрС, вСдь исходники Π½Π° Π½Ρ‘ΠΌ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡŠΡ‘ΠΌΠ½Ρ‹Π΅ ΠΈ слоТныС, Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ трСбуСтся большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ внимания (Π² Ρ‚.Ρ‡. Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ)?

Π’ΠΎΠ½ ΠΎΠ½ΠΎ Ρ‡Ρ‚ΠΎ!

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ свои Π΄ΠΎΠ²ΠΎΠ΄Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆ ассСмблСр.

АссСмблСр Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ большСй Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, Ρ‡Π΅ΠΌ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык программирования (Π΄Π°ΠΆΠ΅ C/C++). На асмС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, размСщая Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ Π½Π°ΠΌ вздумаСтся. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Π°ΠΉΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΅Π³ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. Π‘Π΅Π· лишнСго runtime-ΠΊΠΎΠ΄Π° стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠŸΡ€Π°Π²Π΄Π°, справСдливости Ρ€Π°Π΄ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² этом ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ лишь Π² вСсьма спСцифичСских случаях. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ рСсурсами, Π³Π΄Π΅ оптимизация ΠΊΠΎΠ΄Π° Π²Π°ΠΆΠ½Π° ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° ΠΈ Π² наши Π΄Π½ΠΈ.

На ассСмблСрС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ВБЁ, ΠΎΠ½ всСмогущ! Вряд Π»ΠΈ Ρƒ вас получится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ MBR-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° C ΠΈΠ»ΠΈ Π½Π° Ρ‡Ρ‘ΠΌ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, программирования чипсСтов Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ассСмблСр. Для внСдрСния ΠΊΠΎΠ΄Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ процСссы (injection, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с врСдоносными цСлями), создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π½Ρ‚ΠΈΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠ² Ρ‚ΠΎΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ассСмблСр. Или, скаТСм, для продСлывания Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого. Для C/C++ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ интринсики – Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… инструкций процСссора (Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ для Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования – Π½Π΅ знаю, Π½Π΅ встрСчал). Но ΠΈΡ… частоС использованиС Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΊΠΎΠ΄ (Π½Π΅ ΠΏΡ€ΠΎΡ‰Π΅ Π»ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° чистом ассСмблСрС?) А ΠΈΡ… отсутствиС Π½Π΅ позволяСт Π½Π°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ компилятором ΠΊΠΎΠ΄ (ΠΏΡ€ΠΈ этом, ΠΊ слову говоря, Visual C/C++, GNU C/C++ ΠΈ Clang Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΉ ΠΊΠΎΠ΄; ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ компилятор с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ настройками выдаст Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ΄Π½Π° строка ΠΊΠΎΠ΄Π° Π½Π° Π―Π’Π£ разворачиваСтся Π² нСсколько (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ дСсяток) инструкций процСссора. А Π·Π½Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ инструкции процСссора Intel Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ нСсколько строк для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π―Π’Π£ (Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ C/C++, Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интринсики)? Если Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, просто ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π° слово, Π° я, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΠΈΡˆΡƒ ΠΎΠ± этом Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… статСй. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ лишь ΠΎΠ΄ΠΈΠ½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π°Π½Π°Π»ΠΎΠ³ΠΈ инструкций rol, ror (ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΅Ρ‰Ρ‘ Π² самых Ρ€Π°Π½Π½ΠΈΡ… процСссорах i8086 с ΠΊΠΎΠ½Ρ†Π° 70-Ρ… Π³ΠΎΠ΄ΠΎΠ²) появились Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стандартС C++20 Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ bit (ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ std::rotl, std::rotr), Π° Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ искусства: дСмосцСна. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ intro, умСстив исполняСмый Ρ„Π°ΠΉΠ» Π² 256 Π±Π°ΠΉΡ‚ [1, 2, 3, 4] (Π° Ρ‚ΠΎ ΠΈ 128, 64, 32 ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΅Ρ‰Ρ‘ мСньшС) Π½Π° Ρ‡Ρ‘ΠΌ-Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΡ‚ ассСмблСра (Π½Ρƒ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π±Π΅Π· использования ассСмблСра для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π°) Π²Ρ‹ вряд Π»ΠΈ смоТСтС.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° интСрСсная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния ассСмблСра – созданиС Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, fasm позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° virtual), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ сгСнСрированный ΠΊΠΎΠ΄ (Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ load, store). Π•ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ AES-ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ².

Π‘Π΅Π· ассСмблСра Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΡ€ΠΈ исслСдовании (reverse engineering), Π° Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’ ассСмблСрС Π΅ΡΡ‚ΡŒ особая магия ΠΈ ΠΏΡ€ΠΈΡ‚ΡΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ! Но справСдливости Ρ€Π°Π΄ΠΈ скаТу, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ всСгда Π½Π° ассСмблСрС – занятиС Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, усилий, вСроятности Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ кроссплатформСнности (я сам Ρ€Π΅ΠΆΠ΅ ΠΏΠΈΡˆΡƒ Π½Π° ассСмблСрС, Π½Π΅ΠΆΠ΅Π»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках). НС Ρ‚Π°ΠΊ часто Π½Π°ΠΌ трСбуСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡΡ‚ΠΎΠ»ΡŒ ΡƒΠΆ Тёсткая оптимизация, ΠΊΠΎΠ³Π΄Π° экономия ΠΏΠ°Ρ€Ρ‹ Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора ΠΈΠΌΠ΅Π΅Ρ‚ критичСски Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

На Ρ‚ΠΎΠΌ ΠΆΠ΅ C/C++ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ практичСски всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π½Π° ассСмблСрС, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ сразу ΠΏΠΎΠ΄ дСсяток ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ ОБ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ опциями компилятора использованиС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² инструкций, Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€.

Но ΠΈΠ½ΠΎΠ³Π΄Π° использованиС ассСмблСра Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€). Часто ассСмблСр Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ вставок Π² ΠΊΠΎΠ΄ Π½Π° Π―Π’Π£ (посмотритС RTL-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Delphi, Ρ‚Π°ΠΌ этого Π΄ΠΎΠ±Ρ€Π° Π² ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠΈ). Π”Π° ΠΈ использованиС интринсиков, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ опасно) Π±Π΅Π· знания ассСмблСра.

ΠŸΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠΌβ€¦

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ассСмблСр.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ², ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ устройств (ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… ПК, встраиваСмых систСм), элСмСнтов ядра ОБ.

НизкоуровнСвая Ρ€Π°Π±ΠΎΡ‚Π° с ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ, Π² Ρ‚.Ρ‡. с процСссором, ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² процСссы (injection), ΠΊΠ°ΠΊ с врСдоносной Ρ†Π΅Π»ΡŒΡŽ, Ρ‚Π°ΠΊ ΠΈ с Ρ†Π΅Π»ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈΠ»ΠΈ добавлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°. БистСмный софт.

Π‘Π»ΠΎΠΊΠΈ распаковки, Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° (с Ρ†Π΅Π»ΡŒΡŽ измСнСния повСдСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, добавлСния Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Π·Π»ΠΎΠΌΠ° Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ), встраиваСмыС Π² исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ (см. UPX, ASProtect ΠΈ ΠΏΡ€).

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠΎ скорости, Π² Ρ‚.Ρ‡. вСкторизация (SSE, AVX, FMA), матСматичСскиС вычислСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ°, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚. НапримСр, Π² дСмосцСнС.

Вставки Π² языки высокого уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΡ€ΠΈ создании компиляторов ΠΈ трансляторов исходного ΠΊΠΎΠ΄Π° с ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ языка Π½Π° язык ассСмблСра (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ компиляторы C/C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ). ΠŸΡ€ΠΈ создании ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ², дизассСмблСров.

БобствСнно, ΠΎΡ‚Π»Π°Π΄ΠΊΠ°, дизассСмблированиС, исслСдованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (reverse engineering).

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π’Ρ‹ Π½Π΅ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅, Π½ΠΎ ассСмблСр ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для написания ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ПО (консольного ΠΈΠ»ΠΈ с графичСским интСрфСйсом – GUI), ΠΈΠ³Ρ€, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ πŸ™‚

Π‘Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ?

Π’Π°ΠΊ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ассСмблСр соврСмСнному программисту? Если Π²Ρ‹ ΡƒΠΆΠ΅ Π½Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈ Ρƒ вас ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ Π°ΠΌΠ±ΠΈΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ассСмблСра, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ функционирования ΠΆΠ΅Π»Π΅Π·Π° (особСнно процСссоров, памяти), Π° Ρ‚Π°ΠΊΠΆΠ΅ использованиС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… инструмСнтов для дизассСмблирования, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ эффСктивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜Π½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ слоТно Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» любимого компилятора (хотя Π±Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ…), ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° любом языкС программирования ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ стоит ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ слишком Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π² эту Ρ‚Π΅ΠΌΡƒ, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° Python ΠΈΠ»ΠΈ JavaScript. А Π²ΠΎΡ‚ Ссли ваш язык – C ΠΈΠ»ΠΈ C++, Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π½ΡŒΠΊΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ассСмблСр Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.

ВмСстС с Ρ‚Π΅ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Β«Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠ΅Β», Π½ΠΎ ΠΈ ΠΎ «стратСгии» написания ΠΊΠΎΠ΄Π°, поэтому Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ (ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ΅Π½ для создания эффСктивных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π΅ΠΆΠ΅Π»ΠΈ низкоуровнСвая оптимизация), ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… программист Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сСбя соврСмСнным.

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ

Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ассСмблСр ΠΈ ΠΎΠΊΡƒΠ½ΡƒΡ‚ΡŒΡΡ Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°:

Π—ΡƒΠ±ΠΊΠΎΠ² Π‘.Π’. Assembler для DOS, Windows ΠΈ Unix. – Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2017. – 638 c., ISBN 978–5–97060–535–6.

Руслан Аблязов. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ассСмблСрС Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ x86–64. – Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2016. – 302 с., ISBN 978–5–97060–364–2.

Π‘Ρ‚Π°Ρ‚ΡŒΠΈ старого WASM’а – кладСзь ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π½Π° самыС Ρ€Π°Π·Π½Ρ‹Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ (ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ!)
Новый WASM (Ρ„ΠΎΡ€ΡƒΠΌ ΠΏΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ сборник статСй).

Книги ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠšΡ€ΠΈΡΠ° ΠšΠ°ΡΠΏΠ΅Ρ€ΡΠΊΠΈ (ΠΌΠ½ΠΎΠ³ΠΎ).

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация AMD (мноТСство Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) [всё Π½Π° английском, PDF].

АрхитСктура ΠΈ систСма ΠΊΠΎΠΌΠ°Π½Π΄ микропроцСссоров x86 (староватая докумСнтация Π½Π° русском языкС; ΠΈΠ· описания Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ x87, MMX, 3DNow! ΠΈ SSE(1)).

ΠœΠ°Ρ€ΠΊ Руссинович, Дэвид Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½, АлСкс Π˜ΠΎΠ½Π΅ΡΠΊΡƒ. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство Microsoft Windows. – 6-Π΅ ΠΈΠ·Π΄., Ρ‡Π°ΡΡ‚ΡŒ 1. – ΠŸΠΈΡ‚Π΅Ρ€, 2013. – 800 с., ISBN 978–5–496–00434–3, 978–5–459–01730–4 (Π°Π½Π³Π».: 978–0735648739).
Π’Ρ‹ΡˆΠ»ΠΎ 7-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ этой части с Павлом ЙосифовичСм Π² качСствС Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ соавтора – ΠŸΠΈΡ‚Π΅Ρ€, 2018 – 944 с., ISBN 978–5–4461–0663–9 (Π°Π½Π³Π».: 978–3864905384).

ΠœΠ°Ρ€ΠΊ Руссинович, Дэвид Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½, АлСкс Π˜ΠΎΠ½Π΅ΡΠΊΡƒ. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство Microsoft Windows. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ подсистСмы ОБ. – 6-Π΅ ΠΈΠ·Π΄., Ρ‡Π°ΡΡ‚ΡŒ 2. – ΠŸΠΈΡ‚Π΅Ρ€, 2014. – 672 с., ISBN 978–5–496–00791–7 (Π°Π½Π³Π».: 978–0735665873).
7-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ этой части Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° английском языкС (ISBN 978–0135462409).

Π”ΠΆΠ΅Ρ„Ρ„Ρ€ΠΈ Π ΠΈΡ…Ρ‚Π΅Ρ€. Windows для профСссионалов. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ эффСктивных Win32-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ спСцифики 64-разрядной вСрсии Windows. – 4-Π΅ ΠΈΠ·Π΄. – ΠŸΠΈΡ‚Π΅Ρ€, Русская рСдакция, 2001. – 752 с. (Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ½ΠΈΠ³ΠΈ 2008 Π³. Π½Π° 720 с., Π½ΠΎ ΠΎΠ½Π° Ρ‚ΠΎΠΆΠ΅ 4-Π³ΠΎ издания, с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ 2000 года… Π² Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π°?), ISBN 5–272–00384–5, 978–5–7502–0360–4 (Π°Π½Π³Π».: 1–57231–996–8).

Π”ΠΆΠ΅Ρ„Ρ„Ρ€ΠΈ Π ΠΈΡ…Ρ‚Π΅Ρ€, ΠšΡ€ΠΈΡΡ‚ΠΎΡ„ Назар. Windows via C&C++. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° языкС Visual C++ – 5-Π΅ ΠΈΠ·Π΄. – ΠŸΠΈΡ‚Π΅Ρ€, 2009 – 896 с., ISBN 978–5–388–00205–1, 978–5–7502–0367–3, 978–0–7356–2424–5 (Π°Π½Π³Π».: 978–0735624245).

ПавСл Йосифович. Π Π°Π±ΠΎΡ‚Π° с ядром Windows. – ΠŸΠΈΡ‚Π΅Ρ€, 2021 – 400 c., ISBN 978–5–4461–1680–5 (Π°Π½Π³Π».: 978-1977593375).

Pavel Yosifovich. Windows 10 System Programming, Part 1 – 2020, ISBN 979-8634170381 [Π°Π½Π³Π»].

ΠœΠΈΡ…Π°ΠΈΠ» Π“ΡƒΠΊ. АппаратныС срСдства IBM PC. ЭнциклопСдия. – 3-Π΅ ΠΈΠ·Π΄. – ΠŸΠΈΡ‚Π΅Ρ€, 2008. – 1072 с., ISBN 978–5–46901–182–8 (2001 Π³. – 816 с., ISBN 5–88782–290–2).

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ ΠšΡƒΠ»Π°ΠΊΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ справочник (+ дискСта). – 2-Π΅ ΠΈΠ·Π΄. – ΠŸΠΈΡ‚Π΅Ρ€, 2003. – 848 с., ISBN 5–94723–487–4.

ВсСволод НСсвиТский. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств Π² Windows (+ CD-ROM). – 2-Π΅ ΠΈΠ·Π΄. – Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2008. – 528 с., ISBN 978–5–9775–0263–4.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΈ инструмСнты:

MASM32 (Macro Assembler) – Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, самый популярный ΠΏΠ°ΠΊΠ΅Ρ‚ самого популярного ассСмблСра.
MASM64 includes and libs – Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для 64-Π±ΠΈΡ‚Π½ΠΎΠΉ вСрсии MASM (информация); Ρ„Π°ΠΉΠ»Ρ‹ ml64.exe, link.exe ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΏΠΎΡ‚Ρ€ΠΎΡ…Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΈΠ· Visual Studio (ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\bin\Hostx64\x64\).

fasm (flat assembler) – соврСмСнный ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ компилятор ΠΏΠΎΠ΄ DOS, Wndows, Linux с ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·Π²ΠΈΡ‚ΠΎΠΉ систСмой макросов ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ инструкций Intel/AMD. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π² качСствС основного!
Π’Π°ΠΌ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ fasmg (flat assembler g) – ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ассСмблСр ΠΏΠΎΠ΄ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ (ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ include-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для создания ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ AVR, i8051, x86/x64, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° JVM, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свои ΠΌΠΎΠ΄ΡƒΠ»ΠΈ).

NASM (Netwide Assembler) – Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ соврСмСнный кроссплатформСнный компилятор с Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ макросистСмой ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ инструкций Intel/AMD, популярСн Π² Π·Π°Ρ€ΡƒΠ±Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ Linux/BSD.
NASMX – ΠΏΠ°ΠΊΠ΅Ρ‚ макросов, include’ов, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для NASM ΠΏΠΎΠ΄ Windows, Linux, BSD, Xbox; Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ макрос invoke, символы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с OpenGL ΠΈ ΠΏΡ€.

UASM (ΠΎΠ½ ΠΆΠ΅ HJWasm) – соврСмСнный MASM-совмСстимый ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ ассСмблСр с ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ инструкций Intel/AMD.

TASM 5.x (Turbo Assembler) – старый, Π½ΠΎ всё Π΅Ρ‰Ρ‘ популярный ассСмблСр, Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ΄ DOS.

ALINK, GoLink – ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΈ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ΄ DOS ΠΈ Windows.

objconv – ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (COFF/OMF/ELF/Mach-O).

ResEd – бСсплатный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов.

GoRC – компилятор рСсурсов (rc β†’ res) [Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΌ NASMX Π΅ΡΡ‚ΡŒ ΠΈ GoLink, ΠΈ objconv, ΠΈ GoRC].

Windows 10 Software Development Kit (SDK) – Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, инструмСнты (Π² Ρ‚ΠΎΠΌ числС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ WinDbg) для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Windows.

Fresh IDE – Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для fasm.

SASM – простая кроссплатформСнная срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для NASM, MASM, GAS, fasm с подсвСткой синтаксиса ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ (для NASM имССтся Π½Π°Π±ΠΎΡ€ макросов для упрощСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с консолью).

OllyDbg – популярный 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ (готовится 64-битная вСрсия, Π½ΠΎ ΠΏΠΎΠΊΠ° Π΅Ρ‰Ρ‘ Π½Π΅ Π²Ρ‹ΡˆΠ»Π°).

x64dbg – Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ для 32- ΠΈ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

IDA Pro – ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ дизассСмблСр (shareware).

VMware Workstation Player – ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (бСсплатный для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования).

Oracle VirtualBox – Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ бСсплатный Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€.

Bochs – эмулятор ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° IBM PC.

QEMU – эмулятор Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ (QEMU Manager).

Intel Software Development Emulator (SDE) – эмулятор Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ (инструкций) процСссоров Intel.

DOSBox – ΠΎΡ‡Π΅Π½ΡŒ популярный эмулятор ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ΄ DOS (ΠΈΠΌΠ΅Π΅Ρ‚ встроСнный Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒ скорости).

Hiew – Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² со встроСнным дизассСмблСром, просмотром ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (shareware).

PE Explorer – Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ сСкций, рСсурсов PE, дизассСмблСр (shareware).

Windows Sysinternals – Π½Π°Π±ΠΎΡ€ систСмных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для Windows (Ρ€Π°Π±ΠΎΡ‚Π° с процСссами, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅).

ReactOS – бСсплатная Windows-совмСстимая опСрационная систСма с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ.

KolibriOS – ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½Π°Ρ ОБ, ΡƒΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°ΡΡΡ Π½Π° дискСту 1.44 Mb, с исходниками Π½Π° fasm.

ВсС эти ссылки (Π° Ρ‚Π°ΠΊΠΆΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ вошли Π² эту ΡΡ‚Π°Ρ‚ΡŒΡŽ) Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ, ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ² сюда.

Π’Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΈΠ³Π»Π°ΡΠΈΡ‚ΡŒ вас Π² наш ΡƒΡŽΡ‚Π½Ρ‹ΠΉ Β«Π»Π°ΠΌΠΏΠΎΠ²Ρ‹ΠΉΒ» Ρ€Π°Π·Π΄Π΅Π» Assembler Π€ΠΎΡ€ΡƒΠΌΠ° Π½Π° Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ….Π Ρƒ πŸ˜‰

ΠšΡ‚ΠΎ интСрСсуСтся дСмосцСной ΠΈ сайзкодингом, welcome here.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС Π² 2018 Π³ΠΎΠ΄Ρƒ

Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС

Π‘Ρ‚Π°Ρ‚ΡŒΡ посвящСна языку ассСмблСр с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Ρ‹ прСимущСства ΠΈ отличия ΠΎΡ‚ Π―Π’Π£, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ нСбольшоС сравнСниС компиляторов, скрупулёзно собрано Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство Π»ΡƒΡ‡ΡˆΠ΅ΠΉ тСматичСской Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹.

1. Π―Π·Ρ‹ΠΊ. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΈ отличия ΠΎΡ‚ Π―Π’Π£

АссСмблСр (Assembly) β€” язык программирования, понятия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ элСктронно-Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π―Π·Ρ‹ΠΊ ассСмблСра β€” символьная Ρ„ΠΎΡ€ΠΌΠ° записи машинного ΠΊΠΎΠ΄Π°, использованиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ написаниС ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Для ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π­Π’Πœ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ языки ассСмблСра. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ языков высокого уровня абстракции, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² скрыты ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², язык ассСмблСра тСсно связан с систСмой ΠΊΠΎΠΌΠ°Π½Π΄ микропроцСссора. Для идСального микропроцСссора, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ систСма ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствуСт языку программирования, ассСмблСр Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ языка. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… микропроцСссоров ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколько ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° языка.

Π―Π·Ρ‹ΠΊ ассСмблСра обСспСчиваСт доступ ΠΊ рСгистрам, ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² адрСсации ΠΈ описаниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ процСссора. Π―Π·Ρ‹ΠΊ ассСмблСра ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ срСдства Π±ΠΎΠ»Π΅Π΅ высокого уровня абстракции: встроСнныС ΠΈ опрСдСляСмыС ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ нСскольким ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, автоматичСский Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², срСдства описания структур Π΄Π°Π½Π½Ρ‹Ρ…. Π“Π»Π°Π²Π½ΠΎΠ΅ достоинство языка ассСмблСра β€” Β«ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΒ» ΠΊ процСссору, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся основой ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ программистом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π° Π³Π»Π°Π²Π½Ρ‹ΠΌ нСудобством β€” слишком ΠΌΠ΅Π»ΠΊΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ воспринимаСтся с Ρ‚Ρ€ΡƒΠ΄ΠΎΠΌ. Однако язык ассСмблСра Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большСй стСпСни ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ само Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Ρ‡Π΅ΠΌ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ языки.

И хотя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы сСйчас ΠΏΠΈΡˆΡƒΡ‚ Π½Π° Π‘ΠΈ, Π½ΠΎ Π‘ΠΈ ΠΏΡ€ΠΈ всСх Π΅Π³ΠΎ достоинствах β€” язык высокого уровня абстракции, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ программиста Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ тонкости ΠΈ Π½ΡŽΠ°Π½ΡΡ‹ ΠΆΠ΅Π»Π΅Π·Π°, Π° ассСмблСр β€” язык Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня абстракции, прямо ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ всС эти тонкости ΠΈ Π½ΡŽΠ°Π½ΡΡ‹.

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ использования ассСмблСра Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ сразу Ρ‚Ρ€ΠΈ Π²Π΅Ρ‰ΠΈ:

ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΏΠΎ возмоТности быстро ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ°Π»Ρ‹ΠΉ объСм памяти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅Π΅ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ; Π΅Π΅ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ; Π΅Π΅ созданиС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… расходов. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ язык ассСмблСра Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ характСристик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ позволяли ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ числу пСрСчислСнных качСств.

На языкС ассСмблСра ΠΏΠΈΡˆΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° критичСски Π²Π°ΠΆΠ½Ρ‹:

Π―Π·Ρ‹ΠΊΠΈ программирования высокого уровня абстракции Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ с Ρ†Π΅Π»ΡŒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ большСго приблиТСния способа записи ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ записи, Π² частности матСматичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… спСцифичСскиС тСхничСскиС особСнности ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ². Π―Π·Ρ‹ΠΊ ассСмблСра разрабатываСтся с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ спСцифики процСссора, поэтому для Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ³ΠΎ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС ассСмблСра трСбуСтся, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Π·Π½Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ процСссора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Однако, имСя Π² Π²ΠΈΠ΄Ρƒ прСимущСствСнноС распространСниС PC-совмСстимых ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Π½ΠΈΡ…, ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π·Π°Π±ΠΎΡ‚Ρ‹ Π±Π΅Ρ€ΡƒΡ‚ Π½Π° сСбя Ρ„ΠΈΡ€ΠΌΡ‹-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ спСциализированного ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

2. О компиляторах

Какой ассСмблСр Π»ΡƒΡ‡ΡˆΠ΅?

Для процСссора x86-x64, имССтся Π±ΠΎΠ»Π΅Π΅ дСсятка Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ассСмблСр компиляторов. Они ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ синтаксисом. НСкоторыС компиляторы большС подходят для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ― для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… программистов. НСкоторыС компиляторы достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… компиляторов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ мноТСством ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² программирования. Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ассСмблСров написаны ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ пособия ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся синтаксис, Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ. Какой ассСмблСр Π»ΡƒΡ‡ΡˆΠ΅?

Учитывая мноТСство Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠ² ассСмблСров для x86-x64 ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для ΠΈΡ… изучСния, ограничимся ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΎΠ±Π·ΠΎΡ€ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… компиляторов: MASM, TASM, NASM, FASM, GoASM, Gas, RosAsm, HLA.

ΠšΠ°ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Π²Ρ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π­Ρ‚ΠΎ вопрос, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π‘Π°ΠΌΡ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ассСмблСр Π½Π΅ принСсСт Π²Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹, Ссли ΠΎΠ½ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ΄ Ρ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

WindowsDOSLinuxBSDQNXMacOS, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π°
процСссорС Intel/AMD
FASMxxxx
GASxxxxxx
GoAsmx
HLAxx
MASMxx
NASMxxxxxx
RosAsmx
TASMxx

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° 16 Π±ΠΈΡ‚

Если ассСмблСр ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ DOS, Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈ 16-разрядныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ВсС ассСмблСры ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 16-разрядныС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. 16-разрядная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΊΠΎΠ΄Π°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π² 16-разрядной сСгмСнтированной ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти (ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с 32-разрядной модСлью с плоской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ соврСмСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм).

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° 64 Π±ΠΈΡ‚

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ TASM, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ„ΠΈΡ€ΠΌΠ° Borland ΠΎΡ…Π»Π°Π΄Π΅Π»Π° Π² сСрСдинС Π½ΡƒΠ»Π΅Π²Ρ‹Ρ…, ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС Π΄Π°ΠΆΠ΅ 32-разрядныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ 64-разрядных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ассСмблСрС x86-x64, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускался Π±Ρ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ процСссорС. Однако, Π΄Π°ΠΆΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ процСссорС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ пСрСносимости. НапримСр, Ссли Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСрС ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами. NASM ΠΈ FASM ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ассСмблСрС ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ΄Π½ΠΎΠΉ ОБ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ с «пСрСкомпиляциСй» исходного ΠΊΠΎΠ΄Π°? Π­Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ HLA. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния Windows ΠΈ Linux Π½Π° ассСмблСрС с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями для этого? Π₯отя, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ОБ, Ρ‚ΠΎΠ³Π΄Π° эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° вас Π½Π΅ касаСтся.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° высокоуровнСвых языковых конструкций

НСкоторыС ассСмблСры ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт языковыС высокоуровнСвыС структуры управлСния (Ρ‚ΠΈΠΏΠ° IF, WHILE, FOR ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅). Π’Π°ΠΊΠΈΠ΅ конструкции ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ассСмблСру ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ассСмблСры встроСны «высокоуровнСвыС конструкции» с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ возмоТностями. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ высокоуровнСвыС конструкции Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ макросов.

Никакой ассСмблСр Π½Π΅ заставляСт вас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ структуры управлСния ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… высокого уровня, Ссли Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄. ВысокоуровнСвыС конструкции ― это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ машинного языка, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈΡ… ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ.

ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

Удобство использования ассСмблСра Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связано с качСством Π΅Π³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Учитывая объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ тратится для создания Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° ассСмблСра, созданиСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для этого Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° Π°Π²Ρ‚ΠΎΡ€Ρ‹ компиляторов практичСски Π½Π΅ Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Авторы, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ свой язык, Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ описываСтся качСство справочного руководства ассСмблСра, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прилагаСтся ΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ:

Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΈ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

ДокумСнтация Π½Π° самом ассСмблСрС, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π°. Π•Ρ‰Π΅ больший интСрСс для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… язык ассСмблСра (ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности Π΄Π°Π½Π½ΠΎΠ³ΠΎ ассСмблСра), ― это Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ справочного руководства для языка. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй хотят, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ассСмблСрС, Π½Π΅ просто прСдоставляСт синтаксис ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ эти инструкции для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

MASM являСтся Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ срСди ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ объСма ΠΊΠ½ΠΈΠ³, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ…, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° этом Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅. Π•ΡΡ‚ΡŒ дСсятки ΠΊΠ½ΠΈΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ MASM Π² качСствС своСго ассСмблСра для обучСния ассСмблСру.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠ² ΠΏΠΎ ассСмблСру MASM/TASM ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄ MS-DOS. Π₯отя постСпСнно ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π² Windows ΠΈ Linux.

3. Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΈ Π²Π΅Π± рСсурсы

Beginners

Advanced

4. ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ассСмблСр ΠΈ с Ρ‡Π΅ΠΌ Π΅Π³ΠΎ Сдят. Π’Ρ‹ запаслись ΠΏΠ°Ρ€ΠΎΠΉ/Ρ‚Ρ€ΠΎΠΉΠΊΠΎΠΉ ΠΊΠ½ΠΈΠ³ ΠΈ Π²Π΅Π± ΠΌΠ°Π½ΡƒΠ°Π»Π°ΠΌΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ ΠΈ с компилятором… К соТалСнию ΡƒΡ€ΠΎΠΊΠΈ программирования выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½ΠΎ для Ρ‚Π΅Ρ… Ρ‡Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΏΠ°Π» Π½Π° MASM/FASM ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ:

Π–Π΅Π»Π°Π΅ΠΌ Π²Π°ΠΌ, Π΄Ρ€ΡƒΠ·ΡŒΡ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… достиТСний ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ Π² 2018 Π³ΠΎΠ΄Ρƒ!

Π‘ ΡƒΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
ΠœΠΈΡ…Π°ΠΈΠ» Π‘ΠΌΠΎΠ»Π΅Π½Ρ†Π΅Π² MiklIrk (Π˜Ρ€ΠΊΡƒΡ‚ΡΠΊΠΈΠΉ государствСнный унивСрситСт ΠΏΡƒΡ‚Π΅ΠΉ сообщСния),
АлСксСй Π“Ρ€ΠΈΡ†Π΅Π½ΠΊΠΎ expressrus (Донской государствСнный тСхничСский унивСрситСт).

Ps1: Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ, Π₯Π°Π±Ρ€Π°Ρ…Π°Π±Ρ€! Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ваш Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ подсвСтку ассСмблСра (Intel-синтаксис), это пригодится для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… статСй!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *