Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / GL13.doc
Скачиваний:
21
Добавлен:
20.05.2014
Размер:
209.92 Кб
Скачать

If not (ta eq TypeByte or ta eq TypeWord)

%OUT На входе должен быть массив слов или байтов!

%OUT Массив array этому условию не удовлетворяет!

%OUT

EXITM

ENDIF

If pattern gt 111b

%OUT В образце pattern могут быть установлены

%OUT только три младших бита.

%OUT

EXITM

ENDIF

mov si, OFFSET array ;; В SI — адрес массива

mov cx, len_of_array ;; В CX — количество элементов

mov dx, TA ;; В DX — тип элементов

mov bp, pattern ;; В BP — образец

call treat_array

jc error_label

ENDM

Директива EXITMиспользуется для досрочного выхода из макроса.

Встроенная функция (времени ассемблирования) TYPEвозвращает числовой код, соответствующий типу данных: 1 — для байтов, 2 — для слов, 4 — для двойных слов, остальные значения опустим.

Для комментариев используется повтор точки с запятой. Это делается для того, чтобы комментарии макроса не попадали в листинг и не увеличивали его длину.

Наконец, создадим файл с главной программой. Сначала сконструируем данные, на которых будем проверять правильность работы программы.

Нужно образовать массивы, элементы которых таковы, что они либо удовлетворяют, либо не удовлетворяют условию задачи, чтобы проверить правильность работы программы во всех возможных ситуациях.

Будем использовать образец, задаваемый как параметр в макросе, 101b. В нашем примере достаточно сконструировать массив всего из двух элементов: для одного элемента условие выполняется, а для другого — нет.

Первый элемент (рис.6.2):

7

6

5

4

3

2

1

0

1

1

0

1

0

1

0

1

=

установить

Рис.6.2.

Второй элемент (рис.6.3):

7

6

5

4

3

2

1

0

1

1

1

1

0

1

0

1

сбросить

Рис.6.3.

Итак, первый элемент 11010101 11010101, т.е. D5hD5h, а второй элемент 1111010101110101, т.е. F5h75h. Аналогичный тест предложим для слов: 00D5h80D5h, 00F5h00F5h.

main5v0.asm

COMMENT &

0. Иванов И.И. Дан массив байтов (слов) указанного размера.

Над каждым элементом массива выполнить операцию: если битовое

поле 6:4 совпадает с битовым полем 2:0 и с заданным образцом,

то установить старший бит элемента, иначе — сбросить его.

&

JUMPS ; Оптимизация переходов

.286 ; Разрешены инструкции 286-го процессора

INCLUDE macro.inc ; Включить общий файл макросов

INCLUDE macr5v0.inc ; Включить специальный файл макросов

;

EXTRN treat_array:PROC

.MODEL small

.STACK 100h

.DATA

arrb DB 0D5h,0F5h

Len_of_arrb = $ - arrb

arrw DW 00D5h,00F5h

Len_of_arrw = ($ - arrw) SHR 1

arrd DD 0FFFFFFFFh

Len_of_arrd = ($ - arrd) SHR 2

msg_err DB "Массив пуст!",CRLFT

.CODE

start:

mov ax,@data

mov ds,ax

treat arrb, Len_of_arrb, 101B, error

treat arrw, Len_of_arrw, 101B, error

treat arrw, Len_of_arrw, 1101B, error

treat arrd, Len_of_arrd, 10B, error

exit

error: message msg_err

exit 1

END start

Содержимое файла macro.inc описано в 5.2.3.

Соседние файлы в папке Лекции