Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Flat Assembler 1.64. ΠœΠ°Π½ΡƒΠ°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅Ρ€Π°Β»

Автор Tomasz Grysztar

FLAT ASSEMBLER 1.64

ΠœΠ°Π½ΡƒΠ°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅Ρ€Π°

Π“Π»Π°Π²Π° 1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π­Ρ‚Π° Π³Π»Π°Π²Π° содСрТит всю Π²Π°ΠΆΠ½Π΅ΠΉΡˆΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая понадобится Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ flat assembler. Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ программирования Π½Π° ассСмблСрС, Π²Π°ΠΌ достаточно ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ лишь ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π³Π»Π°Π²Ρƒ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм этого компилятора.

1.1 ΠžΠ±Π·ΠΎΡ€ компилятора

Flat assembler β€” это быстрый компилятор ассСмблСра для процСссоров с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Ρ…86, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ мноТСствСнныС ΠΏΡ€ΠΎΡ…ΠΎΠ΄Ρ‹ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сгСнСрированного машинного ΠΊΠΎΠ΄Π°. Он способСн ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам сСбя ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ вСрсии для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. ВсС вСрсии созданы для использования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмной ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ с Π½ΠΈΠΌΠΈ Π½Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹.

1.1.1 БистСмныС трСбования

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ всСх вСрсий трСбуСтся 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Ρ…86 (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 80386), хотя Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… процСссоров с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Ρ…86. DOS-вСрсия Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ОБ, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ с MS DOS 2.0, Windows-вСрсия Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ консоль Win32, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ с вСрсиСй 3.1.

1.1.2 Π Π°Π±ΠΎΡ‚Π° с компилятором ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

Для запуска FASMΠ° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π²Π°ΠΌ понадобится ввСсти Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ β€” это ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ с ΠΊΠΎΠ΄ΠΎΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ-адрСсату ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Если Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ Π·Π°Π΄Π°Π½, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π²Ρ‹Π²ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ создано автоматичСски. ПослС ΠΏΠΎΠΊΠ°Π·Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Ρ‘ вСрсии, компилятор считаСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ скомпилируСт Π΅Ρ‘. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции FASM Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ сгСнСрированный ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»-адрСсат ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΌ процСссС; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ошибкС.

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ тСкстовым Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Π² любом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅. ΠžΠ±Ρ€Ρ‹Π² строки допускаСтся ΠΈ Π² стандартС DOS, ΠΈ Π² стандартС Unix, табуляции ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Β«-mΒ», Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ число, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, сколько ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ максимально задСйствовано flat assembler'ΠΎΠΌ. Π’ случаС DOS-вСрсии эта опция ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ лишь использованиС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ памяти. ΠžΠΏΡ†ΠΈΡ Β«-pΒ» со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π·Π° Π½ΠΈΠΌ числом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ассСмблСр. Если ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ числом ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ², ассСмблированиС прСкратится с сообщСниСм ΠΎΠ± ошибкС. МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΎΠΏΡ†ΠΈΠΈ Ρ€Π°Π²Π½ΠΎ 65536, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ 100.

НС сущСствуСт ΠΎΠΏΡ†ΠΈΠΉ, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… воздСйствиС Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ компилятора, вся нСобходимая flat assembler'Ρƒ информация Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² исходном ΠΊΠΎΠ΄Π΅. НапримСр, для установки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ„Π°ΠΉΠ»Π°-адрСсата ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«formatΒ» Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠ΄Π°.

1.1.3 БообщСния компилятора

Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции FASM Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран сводку ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. Она Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, сколько Π±Ρ‹Π»ΠΎ сдСлано ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ², сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ это заняло, ΠΈ сколько Π±Π°ΠΉΡ‚ записано Π² Ρ„Π°ΠΉΠ»-адрСсат.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ сводки:

flat assembler version 1.64

38 passes, 5.3 seconds, 77824 bytes.

Π’ случаС ошибки Π²ΠΎ врСмя компиляции, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран сообщСниС ΠΎΠ± ошибкС. НапримСр, ΠΊΠΎΠ³Π΄Π° компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ» Π²Π²ΠΎΠ΄Π°, ΠΎΠ½ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

flat assembler version 1.64

error: source file not found.

Если ошибка связана с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° строка, которая Π΅Ρ‘ Π²Ρ‹Π·Π²Π°Π»Π°. Π’Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ мСсто этой строки Π² ΠΊΠΎΠ΄Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

flat assembler version 1.64

example.asm [3]:

mob ax,1

error: illegal instruction.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строкС Ρ„Π°ΠΉΠ»Π° Β«example.asmΒ» компилятор встрСтил Π½Π΅ΠΎΠΏΠΎΠ·Π½Π°Π½Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. Если строка, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ°Ρ ΠΎΡˆΠΈΠ±ΠΊΡƒ, содСрТит макрос, Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° строка Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ΅ макроса, которая сгСнСрировала ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

flat assembler version 1.64

example.asm [6]:

stoschar 7

example.asm [3] stoschar [1]:

mob al,char

error: illegal instruction.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ макрос Π² ΡˆΠ΅ΡΡ‚ΠΎΠΉ строкС Ρ„Π°ΠΉΠ»Π° Β«example.asmΒ» создал Π½Π΅ΠΎΠΏΠΎΠ·Π½Π°Π½Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС своСй Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ.

1.1.4 Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π°

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π² исходникС Π½Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«formatΒ», flat assembler направляСт сгСнСрированный ΠΊΠΎΠ΄ Π½Π° Π²Ρ‹Π²ΠΎΠ΄, создавая Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ простой Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ создаСт 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«use32Β» ΠΈΠ»ΠΈ Β«use16Β». Π’Ρ‹Π±ΠΎΡ€ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°-адрСсата автоматичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ компилятор Π² 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, Π² 2.4.

Π’Π΅ΡΡŒ сгСнСрированный ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅-адрСсатС всСгда ΠΈΠ΄Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Ρ‡Ρ‚ΠΎ ΠΈ написанный Π² исходникС.

1.2 Бинтаксис ассСмблСра

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ, излоТСнная Π½ΠΈΠΆΠ΅, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ программистам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΆΠ΄Π΅ использовали Π΄Ρ€ΡƒΠ³ΠΈΠ΅ компиляторы ассСмблСра. Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° ассСмблСрС.

Flat assembler ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π˜Π½Ρ‚Π΅Π»ΠΎΠ²ΡΠΊΠΈΠΉ синтаксис ассСмблСрных инструкций, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ возмоТности прСпроцСссора (макросы ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы). Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный Π½Π°Π±ΠΎΡ€ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² β€” инструкций для компилятора.

ВсС символы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ΄Π°, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру.

1.2.1 Бинтаксис инструкций

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Π² ассСмблСрС Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Ρ‹Π²Π°ΠΌΠΈ строк, ΠΈ ΠΎΠ΄Π½Π° инструкция Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС. Если строка содСрТит Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой, Π½Π΅ считая Ρ‚ΠΎΡ‡Π΅ΠΊ с запятой, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, остаток Π΅Ρ‘ считаСтся ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ ΠΈ компилятор Π΅Ρ‘ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚. Если строка содСрТит символ Β«\Β» (Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π° Π½Π΅ΠΉ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ), Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ срока прикрСпляСтся ΠΊ этой Ρ‚ΠΎΡ‡ΠΊΠ΅. ПослС символа Β«\Β» строка Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой.

КаТдая строка Π² ΠΊΠΎΠ΄Π΅ β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Ρ‚Ρ€Π΅ΠΊ Ρ‚ΠΈΠΏΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ β€” это Π·Π½Π°ΠΊΠΈ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… символов. Π›ΡŽΠ±ΠΎΠΉ ΠΈΠ· Β«+-*/=<>()[]{}:,|&~#`Β» β€” это Π·Π½Π°ΠΊ символа. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π½Π°ΠΊΠΎΠ², отдСлСнная ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ Π·Π½Π°ΠΊΠ°ΠΌΠΈ символов, это символ. Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π½Π°ΠΊ Ρ‚Π°ΠΊΠΎΠ³ΠΎ символа двойная Π»ΠΈΠ±ΠΎ одинарная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°, ΠΎΠ½ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Π½ΠΈΠΌ, Π² строку. Она Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Π»Π°ΡΡŒ (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΎΠΉ). Однако Ссли Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ подряд (Π±Π΅Π· Π·Π½Π°ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ), ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² строку ΠΈ ΠΎΠ½Π° продолТаСтся. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ Π·Π½Π°ΠΊΠΎΠ² символов ΠΈ строк, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π°, поэтому ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ символами ΠΈΠΌΠ΅Π½.


Π’Π°Π±Π»ΠΈΡ†Π° 1.1 Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

КаТдая инструкция состоит ΠΈΠ· ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ числа ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми. ΠžΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ рСгистр, нСпосрСдствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ адрСс Π² памяти, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ (Ρ‚Π°Π±Π»ΠΈΡ†Π° 1.1). Названия Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… рСгистров Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.2, ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹. НСпосрСдствСнныС значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π»ΡŽΠ±Ρ‹ΠΌ числовым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.


Π’Π°Π±Π»ΠΈΡ†Π° 1.2 РСгистры

Если ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ β€” это Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти, адрСс этих Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚Π°ΠΊΠΆΠ΅ любого числового выраТСния, Π½ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ рСгистры) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Β«ptrΒ». НапримСр, инструкция Β«mov eax,3Β» помСстит число 3 Π² рСгистр EAX, Π° инструкция Β«mov eax,[7]Β» помСстит 32-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· адрСса 7 Π² EAX, ΠΈ инструкция Β«mov byte [7],3Β» помСстит число 3 Π² Π±Π°ΠΉΡ‚ ΠΏΠΎ адрСсу 7, это ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Ρ‰Π΅ Ρ‚Π°ΠΊ: Β«mov byte ptr 7,3Β». Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ сСгмСнтный рСгистр Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для адрСсации, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ с Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ адрСсом Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок ΠΈΠ»ΠΈ послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«ptrΒ».

1.2.2 ОписаниС Π΄Π°Π½Π½Ρ‹Ρ…

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для Π½ΠΈΡ… мСсто, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², пСрСчислСнных Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.3. Π—Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ описания Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми. Π­Ρ‚ΠΈ выраТСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ значСния для ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. НапримСр Β«db 1,2,3Β» описываСт Ρ‚Ρ€ΠΈ Π±Π°ΠΉΡ‚Π° со значСниями 1, 2 ΠΈ 3 соотвСтствСнно.