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

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

Автор Tomasz Grysztar

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ структуры:

struc point x,y

{

 .x dw x

 .y dw y

}

НапримСр Β«my point 7,11Β» ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ структуру, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΡƒΡŽ Β«myΒ», ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Β«my.xΒ» со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 7 ΠΈ Β«my.yΒ» со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 11.

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

struc db [data]

{

 common

 . db data

 .size = $ β€”.

}

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ строка Β«msg db 'Hello!',13,10Β» ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ константу Β«msg.sizeΒ», Ρ€Π°Π²Π½ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ опрСдСляСмых Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°ΠΉΡ‚Π°Ρ….

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структур Π΄Π°Π½Π½Ρ‹Ρ…, адрСсованных рСгистрами ΠΈΠ»ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌΠΈ значСниями ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано структурными макроинструкциями с использованиСм Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«virtualΒ» (смотритС 2.2.3).

Β«restrucΒ» удаляСт послСднСС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структуры, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Β«purgeΒ» Π΄Π΅Π»Π°Π΅Ρ‚ с макросами ΠΈ Β«restoreΒ» с ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ константами. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис β€” Π·Π° Π½Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΈΠΌΠ΅Π½ структурных макросов, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми.

2.3.5 ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ макроинструкций

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«reptΒ» β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ макроинструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π±Π»ΠΎΠΊΠ°, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ синтаксис β€” число, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π° Β«reptΒ» (это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ прСпроцСссор Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ вычислСния, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ повторСния, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° выраТСниях, вычислСнных ассСмблСром, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ассСмблСром, смотритС 2.2.2), ΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π½Π°ΠΊΠ°ΠΌΠΈ Β«{Β» ΠΈ Β«}Β». ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

rept 5 { in al,dx }

создаСт ΠΏΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² строки Β«in al,dxΒ». Π‘Π»ΠΎΠΊ инструкций опрСдСляСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ для стандартных макросов, ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ всС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ макроинструкций. Если Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Π±Π»ΠΎΠΊ просто пропускаСтся, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ макрос, Π½ΠΎ Π½Π΅ использовали Π΅Π³ΠΎ. Π—Π° количСством ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ имя символа-счСтчика, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ символьно Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ повторСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

rept 3 counter

{

 byte#counter db counter

}

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ строки:

byte1 db 1

byte2 db 2

byte3 db 3

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ повторСния, примСняСмый ΠΊ Π±Π»ΠΎΠΊΠ°ΠΌ Β«reptΒ» Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ мноТСствСнных Π³Ρ€ΡƒΠΏΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² макросов, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Β«forwardΒ», Β«commonΒ» ΠΈ Β«reverseΒ» ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π°ΠΊΠΎΠΉ макрос:

rept 7 num { reverse display `num }

ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ символы ΠΎΡ‚ 7 Π΄ΠΎ 1 ΠΊΠ°ΠΊ тСкст. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«localΒ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ макросов с нСсколькими Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ:

rept 21

{

 local label

 label: loop label

}

сгСнСрируСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Π°. Π‘ΠΈΠΌΠ²ΠΎΠ»-счСтчик ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с 1, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π½ΠΎΠ΅ запятой, сразу ΠΆΠ΅ послС ΠΈΠΌΠ΅Π½ΠΈ счСтчика. НапримСр:

rept 8 n:0 { pxor xmm#n,xmm#n }

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‰ΠΈΠΉ содСрТимоС рСгистров SSE. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько счСтчиков, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свою Π±Π°Π·Ρƒ.

Β«irpΒ» ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Π΄Π°Π½Π½Ρ‹ΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Бинтаксис Ρ‚Π°ΠΊΠΎΠΉ: Π·Π° Β«irpΒ» слСдуСт имя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π΄Π°Π»Π΅Π΅ запятая ΠΈ Π΄Π°Π»Π΅Π΅ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ стандартного макроса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ запятыми ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π½Π°ΠΊΠ°ΠΌΠΈ Β«<Β» ΠΈ Β«>Β». Π’Π°ΠΊ ΠΆΠ΅ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Β«*Β» для обозначСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ:

irp value, 2,3,5

{ db value }

сгСнСрируСт строки:

db 2

db 3

db 5

Β«irpsΒ» ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Π΄Π°Π½Π½Ρ‹ΠΉ список символов, Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ имя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π΄Π°Π»Π΅Π΅ запятая ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… символов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, символы Π»ΠΈ это ΠΈΠΌΠ΅Π½, Π·Π½Π°ΠΊΠΈ символов ΠΈΠ»ΠΈ строки Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, становится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ. Если Π·Π° запятой Π½ΠΈΠΊΠ°ΠΊΠΈΡ… символов Π½Π΅ слСдуСт, Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ производится Π²ΠΎΠΎΠ±Ρ‰Π΅. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

irps reg, al bx ecx

{ xor reg,reg }

сгСнСрируСт строки:

xor al,al

xor bx,bx

xor ecx,ecx

Π‘Π»ΠΎΠΊΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ Β«irpΒ» ΠΈ Β«irpsΒ», ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ макросы, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, спСцифичныС для макросов ΠΌΠΎΠ³ΡƒΡ‚ Π² Π½ΠΈΡ… свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

2.3.6 Условный прСпроцСссинг

ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Β«matchΒ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° обрабатываСтся прСпроцСссором ΠΈ пСрСдаётся ассСмблСру, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли заданная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов совпадаСт с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ. ΠžΠ±Ρ€Π°Π·Π΅Ρ† ΠΈΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, заканчиваСтся запятой, Π΄Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΎΠ±Ρ€Π°Π·Π΅Ρ†, ΠΈ Π΄Π°Π»Π΅Π΅ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΊΠ°ΠΊ макроинструкция.

Π•ΡΡ‚ΡŒ нСсколько ΠΏΡ€Π°Π²ΠΈΠ» для построСния выраТСния для сравнСния, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ β€” это Π»ΡŽΠ±Ρ‹Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ ΠΈ строки Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

match +,+ { include 'first.inc' }

match +,- { include 'second.inc' }

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Β«+Β» послС запятой соотвСтствуСт Β«+Β» Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π΅, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ совпадСния Π½Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ символу Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒΡ Π·Π½Π°ΠΊΠΎΠΌ Β«=Β» Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π΅. Π’Π°ΠΊΠΆΠ΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти Π² соотвСтствиС сам Π·Π½Π°ΠΊ Β«=Β», ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ конструкции Β«==Β» ΠΈ Β«=,Β». НапримСр, ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Β«=a==Β» Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Β«a=Β».

Если Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π΅ стоит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ символ ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΠ½ соотвСтствуСт любой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, содСрТащСй ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ символ ΠΈ Π΅Π³ΠΎ имя замСняСтся Π½Π° ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π² соотвСтствиС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Π·Π΄Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Π² макроинструкции. НапримСр:

match a-b, 0–7

{ dw a,b-a }

сгСнСрируСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Β«dw 0, 7–0Β». КаТдоС имя всСгда ставится Π² соотвСтствиС ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ количСству символов, оставляя ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ:

match a b, 1+2+3 { db a }

имя Β«aΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ символу Β«1Β», оставляя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«+2+3Β» Π² соотвСтствиС с Β«bΒ». Но, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

match a b, 1 { db a }

для Β«bΒ» Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ остаСтся, ΠΈ Π±Π»ΠΎΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½.

Π‘Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Β«matchΒ» обрабатываСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любая макроинструкция, поэтому здСсь ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, спСцифичныС для макроинструкций.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ Β«matchΒ» ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Ρ‚Π°ΠΊ это Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° замСняСт ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы Π½Π° ΠΈΡ… значСния Π² поставлСнной Π² соотвСтствиС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Π΅Π·Π΄Π΅ послС запятой Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°) ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ сопоставлСния. Благодаря этому Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ выполнСния условия, Ρ‡Ρ‚ΠΎ данная символьная константа ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

match =TRUE, DEBUG { include 'debug.inc' }

здСсь Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли символьная константа Β«DEBUGΒ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«TRUEΒ».

2.3.7 ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΡ€ΠΈ сочСтании Ρ€Π°Π·Π½Ρ‹Ρ… свойств прСпроцСссора Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ΠšΠ°Ρ‚ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Π²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«fixΒ» ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹, Сю ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ дСлаСтся ΠΏΠ΅Ρ€Π΅Π΄ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ прСпроцСссинга, поэтому Ρ‚Π°ΠΊΠΎΠΉ кусок ΠΊΠΎΠ΄Π°:

V fix {

  macro empty

   V

V fix }

   V

Π΄Π΅Π»Π°Π΅Ρ‚ допустимоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пустого макроса. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«fixΒ» ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅ константы ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ стадии, ΠΈ вСсь ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ прСпроцСссинг дСлаСтся Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.

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