Синтаксис директив IFB и IFNB следующий: IF(N)В аргумент фраrмент_программы_l ELSE фрагмент_программы_2 ENDIF ' Данные директивы используются для проверки фактических параметров, пе- редаваемых в макрос. При вызове макрокоманды они анализируют значение аргу- мента и в зависимости от того, равно оно пробелу или нет, транслируется либо первый фрагмент программы (фраrмент_программы_l), либо второй (фраrмент_про- граммы_2). Какой именно фрагмент будет выбран, зависит от кода директивы. * Директива IFB проверяет равенство аргумента пробелу. В качестве аргумента могут выступать имя или число. Если его значение равно пробелу (то есть фак- тический аргумент при вызове макрокоманды не был задан), то транслируется и помещается в объектный модуль первый фрагмент программы. В противном случае при наличии директивы ELSE в объектный код помещается второй фраг- мент программы. Если же директивы ELSE нет, то при равенстве аргумента про- белу вся часть программы между директивами IFB и ENDIF игнорируется и в объ- ектный модуль не включается. ® Действие IFNB обратно действию IFB. Если значение аргумента в программе не равно пробелу, то транслируется первый фрагмент программы. В противном случае при наличии директивы ELSE в объектный код помещается второй фраг- мент программы. Если же директивы ELSE нет, то вся часть программы (при неравенстве аргумента пробелу) между директивами IFNB и ENDIF игнорирует- ся и в объектный модуль не включается. Типичным примером применения этих директив являются строки в макроопре- делении, проверяющие, указывается ли фактический аргумент при вызове соот- ветствующей макрокоманды: show macro reg ifb display "не задан регистр" 314 Глава 14. Макросредства языка ассемблера Если теперь в сегменте кода вызвать макрос SHOW без аргументов, то будет вы- ведено сообщение о том, что не задан регистр, и генерация макрорасширения пре- кратится директивой EXITМ.