Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
38
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Перечисление условных директив.

if выражение

Если выражение не равно нулю, ассемблер обрабатывает операторы в условном блоке

ife выражение

Если выражение равно нулю, ассемблер обрабатывает операторы в условном блоке

if1

Если осуществляется первый проход, ассемблер обрабатывает операторы в условном блоке

if2

Если осуществляется второй проход, ассемблер обрабатывает операторы в условном блоке

ifdef идентификатор

Если идентификатор определен в программе, или объявлен как extrn, ассемблер обрабатывает операторы в условном блоке

ifndef идентификатор

Если идентификатор не определен в программе, или не объявлен как extrn, ассемблер обрабатывает операторы в условном блоке

ifb <аргумент>

Если аргументом является пустой символ, ассемблер обрабатывает операторы в условном блоке

ifnb <аргумент>

Если аргументом является не пустой символ, ассемблер обрабатывает операторы в условном блоке

if1dn <арг1>,<арг2>

Если строка первого аргумента идентична строке второго аргумента, ассемблер обрабатывает операторы в условном блоке

ifdif <арг1>,<арг2>

Если строка первого аргумента отличается от строки второго аргумента, ассемблер обрабатывает операторы в условном блоке

Пример использования ifnb.

dos21 macro dosfunc, dxaddres

mov ah,dosfunc

ifnb <dxaddres>

mov dx,offset dxaddres

endif

entif

int 21h

endm

Команда для ввода символа с клавиатуры можно использовать макрокоманду:

dos21 01

Тогда макрорасширение будет:

mov ah,01

int 21h

Для ввода строки в dx необходимо занести адрес строки:

dos21 0ah,field

В результате

mov ah,0ah

mov dx,offset field

int 21h

Пример использования макроопределений.

Использование макроопределений делает ассемблерную программу легко читаемой. Предположим нам нужна процедура позволяющая определить является ли некоторый символ цифрой в ASCII-коде или нет. Символ передается в эту процедуру через al. Процедура должна возвратить значение true, если содержимое al находится в диапазоне 0...9 и false в обратном случае.

a_digit proc

cmp al,’0’

jb _false

cmp al,’9’

ja _false

clc

ret

_false: stc

ret

endp

Эта программа очень проста, однако команды cmp, jb и ja делают её непонятной с первого взгляда.

Используя соответствующее макроопределение эта процедура м.б. такой:

a_digit proc

if_al {,’0’ _false

if_al },’9’ _false

ret_true

_false: ret_false

endp

Это транслируется точно в такой же код:

ret_false macro

stc

ret

endm

ret_true macro

clc

ret

endm

Если необходимо написать:

if_al < 12, goto_label

С помощью макроопределения можно сделать так:

if_al {,12,_label

можно использовать:

{ - меньше

{= - меньше или равно

= - равно

{} - не равно

} - больше

}= - больше или равно

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]