В этом приложении для описания синтаксиса выражений Турбо Ассемблера, используется модифицированная форма Бекуса-Наура (BNF). Символ ::= описывает синтаксический результат. Далее во всех разделах многоточие (.) означает, что предшествующий эле- мент может быть повторен любое число раз. В данном приложении описываются также ключевые слова и их старшинство.Лексическая грамматика
допустимая_строка ::= пропуск допустимая_строка знак_пунктуации допустимая_строка числовая_строка допустимая_строка идентификатор_строки допустимая_строка нуль пропуск ::= символ_пробела пропуск символ_пробела символ_пробела ::= все управляющие символы, символы > 128, ' ' идентификатор_строки ::= идентификатор_символа идентификатор_строки_2 идентификатор_строки_2 ::= идентификатор_символа_2 идентификатор_строки_2 нуль идентификатор_символа ::= $,%,_,?,символы алфавита идентификатор_символа_2 ::= идентификатор_символов плюс цифры числовая_строка ::= числ_строка стр_строка числ_строка ::= цифры буквенно_цифровые_символы цифры'.'цифры показатель_степени цифры показатель_степени ; Только в режиме MASM в директи- ; вах DD, DQ и DT цифры ::= цифра цифры цифра цифра ::= от 0 до 9 алфавитно-цифровые_символы ::= цифра буквенно_цифровые_символы буква буквенно_цифровые_символы нуль буква ::= буквы алфавита показатель_степени ::= Е+цифры Е-цифры Ецифры нуль стр_строка ::= строка в двойных кавычках; кавычка, вводимая двумя кавычками знак_пунктуации ::= любой символ, отличный от следующих: символ_пробела,идентификатор_символ,'"',"'" или цифры Символ точки (.) трактуется различным образом в режиме MASM и в режиме Ideal. Этот символ не требуется указывать в числах с плавающей запятой в режиме MASM. Точка не может входить в состав символического имени в режиме Ideal. В режиме MASM с этого симво- ла иногда начинаются символические имена, кроме того, знак пунк- туации используется иногда в качестве селектора поля структуры. Правила интерпретации точки (.): 1. В режиме Ideal точка всегда интерпретируется как знак пунктуации. 2. В режиме MASM точка трактуется как первый символ иденти- фикатора в следующих случаях: а). Когда она является первым символом в строке и в ряде некоторых других специальных случаев, например, в составе внешних (EXTRN) и общих (PUBLIC) символичес- ких имен, она присоединяется к следующему за ней сим- волическому имени, если следующий за ней символ представляет собой идентификатор_символа_2, как он определен выше. б). Если она не является первым символом в строке, или если результирующее имя идентификатора будет предс- тавлять собой определенное имя идентификатора, тогда точка присоединяется к началу следующего за ней иден- тификатора.Грамматика выражений в режиме MASM
Синтаксис выражений начинается как MASM_выражение. MASM_выражение ::= выражение_1 м_выражение_1 ::= SHORT м_выражение_1 .TYPE м_выражение_1 SMALL м_выражение_1 (преобразование в 16-битовое смещение [только для процессора 386]) LARGE м_выражение_1 (преобразование в 32-битовое смещение [только для процессора 386]) м_выражение_2 м_выражение_2 ::= м_выражение_3 OR м_выражение_3. м_выражение_3 ХOR м_выражение_3. м_выражение_3 м_выражение_3 ::= м_выражение_4 AND м_выражение_4. м_выражение_4 м_выражение_4 ::= NOT м_выражение_4 м_выражение_5 м_выражение_5 ::= м_выражение_6 'EQ' м_выражение_6. м_выражение_6 'NE' м_выражение_6. м_выражение_6 'LT' м_выражение_6. м_выражение_6 'LE' м_выражение_6. м_выражение_6 'GT' м_выражение_6. м_выражение_6 'GE' м_выражение_6. м_выражение_6 м_выражение_6 ::= м_выражение_7 '+' м_выражение_7. м_выражение_7 '-' м_выражение_7. м_выражение_7 м_выражение_7 ::= м_выражение_8 '*' м_выражение_8. м_выражение_8 '/' м_выражение_8. м_выражение_8 'MOD' м_выражение_8. м_выражение_8 'SHR' м_выражение_8. м_выражение_8 'SHL' м_выражение_8. м_выражение_8 м_выражение_8 ::= + выражение_8 - выражение_8 выражение_12 м_выражение_10 ::= OFFSET указатель SEG указатель SIZE идентификатор LENGTH идентификатор WIDTH идентификатор MASK идентификатор THIS цел_тип идентификатор ( указатель ) [ указатель ] м_выражение_10 ::= м_выражение_11 PTR м_выражение_10 м_выражение_11 OFFSET м_выражение_10 SEG м_выражение_10 LOW м_выражение_10 HIGH м_выражение_10 TYPE м_выражение_10 THIS м_выражение_10 м_выражение_11 ::= м_выражение_8 : м_выражение_8. м_выражение_12 ::= м_выражение_13 [м_выражение_13.(подразумеваемое сложение, только если есть '[' или '(') м_выражение_13 (м_выражение_13.(подразумеваемое сложение, только если есть '[' или '(') м_выражение_13'.'м_выражение_10 м_выражение_13 ::= LENGTH идентификатор SIZE идентификатор WIDTH идентификатор MASK идентификатор ( м_выражение_1 ) [ м_выражение_1 ] м_выражение_10Грамматика выражений в режиме Ideal
Синтаксис начинается, как id_выражение. id_выражение ::= указатель i_тип ::= UNKNOWN BYTE WORD DWORD FWORD QWORD PWORD TBYTE SHORT NEAR FAR PROC DATAPTR CODEPTR имя_структуры имя_таблицы имя_перечисления имя_записи TYPE указатель указатель ::= SMALL указатель ; если 386 LARGE указатель ; если 386 i_тип PTR указатель i_тип LOW указатель i_тип HIGH указатель i_тип указатель указатель_2 указатель_2 ::= указатель_3.идентификатор (Операция выбора элемента структуры) указатель_3 указатель_3 ::= выражение:указатель_3 выражение выражение ::= SYMTYPE выражение (Операция определения типа символическо- го имени) выражение_2 выражение_2 ::= выражение_3 OR выражение_3. выражение_3 ХOR выражение_3. выражение_3 выражение_3 ::= выражение_4 AND выражение_4. выражение_4 выражение_4 ::= NOT выражение_4 выражение_5 выражение_5 ::= выражение_6 ЕQ выражение_6. выражение_6 NE выражение_6. выражение_6 LT выражение_6. выражение_6 LE выражение_6. выражение_6 GT выражение_6. выражение_6 GE выражение_6. выражение_6 выражение_6 ::= выражение_7 + выражение_7. выражение_7 - выражение_7. выражение_7 выражение_7 ::= выражение_8 * выражение_8. выражение_8 / выражение_8. выражение_8 MOD выражение_8. выражение_8 SHR выражение_8. выражение_8 SHL выражение_8. выражение_8 выражение_8 +выражение_8 -выражение_8 выражение_9 выражение_9 HIGH выражение_9 LOW выражение_9 выражение_10 выражение_10 OFFSET указатель SEG указатель SIZE идентификатор LENGTH идентификатор WIDTH идентификатор MASK идентификатор THIS идентификатор идентификатор константа ( указатель ) [ указатель ] (Всегда означает "содержимое")Старшинство ключевых слов
Важно понимать, как Турбо Ассемблер распознает строки исход- ного текста. Это позволит вам избежать записи кода, который может привести к непредсказуемым результатам. Рассмотрим, например, следующий фрагмент программы: NAME SEGMENT Если вы записали эту строку, рассчитывая открыть сегмент с именем NAME, то будете разочарованы. Турбо Ассемблер распознает ключевое слово NAME раньше, чем SEGMENT, называя ваш код именем SEGMENT. В общем случае определяет значение строки на основе первых двух символов строки. Самый левый символ находится в первой пози- ции, а символ справа от него находится во второй позиции.Старшинство операций в режиме Ideal
В режиме Ideal применяются следующие правила старшинства операций: 1. Наивысший приоритет (приоритет 1) имеют все ключевые сло- ва в первой позиции строки. Они проверяются первыми. 2. Ключевые слова на второй позиции строки имеют второй при- орите и рассматриваются во вторую очередь.Старшинство операций в режиме MASM
Правила синтаксического анализа строк в режиме MASM значи- тельно более сложны, чем в режиме Ideal. Вместо двух здесь имеет- ся три уровня приоритета: 1. Наивысший приоритет (приоритет 1) присваивается отдельным ключевым словам в первой позиции (таким как NAME и %OUT). 2. Следующий по старшинству приоритет (приоритет 2) имеют все идентификаторы, обнаруженные на второй позиции. 3. Все другие ключевые слова в первой позиции имеют наимень- ший (третий) приоритет. Примечание: Внутри определений структур Турбо Ассемб- лер интерпретирует ключевые слова приоритета 1 как приори- тет 3. В этом случае ключевые слова приоритета 2 имеют выс- ший приоритет. Например, в следующем фрагменте кода: NAME SEGMENT NAME - это ключевое слово первого приоритета, а SEGMENT - ключевое слово второго приоритета. Таким образом, Турбо Ассемблер будет интерпретировать эту строку, как директиву NAME, а не как директиву SEGMENT. В другом примере: MOV INSTR,1 MOV - ключевое слово приоритета 3, а INSTR - ключевое слово прио- ритета 2. Таким образом, Турбо Ассемблер интерпретирует эту стро- ку как инструкцию INSTR, а не как инструкцию MOV (как вы можете предполагать).Ключевые слова и предопределенные идентификаторы
В данном разделе приведен полный перечень всех ключевых слов Турбо Ассемблера. Значение в скобках после ключевых слов указыва- ют их приоритет (1 или 2) в режиме MASM. Приоритет для ключевых слов указан только, если он имеет значение 1 или 2. Для всех дру- гих ключевых слов подразумевается приоритет 3. Турбо Ассемблер распознает ключевые слова только в том случае, если он находит их. В режиме MASM ключевые слова приоритета 1 или 3 всегда нахо- дятся в первой позиции, а ключевые слова приоритета 2 - во второй позиции. Символ M после ключевого слово указывает, что оно допус- тимо только для режима MASM, а I показывает ключевое слово, дос- тупное только в режиме Ideal. Если буква не указана, то ключевые слова работают в обоих режимах. Номер после ключевого слова пока- зывает приоритет.Ключевые слова директив
В следующем списке содержатся все ключевые слова директив Турбо Ассемблера. Ключевые слова группируются по версиям Турбо Ассемблера, в которых они вводились. Следующие ключевые слова были введены в Турбо Ассемблере версии 1.0. Ключевые слова Турбо Ассемблера 1.0 (VERSION T100) Таблица B.1 ----------------------------------------------------------------¬ ¦ % (1) %NOLIST JZ SETNLE ¦ ¦ .186 (M) NOLOCALS LAHF SETNO ¦ ¦ .286 (M) NOMASM51 LDS SETNP ¦ ¦ .286C (M) %NOMACS LEA SETNS ¦ ¦ .286P (M) NOMULTERRS LES SETNZ ¦ ¦ .287 (M) NOSMART LOCK SETO ¦ ¦ .386 (M) %NOSYMS LODS SETP ¦ ¦ .386C (M) %NOTRUNCS LODSB SETPE ¦ ¦ .386P (M) NOWARN LODSW SETPO ¦ ¦ .387 (M) ORG LOOP SETS ¦ ¦ .486 (M) %OUT (1) LOOPE SETZ ¦ ¦ .486C (M) P186 LOOPNE SHLD ¦ ¦ .486P (M) P286 LOOPNZ SHRD ¦ ¦ .8086 (M) P286N LOOPZ STOSD ¦ ¦ .8087 (M) P286P MOV LOOPW ¦ ¦ : (2) P287 MOVS LOOPWE ¦ ¦ = (2) P286 MOVSB LOOPWNE ¦ ¦ ALIGN P386N MOVSW LOOPWNZ ¦ ¦ .ALPHA P386P MUL LOOPWZ ¦ ¦ ARG P387 NEG F2XM1 ¦ ¦ ASSUME P486 NOP FABS ¦ ¦ %BI P486N NOT FADD ¦ ¦ .CODE (M) P8086 OR FADDP ¦ ¦ .CODESEG P8087 OUT FBLD ¦ ¦ COMM (10) PAGE POP FBSTP ¦ ¦ COMMENT (1) %PAGESIZE PUSH FCHS ¦ ¦ %CONDS %PCNT PUSHF FCLEX ¦ ¦ CONST PNO87 RCL FCOM ¦ ¦ .CONST (M) %POPLCTL RCR FCOMP ¦ ¦ .CREF (M) PROC (2) REP FCOMPP ¦ ¦ %CREF %PUSHLCTL REPE FCOS ¦ ¦ %CREFALL PUBLIC (1) REPNE FDECSTP ¦ ¦ %CREFREF PURGE REPNZ FDISI ¦ ¦ %CREFUREF QUIRKS REPZ FDIV ¦ ¦ %CTLS .RADIX (M) RET FDIVP ¦ ¦ .DATA (M) RADIX RETF FDIVR ¦ ¦ .DATA? (M) RECORD (2) RETN FDIVRP ¦ ¦ DATASEG REPT (1) ROL FENI ¦ ¦ DB .SALL (M) ROL FFREE ¦ ¦ DD SEGMENT (2) SAHF FIADD ¦ ¦ %DEPTH .SEQ (M) SAL FICOM ¦ ¦ DF (2) .SFCOND (M) SAR FICOMP ¦ ¦ DISPLAY SMART SBB FIDIV ¦ ¦ DOSSEG .STACK (M) SCAS FIDIVR ¦ ¦ DP (2) .STARTUP (M) SCASB FILD ¦ ¦ DQ (2) STRUC (2) SCASW FIMUL ¦ ¦ DT (2) SUBTTL (1) SHL FINCSTP ¦ ¦ DW (2) %SUBTTL [Р SHR FINIT ¦ ¦ ELSE (1) %SYMS STC FIST ¦ ¦ ELSEIF (1) %TABSIZE STD FISTP ¦ ¦ ELSEIF1 (1) %TEXT STI FISUB ¦ ¦ ELSEIF2 (1) .TFCOND (M) STOS FISUBR ¦ ¦ ELSEIFB (1) TITLE (1) STOSB FLD ¦ ¦ ELSEIFDEF (1) %TITLE STOSW FLDCTW ¦ ¦ ELSEIFDIF (1) %TRUNC SUB FLDENV ¦ ¦ ELSEIFDIFI (1) UDATASEG TEST FLDLG2 ¦ ¦ ELSEIFE (1) UFARDATA WAIT FLDLN2 ¦ ¦ ELSEIFIDN (1) UNION (2) WBINV FLDL2E ¦ ¦ ELSEIFIDNI (1) USES XCHG FLDL2T ¦ ¦ ELSEIFNB (1) WARN XLAT FLDPI ¦ ¦ ELSEIFNDEF (1) .XALL (M) XLATB FLDZ ¦ ¦ EMUL .XCREF (M) SOR FMUL ¦ ¦ END .XLIST (M) BOUND FMULP ¦ ¦ ENDIF (1) USECS ENTER FNCLEX ¦ ¦ ENDM USEDS INS FNDSI ¦ ¦ ENDP (2) USESS INSB FNENI ¦ ¦ ENDS (2) USEES INSW FNINIT ¦ ¦ EQU (2) USEFS LEAVE FNOP ¦ ¦ .ERR (1) (M) USEFS OUTS FNSAVE ¦ ¦ ERR CATSTR (2) OUTSB FNSTCW ¦ ¦ .ERR1 (1) (M) INSTR (2) OUTSW FNSTENV ¦ ¦ .ERR2 (1) (M) SIZESTR (2) POPA FNSTSW ¦ ¦ .ERRB (1) (M) SUBSTR (2) PUSHA FPATAN ¦ ¦ .ERRDEF (1) (M) AAA ARPL FPREM ¦ ¦ .ERRDIF (1) (M) AAD CTLS FPTAN ¦ ¦ .ERRDIFI (1) (M) AAM LAR FRNDINT ¦ ¦ .ERRE (1) (M) AAS LGDT FRSTOR ¦ ¦ .ERRIDN (1) (M) ADC LIDT FSAVE ¦ ¦ ERRIF ADD LLDT FSCALE ¦ ¦ .ERRDIF (1) (M) AND LMSW FSQRT ¦ ¦ .ERRDIFI (1) (M) ARPL LSL FST ¦ ¦ .ERRE (1) (M) BSF LTR FSTCW ¦ ¦ .ERRIDN (1) (M) BSR SGDT FSTENV ¦ ¦ ERRIF BSWAP SIDT FSTP ¦ ¦ ERRIF1 BT SLDT FSTSW ¦ ¦ ERRIF2 BTC SMSW FSTSW ¦ ¦ ERRIFB BT STR FSUB ¦ ¦ ERRIFDEF BTR VERR FSUBP ¦ ¦ ERRIFDIF BTS VERW FSUBR ¦ ¦ ERRIFDIFI CALL BSF FSUBRP ¦ ¦ ERRIFE CBW BSR FTST ¦ ¦ ERRIFDIDN CDQ BT FUCOM ¦ ¦ ERRIFDIDNI CLC BTC FUCOMP ¦ ¦ ERRIFNB CLD BTR FUCOMPP ¦ ¦ ERRIFNDEF CLI BTS FWAIT ¦ ¦ .ERRIFNB (1) (M) CLTS CDQ FXAM ¦ ¦ .ERRIFDEF (1) (M) CMC CMPSD FXCH ¦ ¦ .ERRNZ (1) (M) CMP CWDE FXTRACT ¦ ¦ .EVEN CMPS INSD FYL2X ¦ ¦ EVENDATA CMPS IRETD FYL2XP1 ¦ ¦ EXITM CMPXCHG IJECXZ FSETPM ¦ ¦ EXTRN (1) CWD LPS FPCOS ¦ ¦ .FARDATA CWDE LGS FPREM1 ¦ ¦ FARDATA DAA LODSD FPSIN ¦ ¦ .FARDATA (M) DAS LOOPD FPSINCOS¦ ¦ .FARDATA? (M) DEC LOOPDE FUCOM ¦ ¦ GLOBAL (1) DIV LOOPDNE FUCOMP ¦ ¦ GROUP (2) ESC LOOPDNZ FUCOMPP ¦ ¦ %INCL HLT LOOPDZ ¦ ¦ IDEAL IDIV LSS ¦ ¦ IF (1) IMUL MOVSD ¦ ¦ IF1 (1) IN MOVSX ¦ ¦ IF2 (1) INC MOVZX ¦ ¦ IFb (1) INS OUTSD ¦ ¦ IFDEF (1) INT POPAD ¦ ¦ IFDIFI (1) INVO POPFD ¦ ¦ IFE (1) IRET PUSHAD ¦ ¦ IFIDN (1) JA PUSHFD ¦ ¦ FIDNI (1) JAE SCASD ¦ ¦ IFNB (1) JB SETA ¦ ¦ IFNDEF (1) JBT SETAE ¦ ¦ %INCTL (1) JCXZ SETB ¦ ¦ INCLUD (1) JE SETBE ¦ ¦ INCLUDELIB (1) JG SETC ¦ ¦ IRP (1) JGT OUTSD ¦ ¦ IRPC (1) JL POPAD ¦ ¦ JUMPS JLE POPFD ¦ ¦ LABEL (2) JNA PUSHAD ¦ ¦ .LALL (M) JNAE PUSHFD ¦ ¦ .LFCOND (M) JNB SCASD ¦ ¦ %LINUM JNBE SETA ¦ ¦ %LIST JNC SETAE ¦ ¦ .LIST (M) JNE SETB ¦ ¦ LOCAL JNG SETBE ¦ ¦ LOCALS JNGE SETC ¦ ¦ MASM JNL SETE ¦ ¦ %MACS JNLE SETG ¦ ¦ MACRO (2) JNO SETGE ¦ ¦ MODEL JNP SETL ¦ ¦ .MODEL (M) JNC SETLE ¦ ¦ MULTERRS JNP SETNA ¦ ¦ NAME (1) JNS SETNAE ¦ ¦ %NEWPAGE JNZ SETNB ¦ ¦ %NOCONDS JO SETNBE ¦ ¦ %NNOCREF JP SETNC ¦ ¦ %NOCTLS JPE SETNE ¦ ¦ NOEMUL JPO SETNG ¦ ¦ %NOINCL JS SETNGE ¦ ¦ NOJUMPS JUMP SETNL ¦ L---------------------------------------------------------------- В Турбо Ассемблере версии 2.0 поддерживаются все ключевые слова версии 1.0 со следующими дополнениями: Новые ключевые слова Турбо Ассемблера версии 2.0 (VERSION T200) Таблица B.2 ----------------------------------------------------------------¬ ¦ BSWAP P486 STARTUPCODE ¦ ¦ CMPXCHG P486N WBINVD ¦ ¦ INVD PUBLICDLL(I) XADD ¦ ¦ INVLPG RETCODE ¦ L---------------------------------------------------------------- В Турбо Ассемблере версии 2.5 поддерживаются все ключевые слова версии 2.0 со следующими дополнениями: Новые ключевые слова Турбо Ассемблера версии 2.5 (VERSION T250) Таблица B.3 ----------------------------------------------------------------¬ ¦ ENTERD LEAVED ¦ ¦ ENTERW LEAVEW ¦ L---------------------------------------------------------------- В Турбо Ассемблере версии 3.0 поддерживаются все ключевые слова версии 2.5 со следующими дополнениями: Новые ключевые слова Турбо Ассемблера версии 3.0 (VERSION T200) Таблица B.4 ----------------------------------------------------------------¬ ¦ CLRFLAG LARGESTACK TBLINIT ¦ ¦ ENUM(2) SETFIELD TBLINST ¦ ¦ FASTIMUL SETFLAG TBLPTR ¦ ¦ FLIPFLAG SMALLSTACK TESTFLAG ¦ ¦ GETFIELD TABLE(2) VERSION ¦ ¦ GOTO(1) WHILE(1) ¦ L----------------------------------------------------------------
Назад | Содержание | Вперед