Как мы неоднократно видели в приведенных выше примерах, TASM допускает вложенность условных директив компиляции. Более того, так как вложенность требуется довольно часто, TASM предоставляет набор дополнительных директив формата ELSEIFxxx, которые заменяют последовательность подряд идущих ELSE и IFxxx в структуре:
IFxxx; ELSE IFxxx;...ENDIFENDIFЭту последовательность условных директив можно заменить эквивалентной последовательностью дополнительных директив:
IFxxx;... ELSEIFxxx;...ENDIFНаличие xxx в ELSExxx говорит о том, что каждая из директив IF, IFB, IFIDN и т. д. имеет аналогичную директиву ELSEIF, ELSEIFB, ELSEIFIDN и т. д. В конечном итоге это улучшает читаемость кода. В последнем примере фрагмента макроса, проверяющем, имя какого регистра было передано в макрос, наблюдается подобная ситуация. Последовательность ELSE и IFDIFI можно записать так, как в строке 4:
<1>show macro rg<2>ifdifi,<3>goto M_al<4>elseifdifi,<5> goto M_ah<6>else<7>exitm<8>endif<9>:M_al<10>...<11>:M_ah<12>...<13>endmДирективы генерации ошибок
В языке TASM есть ряд директив, называемых директивами генерации пользовательской ошибки. Их можно рассматривать и как самостоятельное средство, и как метод, расширяющий возможности директив условной компиляции. Они предназначены для обнаружения различных ошибок в программе, таких как неопределенные метки или пропуск параметров макроса.
Директивы генерации пользовательской ошибки по принципу работы можно разделить на два типа:
· безусловные директивы, генерирующие ошибку трансляции без проверки каких-либо условий;
· условные директивы, генерирующие ошибку трансляции после проверки определенных условий.
Большинство директив генерации ошибок имеют два обозначения, хотя принцип их работы одинаков. Второе название отражает их сходство с директивами условной компиляции. При дальнейшем обсуждении такие парные директивы будут приводиться в скобках.