написаниС ΠΊΠΎΠ΄Π° Π½Π° ассСмблСрС

Как ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС Π² 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-синтаксис), это пригодится для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… статСй!

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

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

НСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ мноТСства языков Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ стСпСни высокоуровнСвости, сСгодня ассСмблСр Π½Π΅ потСрял своСй Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π² индСксС TIOBE находится Π½Π° ΠΏΠΎΡ‡Ρ‘Ρ‚Π½ΠΎΠΌ 10-ΠΎΠΌ мСстС (Π½Π° Ρ„Π΅Π²Ρ€Π°Π»ΡŒ 2021), ΠΎΠ±ΠΎΠ³Π½Π°Π² Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π½Ρ‹Π΅ языки ΠΊΠ°ΠΊ Go ΠΈ Rust. Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ – Π² простотС ΠΈ максимальной близости ΠΊ ΠΆΠ΅Π»Π΅Π·Ρƒ; с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ассСмблСрС всё Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ искусство ΠΈ Π΄Π°Ρ‘Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ особыС эмоции.

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

Однако ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ассСмблСрС β€” Π½Π΅ просто Π΄ΠΎΠ»Π³ΠΎ, ΠΌΡƒΡ‚ΠΎΡ€Π½ΠΎ ΠΈ слоТно β€” Π½ΠΎ Π΅Ρ‰Ρ‘ ΠΈ нСсколько Π³Π»ΡƒΠΏΠΎ β€” вСдь высокоуровнСвыС абстракции для Ρ‚ΠΎΠ³ΠΎ ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСсс программирования. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‡Π°Ρ‰Π΅ всСго Π½Π° ассСмблСрС ΠΏΠΈΡˆΡƒΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятыС Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· языков Π±ΠΎΠ»Π΅Π΅ высокого уровня, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ с++ ΠΈ c#.

ΠŸΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΊΠ° синтаксиса

B Visual Studio Π½Π΅Ρ‚ встроСнной подсвСтки синтаксиса для ассСмблСра ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… достиТСний соврСмСнного IDE-строСния; Π½ΠΎ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сторонних Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ.

AsmHighlighter β€” историчСски ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ ΠΈ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ β€” ΠΎΡ‚ΡΡƒΡ‚ΡΠ²ΡƒΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ AVX, Π½ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· стандартных, Π² частности fsqrt. ИмСнно этот Ρ„Π°ΠΊΡ‚ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΠ» ΠΊ написанию собствСнного Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ β€”

ASM Advanced Editor. Π’ Π½Ρ‘ΠΌ, ΠΏΠΎΠΌΠΈΠΌΠΎ подсвСтки ΠΈ сворачивания участков ΠΊΠΎΠ΄Π° (с использованиСм ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² «;[«, «;[+» ΠΈ «;]») Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° привязка подсказок ΠΊ рСгистрам, Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ навСдСнию курсора Π½ΠΈΠΆΠ΅ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ (Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ). Выглядит это Ρ‚Π°ΠΊ:

Подсказки Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ скорСС Π² ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ – оказалось, Ρ‡Ρ‚ΠΎ для ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ наполнСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ потрСбуСтся большС, Ρ‡Π΅ΠΌ Π½Π° написаниС самого Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Π’Π°ΠΊΠΆΠ΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ рас/коммСнтирования Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка ΠΊΠΎΠ΄Π° пСрСстали Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° повСшСна Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ дСйствия выбираСтся автоматичСски.

Asm Dude β€” обнаруТился Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. Π’ Π½Ρ‘ΠΌ Π°Π²Ρ‚ΠΎΡ€ ΠΏΠΎΡˆΡ‘Π» Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΈ сфокусировал силы Π½Π° встроСнном справочникС ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ с отслСТиваниСм ΠΌΠ΅Ρ‚ΠΎΠΊ. Π‘Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ присутствуСт (ΠΏΠΎ Β«#region / #end regionΒ»), Π½ΠΎ привязки ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ рСгистрам Π²Ρ€ΠΎΠ΄Π΅ Π΅Ρ‰Ρ‘ Π½Π΅Ρ‚.

32 vs. 64

Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ появилась 64-битная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, стало Π½ΠΎΡ€ΠΌΠΎΠΉ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎ 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡ€Π° Π·Π°Π²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ с этим! Бколько ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΡΠ½ΡƒΡ‚ΡŒ лСгаси. Π­Ρ‚ΠΎ ΠΆΠ΅ касаСтся ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ β€” Π½Π°ΠΉΡ‚ΠΈ процСссор Π±Π΅Π· SSE2 ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π² ΠΌΡƒΠ·Π΅Π΅ – ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π±Π΅Π· SSE2 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния ΠΈ Π½Π΅ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Никакого ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΡ ΠΎΡ‚ программирования Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎ 4 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Волько 64 Π±ΠΈΡ‚/AVX, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€! Π₯отя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ взгляд β€” Π½ΠΎΠ²Ρ‹Π΅ процСссоры ΠΈ Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстро, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ стоит Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ старыС. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, всё зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ вовсС Π½Π΅ Π² Β«ΡˆΠΈΡ€ΠΎΠΊΠΈΡ…Β» рСгистрах – Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этих самых рСгистров стало Π² 2 Ρ€Π°Π·Π° большС – ΠΏΠΎ 16 ΡˆΡ‚ΡƒΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Ρ‚Π°ΠΊ ΠΈ XMM/YMM. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ ΠΈ позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ обращСния ΠΊ памяти.

Если Ρ€Π°Π½Π΅Π΅ Π±Π΅Π· FPU Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΡƒΠ΄Π°, Ρ‚.ΠΊ. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с вСщСствСнными числами оставляли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка, Ρ‚ΠΎ Π½Π° 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠ±ΠΌΠ΅Π½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΠΆΠ΅ Π±Π΅Π· Π΅Π³ΠΎ участия с использованиСм рСгистров xmm Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ SSE2. Intel Π² своих руководствах Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ FPU Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ SSE2. Однако Π΅ΡΡ‚ΡŒ нюанс: FPU позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ вычислСния с 80-Π±ΠΈΡ‚Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ β€” Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ критичСски Π²Π°ΠΆΠ½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° FPU Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ Π΄Π΅Π»Π°cь, ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ стоит. НапримСр, вычислСниС Π³ΠΈΠΏΠΎΡ‚Π΅Π½ΡƒΠ·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Β«Π² Π»ΠΎΠ±Β» Π±Π΅Π· опасСния пСрСполнСния,

Основная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ FPU β€” это Π΅Π³ΠΎ стСковая организация. Для упрощСния Π±Ρ‹Π»Π° написана нСбольшая ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΊΠ°, автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм стСка (ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ нСпосрСдствСнно Π² основноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для подсвСтки синтаксиса β€” Π½ΠΎ Π΄ΠΎ этого Ρ€ΡƒΠΊΠΈ Ρ‚Π°ΠΊ ΠΈ Π½Π΅ дошли)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π₯Π°Ρ€Ρ‚Π»ΠΈ

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ компиляторы с++ достаточно ΡƒΠΌΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ автоматичСски Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° простых Π·Π°Π΄Π°Ρ‡Π°Ρ… Ρ‚ΠΈΠΏΠ° суммирования чисСл Π² массивС ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², распознавая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π² ΠΊΠΎΠ΄Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ… Π½Π΅ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π΅ получится β€” Π° Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ваша супСр-оптимизированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сгСнСрировал компилятор. Но ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈΠ· этого Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ стоит β€” ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ становятся Ρ‡ΡƒΡ‚ΠΎΡ‡ΠΊΡƒ слоТнСС ΠΈ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π΅Π΅ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ β€” всё Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… компиляторов ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСсятикратный прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡƒΡ‚Ρ‘ΠΌ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² 2021 Π³ΠΎΠ΄Ρƒ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π΅Ρ‰Ρ‘ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π˜Ρ‚Π°ΠΊ, Π² качСствС Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ (ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ) прСобразования Π₯Π°Ρ€Ρ‚Π»ΠΈ:

Он Ρ‚Π°ΠΊΠΆΠ΅ достаточно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ для автоматичСской Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (убСдимся ΠΏΠΎΠ·ΠΆΠ΅), Π½ΠΎ Π΄Π°Ρ‘Ρ‚ Ρ‡ΡƒΡ‚ΡŒ большС пространства для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Ну Π° наш ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‚ΡƒΡ‚ Π½Π΅Ρ‚ Π½ΠΈ разворачивания Ρ†ΠΈΠΊΠ»Π°, Π½ΠΈ SSE/AVX, Π½ΠΈ косинусных Ρ‚Π°Π±Π»ΠΈΡ†, Π½ΠΈ сниТСния слоТности Π·Π° счёт «быстрого» Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСобразования. ЕдинствСнная явная оптимизация β€” это ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ вычислСниС синуса/косинуса Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° нСпосрСдствСнно Π² рСгистрах FPU.

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π°Π²Ρ‚ΠΎ-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° c++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ сильно Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ настроСк ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора ΠΈ Π²Ρ‹Π±ΠΎΡ€Π° допустимого Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° инструкций (SSE/AVX/etc). ΠŸΡ€ΠΈ этом Π΅ΡΡ‚ΡŒ Π΄Π²Π° нюанса:

Π˜Ρ‚Π°ΠΊ, компилятор Visual Studio 2019, цСлСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° AVX2, Floating Point Model=Precise. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ Π΅Ρ‰Ρ‘ интСрСснСС β€” Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° c# Π½Π° массивС ΠΈΠ· 10000 элСмСнтов:

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

C# ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ оказался ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ с++, Π° функция Π½Π° ассСмблСрС оказалась быстрСС Π² 9 Ρ€Π°Π·! Однако Π΅Ρ‰Ρ‘ Ρ€Π°Π½ΠΎ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ β€” установим Floating Point Model=Fast:

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

Как Π²ΠΈΠ΄Π½ΠΎ, это ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ отставаниС ΠΎΡ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ составило всСго лишь Π² 1.8 Ρ€Π°Π·. Но Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π½Π΅ измСнилось – Ρ‚Π°ΠΊ это ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ. Π§Ρ‚ΠΎ Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² 4 Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€Ρ‹ – Π° это Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ матСматичСских вычислСниях.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС наш Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ оказался ΠΈ быстрСС, ΠΈ Ρ‚ΠΎΡ‡Π½Π΅Π΅. Но Ρ‚Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ всСгда – ΠΈ выбирая FPU для хранСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΌΡ‹ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Π² возмоТности ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FPU ΠΈ SSE2 Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° это ΠΈΠΌΠ΅Π΅Ρ‚ смысл (Π² частности, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ я использовал Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ double-double Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² 10-ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ускорСниС ΠΏΡ€ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ).

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ оптимизация прСобразования Π₯Π°Ρ€Ρ‚Π»ΠΈ Π»Π΅ΠΆΠΈΡ‚ ΡƒΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ плоскости ΠΈ (для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π‘Π»ΡŽΡΡ‚Π΅ΠΉΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½ ΠΊ точности ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… вычислСний. Ну Π° этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π° GitHub, ΠΈ Π² качСствС бонуса Ρ‚Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для суммирования/ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ массивов Π½Π° FPU/SSE2/AVX.

Π§Ρ‚ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠΎ ассСмблСру Π½Π°Π²Π°Π»ΠΎΠΌ. Но ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… источников:
1. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация ΠΎΡ‚ Intel. НичСго лишнСго, Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ минимальна (ΠΊΠΎΠΈ Π² ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ повсСмСстно).
2. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация ΠΎΡ‚ Microsoft.
3. Онлайн справочник, спарсСнный ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
4. Π‘Π°ΠΉΡ‚ АгнСра Π€ΠΎΠ³Π°, ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½ΠΎΠ³ΠΎ экспСрта ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ содСрТит ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° C++ с использованиСм интринсиков.
5. SIMPLY FPU.
6. 40 Basic Practices in Assembly Language Programming.
7. ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для 64-разрядных вСрсий Windows.

Appendix: ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ просто Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интринсики (Intrinsics)?

Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹ интринсики, этот вопрос Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ассСмблСрС β€” вСдь ΠΎΠ½ΠΈ для Ρ‚ΠΎΠ³ΠΎ ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SIMD-инструкции Π±Π΅Π· нСобходимости программирования Π½Π° ассСмблСрС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅.

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

Руководство ΠΏΠΎ ассСмблСру x86 для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ напишСм с нуля ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ польской записи (RPN) Π½Π° чистом ассСмблСрС x86. Когда Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ, Ρ‚ΠΎ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊ:

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ для ΡΡ‚Π°Ρ‚ΡŒΠΈ здСсь. Он обильно Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚ ассСмблСр.

Начнём с написания Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Hello world! для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ настроСк срСды. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ, стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², стСковым ΠΊΠ°Π΄Ρ€Π°ΠΌ ΠΈ соглашСнию ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… x86. ΠŸΠΎΡ‚ΠΎΠΌ для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ напишСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ассСмблСрС x86 β€” ΠΈ Π½Π°Ρ‡Π½Ρ‘ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ RPN.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρƒ читатСля Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ программирования Π½Π° C ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ знания ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ рСгистр процСссора). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Linux, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Linux.

Настройка срСды

Как ΡƒΠΆΠ΅ сказано, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Linux (64- ΠΈΠ»ΠΈ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ). ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Windows ΠΈΠ»ΠΈ Mac OS X.

Π― Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ASCII.

Hello, world!

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ срСды сохранитС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ calc.asm :

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ структуру. Бписок рСгистров ΠΈ ΠΎΠ±Ρ‰ΠΈΡ… инструкций ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π² «РуководствС ΠΏΠΎ ассСмблСру x86 унивСрситСта Π’ΠΈΡ€Π΄ΠΆΠΈΠ½ΠΈΠΈΒ». ΠŸΡ€ΠΈ дальнСйшСм обсуТдСнии систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² это Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ понадобится.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ Ρ„Π°ΠΉΠ» ассСмблСра Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅Ρ‚ исполняСмый Ρ„Π°ΠΉΠ»:

ПослС запуска Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ:

Makefile

Π—Π°Ρ‚Π΅ΠΌ вмСсто Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… инструкций просто запускаСм make.

БистСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹

БистСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Linux ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ОБ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ для нас ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ дСйствия. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° систСмных Π²Ρ‹Π·ΠΎΠ²Π°: write() для записи строки Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ (Π² нашСм случаС это стандартноС устройство Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ стандартная ошибка) ΠΈ exit() для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

eaxebxecxedx
НомСр систСмного Π²Ρ‹Π·ΠΎΠ²Π°arg1arg2arg3

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

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

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² β€” структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится информация ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° собствСнный Ρ€Π°Π·Π΄Π΅Π» Π² стСкС β€” Β«Ρ„Ρ€Π΅ΠΉΠΌΒ». Он Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° (ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ послС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ).

Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ ΠΎΠ΄Π½Ρƒ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΡƒΡŽ Π²Π΅Ρ‰ΡŒ: стСк увСличиваСтся Π²Π½ΠΈΠ· ΠΏΠΎ памяти. Когда Π²Ρ‹ добавляСтС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° Π²Π΅Ρ€Ρ… стСка, ΠΎΠ½ΠΎ вставляСтся ΠΏΠΎ адрСсу памяти Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста стСка адрСс памяти Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части стСка ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, я Π±ΡƒΠ΄Ρƒ всё врСмя Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΎΠ± этом Ρ„Π°ΠΊΡ‚Π΅.

БоглашСниС ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x86

Π’ Ρ…86 Π½Π΅Ρ‚ встроСнного понятия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Π² высокоуровнСвых языках. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ call β€” это ΠΏΠΎ сути просто jmp ( goto ) Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ адрСс памяти. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ), Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ соглашСнию ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… (сущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΉ, Π½ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ CDECL, самоС популярноС соглашСниС для x86 срСди компиляторов Π‘ ΠΈ программистов Π½Π° ассСмблСрС). Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ рСгистры ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороны

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сторона Π΄ΠΎΠ»ΠΆΠ½Π°:

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π°:

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

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² послС шага 2:

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

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² послС шага 4:

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

На послСднСй Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда начинаСтся Π½Π° 4 Π±Π°ΠΉΡ‚Π° Π²Ρ‹ΡˆΠ΅ ebp с адрСса ebp-4 (здСсь Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ двигаСмся Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ стСку), Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда начинаСтся Π½Π° 8 Π±Π°ΠΉΡ‚ Π½ΠΈΠΆΠ΅ ebp с адрСса ebp+8 (слоТСниС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ двигаСмся Π²Π½ΠΈΠ· ΠΏΠΎ стСку). Если ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΈΠ· этой ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ c ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Когда функция Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ, Π½ΡƒΠΆΠ½ΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ eax Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ:

Π’Ρ…ΠΎΠ΄ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄

НаписаниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π—Π΄Π΅ΡΡŒ понадобится Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° функция _strlen для подсчёта Π΄Π»ΠΈΠ½Ρ‹ строки. На C ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, с самого Π½Π°Ρ‡Π°Π»Π° строки ΠΌΡ‹ добавляСм 1 ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа, ΠΊΡ€ΠΎΠΌΠ΅ нуля. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ассСмблСрС это Ρ‚ΠΎΠΆΠ΅ довольно просто: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±Π°Π·Ρƒ Ρ€Π°Π½Π΅Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ _subtract :

И посмотрим ΠΏΠ»ΠΎΠ΄Ρ‹ нашСй тяТёлой Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ β€œHello, world!”.

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡŒΡ‚Π΅, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π΅Ρ‚, Π½ΠΎ ΠΌΡ‹ рассмотрСли всС основныС Ρ‚Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ для написания Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ассСмблСрС x86! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ вСсь Π²Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈ тСория, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сосрСдоточимся Π½Π° ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания для написания нашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° RPN. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΠΈ Π΄Π°ΠΆΠ΅ станут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ сразу ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²ΠΎΡ‚ ΠΎΠ½Π°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ стСка

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ _push ΠΈ _pop :

Π’Ρ‹Π²ΠΎΠ΄ чисСл

На C ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ эти Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ это Π½Π° ассСмблСрС:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² _start β€” ΠΈ Π½Π° этом всё!

ВычислСниС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ польской записи

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, обратная польская запись вычисляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стСка. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ число заносится Π½Π° стСк, Π° ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ примСняСтся ΠΊ Π΄Π²ΡƒΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π½Π°Π²Π΅Ρ€Ρ…Ρƒ стСка.

НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ 84/3+6* (это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ 6384/+* ), процСсс выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π¨Π°Π³Π‘ΠΈΠΌΠ²ΠΎΠ»Π‘Ρ‚Π΅ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π‘Ρ‚Π΅ΠΊ послС
18[][8]
24[8][8, 4]
3/[8, 4][2]
43[2][2, 3]
5+[2, 3][5]
66[5][5, 6]
7*[5, 6][30]

Если Π½Π° Π²Ρ…ΠΎΠ΄Π΅ допустимоС постфиксноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ вычислСний Π½Π° стСкС остаётся лишь ΠΎΠ΄ΠΈΠ½ элСмСнт β€” это ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний. Π’ нашСм случаС число Ρ€Π°Π²Π½ΠΎ 30.

Π’ ассСмблСрС Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° C:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ.

И ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ! Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅ всСх своих Π΄Ρ€ΡƒΠ·Π΅ΠΉ, Ссли ΠΎΠ½ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ. НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ с большСй Ρ‚Π΅ΠΏΠ»ΠΎΡ‚ΠΎΠΉ ΠΎΡ‚Π½Π΅ΡΡ‘Ρ‚Π΅ΡΡŒ ΠΊ языкам высокого уровня, особСнно Ссли Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ старыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ писали ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ассСмблСрС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ RollerCoaster Tycoon!

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ здСсь. Бпасибо Π·Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅! ΠœΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, Ссли Π²Π°ΠΌ интСрСсно.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ дСйствия

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

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

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

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