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

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

Автор Tomasz Grysztar

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

b equ byte

w equ word

d equ dword

p equ pword

f equ fword

q equ qword

t equ tword

x equ dqword

Π’Π°ΠΊ ΠΊΠ°ΠΊ символьная константа ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ синтаксис со словом Β«offsetΒ» ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ адрСса:

offset equ

ПослС Ρ‚Π°ΠΊΠΎΠ³ΠΎ опрСдСлСния Β«mov ax, offset charΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ конструкциСй, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ смСщСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«charΒ» Π² рСгистр Β«axΒ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Β«offsetΒ» замСняСтся пустым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈ поэтому игнорируСтся.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«fixΒ», которая ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ синтаксис, ΠΊΠ°ΠΊ Β«equΒ», Π½ΠΎ опрСдСляСт константы Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° β€” ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈΡ… символичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора ΠΈ макроинструкций. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся сама Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«fixΒ», которая ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, ΠΈ поэтому допускаСт ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. Но Ссли Ρ‚Π°ΠΊΠΈΠ΅ константы Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ значСния, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«fixΒ», ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈΡ… значСниями ΠΏΠ΅Ρ€Π΅Π΄ присвоСниСм этого значСния Π½ΠΎΠ²ΠΎΠΉ константС.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«fixΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для адаптирования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора, Ρ‡Ρ‚ΠΎ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«equΒ». НапримСр:

incl fix include

опрСдСляСт ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ имя для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«includeΒ», Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«equΒ» Π½Π΅ даст Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ стандартныС ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΈΠ· значСния послС поиска строк с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ прСпроцСссора.

2.3.3 ΠœΠ°ΠΊΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ

Β«macroΒ» позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнный комплСкс инструкций, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… макроинструкциями. Π˜Ρ… использованиС ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСсс программирования. Π’ своСй ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° описаниС символьной константы. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка опрСдСляСт ярлык для инструкции Β«test al,0xFFΒ»:

macro tst {test al,0xFF}

ПослС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«macroΒ» Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ΄Ρ‚ΠΈ имя макроинструкции ΠΈ Π΄Π°Π»Π΅Π΅ Π΅Ρ‘ содСрТаниС, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π½Π°ΠΊΠ°ΠΌΠΈ Β«{Β» ΠΈ Β«}Β». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Β«tstΒ» Π² любом мСстС послС Π΅Ρ‘ опрСдСлСния ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ассСмблирована ΠΊΠ°ΠΊ Β«test al,0xFFΒ». ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символьной константы с Ρ‚Π°ΠΊΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ даст ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ имя макроинструкции Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ инструкции. Π’Π°ΠΊΠΆΠ΅, макроинструкции Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… констант Π½Π° ΠΈΡ… значСния. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π²Ρ‹ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ°ΠΊΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ константу ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ это имя ΠΊΠ°ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ инструкции, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° содСрТаниС макроинструкции, Π½ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², имя Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символьной константы.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроинструкции ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π½Π°ΠΊΠΈ Β«{Β» ΠΈ Β«}Β» Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«macroΒ». НапримСр:

macro stos0

{

 xor al,al

 stosb

}

ΠœΠ°ΠΊΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Β«stos0Β» Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° эти Π΄Π²Π΅ инструкции ассСмблСра, Π³Π΄Π΅ Π±Ρ‹ ΠΎΠ½ Π½Π΅ использовался.

Как ΠΈ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ нСсколько ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², для макроинструкции ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², раздСляя ΠΈΡ… запятыми. ИмСна этих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ макроинструкции Π½Π° строкС с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«macroΒ». Π’ любом мСстС Π² макроинструкции, Π³Π΄Π΅ эти ΠΈΠΌΠ΅Π½Π° появятся, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ ΡΠΎΠΎΡΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ макроинструкция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ макроинструкции, которая Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… для Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²Ρ‹Π²ΠΎΠ΄Π°:

macro align value { rb (value-1)-($+value-1) mod value }

Когда инструкция Β«align 4Β» встрСчаСтся послС этого задания макроинструкции, ΠΎΠ½Π° замСняСтся Π½Π° Π΅Π³ΠΎ содСрТаниС, ΠΈ здСсь Β«valueΒ» станСт 4, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Β«rb (4–1)-($+4–1) mod 4Β».

Если Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ макроинструкции встрСчаСтся Π΅Ρ‘ ΠΆΠ΅ имя, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΈΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сдСланы ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ пСрСопрСдСлСния макросинструкций, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

macro mov op1,op2

{

 if op1 in

  & op2 in

  push op2

  pop op1

 else

  mov op1,op2

end if

}

Π­Ρ‚Π° макроинструкция Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ синтаксис инструкции Β«movΒ», позволяя ΠΎΠ±ΠΎΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌ Π±Ρ‹Ρ‚ΡŒ сСгмСнтными рСгистрами. НапримСр, Β«mov ds,esΒ» Π±ΡƒΠ΄Π΅Ρ‚ ассСмблировано ΠΊΠ°ΠΊ Β«push esΒ» ΠΈ Β«pop dsΒ». Π’ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях Π±ΡƒΠ΄Π΅Ρ‚ использована стандартная инструкция Β«movΒ». Бинтаксис этого Β«movΒ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ Π΄Π°Π»Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ макроинструкции с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ:

macro mov op1,op2,op3

{

 if op3 eq

  mov op1,op2

 else

  mov op1,op2

  mov op2,op3

end if

}

Π­Ρ‚ΠΎ позволяСт инструкции Β«movΒ» ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, Π½ΠΎ ΠΎΠ½Π° Ρ‚Π°ΠΊ ΠΆΠ΅ всС Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ссли макроинструкции задаСтся мСньшС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Π΅ΠΌ Π΅ΠΌΡƒ трСбуСтся, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ пустыми значСниями. Если Π·Π°Π΄Π°Π½Ρ‹ Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, Ρ‚ΠΎ макроинструкция прСвратится Π² Π΄Π²Π΅ Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Β«mov es,ds,dxΒ» Π±ΡƒΠ΄Π΅Ρ‚ ассСмблировано ΠΊΠ°ΠΊ Β«push dsΒ», Β«pop esΒ» ΠΈ Β«mov ds,dxΒ».

Если трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит запятыС, этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ слСдуСт Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Β«<Β» ΠΈ Β«>Β». Если ΠΎΠ½ содСрТит большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° Β«<Β», Ρ‚ΠΎ для окончания Π΅Π³ΠΎ описания Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ использовано Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство Β«>Β».

Β«purgeΒ» позволяСт ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСднСС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ макроинструкции. Π—Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ большС ΠΈΠΌΠ΅Π½ макроинструкций, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми. Если указанная макроинструкция Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, это Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. НапримСр, послС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ синтаксиса Β«movΒ» Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ макроинструкциями Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ синтаксис с трСмя ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ Β«purge movΒ». Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Β«purge movΒ» ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ синтаксис для сСгмСнтных рСгистров, Π° дальнСйшСС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π½Π΅ Π²ΠΎΠ·Ρ‹ΠΌΠ΅Π΅Ρ‚ эффСкта.

Если послС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«macroΒ» Π²Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΈ использовании макроинструкции Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π›ΡŽΠ±ΠΎΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ послС послСднСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π°Ρ‡Π½Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈ станСт Π΅Ρ‘ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‡Π»Π΅Π½ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ послС закрытия ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ макроинструкции Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” это Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:

macro stoschar [char]

{

 mov al,char

 stosb

}

Π­Ρ‚Π° макроинструкция допускаСт Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ этими двумя инструкциями ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. НапримСр, Β«stoschar 1,2,3Β» Π±ΡƒΠ΄Π΅Ρ‚ ассСмблирован ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ инструкции:

mov al,1

stosb

mov al,2

stosb

mov al,3

stosb

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ макроинструкций. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«localΒ» Π·Π°Π΄Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ макроинструкция. Π—Π° Π½Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми. Π­Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… констант ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ макроинструкции. НапримСр:

macro movstr

{

 local move

 move:

 lodsb

 stosb

 test al,al

 jnz move

}

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта макроинструкция, Β«moveΒ» замСняСтся Π½ΠΎΠ²Ρ‹ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ случай, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΊΠ° опрСдСляСтся большС, Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Β«forwardΒ», Β«reverseΒ» ΠΈ Β«commonΒ» дСлят ΠΌΠ°ΠΊΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½Π° Π±Π»ΠΎΠΊΠΈ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… обрабатываСтся послС окончания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. Они Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли макроинструкция ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π³Ρ€ΡƒΠΏΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘Π»ΠΎΠΊ инструкций, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Β«forwardΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄ΠΎ послСднСй, ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π±Π΅Π· этих Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²). Π‘Π»ΠΎΠΊ, ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ Π·Π° Β«reverseΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС β€” ΠΎΡ‚ послСднСй Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ. Π‘Π»ΠΎΠΊ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«commonΒ» обрабатываСтся лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, просто для всСх Π³Ρ€ΡƒΠΏΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅, доступно Π²ΠΎ всСх ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π±Π»ΠΎΠΊΠ°Ρ… ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² Π±Π»ΠΎΠΊΠ΅ Β«commonΒ», ΠΎΠ½ΠΎ доступно Π²ΠΎ всСх ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π±Π»ΠΎΠΊΠ°Ρ…, нСзависимо ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.