Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 188
Unknown Author
Например:
IFNDEF X ;если имя X ве описано и
.ERR2 ;если это уже 2-й проход,
ENDIF ;то зафиксировать ошибку
.ERRE <выражение> 90 Forced error - expression equals 0
.ERRNZ <выражевие> 91 Forced error - expression not equals 0
Директива .ERRE генерирует ошибку, если значение выражения равно 0, а директива .ERRNZ - если значение не равно 0. Выражение должно быть константным и не содержать внешних имен и ссылок вперед. Например:
.ERRE TYPE L - NEAR ;ошибка, если L - близкая метка
.ERRNDEF <имя> 92 Forced error - symbol not defined
.ERRDEF <имя> 93 Forced error - symbol defined
Директива .ERRNDEF генерирует ошибку, если указанное имя еще (до директивы) не описано, а директива .ERRDEF - если имя уже описано. Если это имя является ссылкой вперед, то на первом проходе трансляции оно считается неописанным, а на втором проходе - описанным. Например:
.ERRNDEF N ;ошибка, если имя N еще ве описаво
Y DB N DUP(?)
.ERRB <текст>
.ERRNB <текст>
.ERRIDN <текст1>,<текст2> .ERRDIF <текст1>,<текст2>
94 Forced error - string blank
95 Forced error - string not blank
96 Forced error - strings identical
97 Forced error - strings different
Директива .ERRB генерирует ошибку, если указанный текст пустой, а директива .ERRNB - если текст непустой. Директива .ERRIDN генерирует ошибку, если указанные тексты совпадают, а директива .ERRDIF - если тексты различаются. Здесь под текстом понимается последовательность символов, заключенная в угловые скобки. Если любая из этих директив находится в макроопределении или блоке повторений, то в текстах можно указывать формальные параметры макроса или блока (при этом допускается использование макрооператора &), которые перед сравнением будут заменены на соответствующие фактические параметры. Например:
м macro х,Y
;;ошибка, если 1-й фактический параметр опущен ;;ошибка, если 2-й фактический параметр - это CS
.ERRB <Х>
.ERRIDN <Y>,<CS>
ENDM
14.6. Дополнительные директивы
В данном разделе вкратце описываются директивы ЯА, которые не были рассмотрены в предыдущих частях книги.
14.6.1. Указание типа процессора и набора команд
Как уже отмечалось, базовой системой команд процессоров фирмы Intel является набор команд процессора 8086 (8088): любая программа, использующая только эти команды, может быть без изменений выполнена и на любом другом процессоре. В то же время в каждой старшей модели имеются дополнительные команды. Например, в процессоре 80186 появились новые команды PUSHA, РОРА и др., а также были расширены возможности команд MUL, PUSH, SHR и др. В процессоре 80286 допускаются все команды процессора 80186 и введено несколько новых команд, которые, правда, разрешено использовать только в привилегированном (защищенном) режиме. В следующих процессорах также появились новые команды.
В самих процессорах фирмы Intel нет команд вещественной арифметики, и операции над вещественными числами реализуются либо программным путем (для каждой операции составляется своя процедура), либо за счет подключения арифметического сопроцессора (8087, 80287 и т. д.), который аппаратным способом реализует арифметические операции над вещественными числами. В последнем случае центральный процессор обращается к сопроцессору с помощью команды ESC (см. разд. 14.2), в которой указывается, какую операцию и над какими данными должен выполнить сопроцессор. При этом в ЯА для разных вариантов этой команды введены свои мнемонические обозначения, которые можно рассматривать как ’’команды сопроцессора". Отметим, что у сопроцессоров также соблюдается преемственность: более старшие модели могут выполнять все операции более младших моделей.