Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod.rtf
Скачиваний:
10
Добавлен:
09.11.2019
Размер:
177.25 Кб
Скачать

1.2 Пpимеpы использования макpоязыка. Обсуждение.

Рассмотрим несколько простых примеров.

Пример 1. Макроопределение для вычисления суммы двух слагаемых.

PLUS macro &result,&arg1,&arg2

lda &arg1 ; поместить первое слагаемое в А

add &arg2 ; прибавить второе слагаемое

sta &result ; сохранить результат

mend

Пример 2. Фрагмент программы на макроязыке, использующей

макроопределениe PLUS.

....

PLUS z,a,c ; Макрокоманда PLUS c фактическими параметрами z,a,c

PLUS u,u,=1 ; Ta же макрокоманда с параметрами u,u,=1 (третий параметр

; литерал)

....

Пример 3. Макроопределение для ввода/вывода числа.

Здесь один из параметров используется в поле кода операции.

TRANSFER macro &IO_oper,&data

ldy &data

&IO_oper

sty &data

mend

Пример 4. Использование макрокоманды TRANSFER.

TRANSFER in, word ; ввод из порта в слово word

TRANSFER out, area ; вывод в порт из слова area

Пример 5. Макроопределение для вычисления абсолютной величины числа.

ABS macro &data,&result

lda &data

jns *+2

neg

sta &result

mend

Пример 6. Программа на макроязыке, использующая макроопределения

TRANSFER, ABS и PLUS. В ней выполняется ввод двух чисел и

подсчитывается сумма их абсолютных величин.

TRANSFER in,_A

TRANSFER in,_B

ABS _A,_absA

ABS _B,_absB

PLUS _absA,_absB,sum

TRANSFER out,SUM

stop

_A bss 1

_B bss 1

_absA bss 1

_absB bss 1

sum bss 1

end

В результате макрогенерации будет получен текст

ldy _A

in

sty _A

ldy _B

in

sty _B

lda _A

jns *+2

neg

sta _absA

lda _B

jns *+2

neg

sta _absB

lda _absA

add _absB

sta sum

ldy sum

out

sty sum

stop

_A bss 1

_B bss 1

_absA bss 1

_absB bss 1

sum bss 1

end

Как видно из рассмотренных примеров, макроязык

позволяет вводить новые операции, которые отсутствуют в

исходном языке ассемблера. Макроопределения имеют

определенное сходство с подпрограммами, но в то же время

существенно отличаются от них. Сходство состоит в том, что с

использованием и макрокоманд и подпрограмм можно "расширить"

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

макроопределения для определения новых операции. Различие

заключается в использовании подпрограмм и макрокоманд. При

использовании подпрограммы ее вызов состоит в переходе на

первую команду этой подпрограммы и выполняется во время

выполнения программы. Код подпрограммы существует в одном

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

замена на текст соответствующих макроопределений. Эта замена

выполняется во время макроге- нерации, т.е. до выполнения

самой программы. При этом если одна макрокоманда была

использована несколько раз, то происходит размножение текста

соответ- ствующего ей макроопределения. При использовании

подпрограмм достигается экономия памяти за счет того что код

подпрограммы не повторяется при каждом обращении к ней. При

использовании макрокоманд экономится время выполнения за

счет исключения дополнительных команды, связанных с

передачей параметров подпрограмме и перехода на нее. Обычно

использование макрокоманд на практике оказывается

оправданным в случаях когда требуется ускорить критический

участок программы за счет тщательно написанных небольших

макроопределений.

2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. После вступительного коллоквиума получить задание.

2. Разработать алгоритм решения задачи.

3. Написать макроопределения и тщательно отладить их.

4. Написать программу, использующую макроопределения, и отладить ее.

5. Составить отчет по pаботе. Отчет должен содержать

- развернутую постановку задачи, включая необходимое

математическое обоснование;

- исходный текст программы на макроязыке;

- листинг трансляции исходной программы;

- результаты выполнения контрольного примера.

3. ВАРИАНТЫ ЗАДАНИЙ

( ВНИМАНИЕ : Приводмые ниже форматы макроопределений,

их имена, параметры, число параметров и порядок их

следования являются рекомендательными, а не обязательными. )

1. Макроопределение для копирования массива

COPY macro &dst,&src,&len

...

mend

и для вводa/вывода массивов

TRBLOCK macro &IO_oper,&area,&length

....

mend

и программа для ввода блока и вывода его в обратном порядке.

2. Макроопределение для вычисления факториала

FACT macro &n,&result

....

mend

и вычисление числа сочетаний с использованием разработанного

макроопределения.

3. Макроопределения для вычисления суммы элементов

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

SUM macro &array,&length,&result

....

mend

SWAP macro &area1,&area2

....

mend

и сортировка массива массивов в порядке убывания суммы

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

4. Макpоопеделения для сложения и умножения простых

дробей.

ADDFR macro &a1,&b1,&a2,&b2,&c,&d

....

mend

MULFR macro &a1,&b1,&a2,&b2,&c,&d

....

mend

и программа умножения матриц 2*2, элементами которых

являются простые дроби.

5. Макроопределения для доступа к элементам матрицы

(хранение по строкам)

GetMxEl macro &matr,&i,&j,&lrow,&result

....

mend

PutMxEl macro &matr,&i,&j,&lrow,&data

....

mend

и программа транспонирования матриц, использующая эти

макроопределения.

6. Макроопределения для работы с комплексными числами

ADDC macro &ReA,&ImA,&ReB,&ReB,&ReRes,&ImRes

...

mend

SUBB macro &ReA,&ImA,&ReB,&ReB,&ReRes,&ImRes

...

mend

MULC macro &ReA,&ImA,&ReB,&ReB,&ReRes,&ImRes

...

mend

DIVC macro &ReA,&ImA,&ReB,&ReB,&ReRes,&ImRes

...

mend

и программа вычисления выражения (a+b*c)/d, где a,b,c,d -

комплексные числа (деление целочисленное).

7. Макроопределения для вычисления суммы квадратов

элементов массива (т.е. квадрата нормы) и для перестановки

массивов

NORM2 macro &array,&len,&result

...

mend

SWAP macro &array1,&array2,&len

...

mend

и программа сортировки матрицы в порядке возрастания

квадрата нормы строк (хранение по строкам).

8. Макроопределение для выполнения сложения c

использованием команд sub, sta, jz ( использование дpугих

команд запрещено! )

ADDLTD macro &a,&b,&res

...

mend

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

разрешенные команды sub, sta, и jz и команды ввода-вывода.

9. Макроопределения для сравнения двух элементов массива

и для перестановки двух элементов массива

WORDCOMP macro &array1,&index1,&array2,&index2

...

mend

SWAP macro &array1,&index1,&array2,&index2

...

mend

и программу сортировки введенного массива.

10. Макроопредеоения для организации цикла

INITC macro &index

. . .

mend

NEXTC macro &index,&limit,&labal

. . .

mend

и макроопределение для извлечения элемента массива по идексу

GETV macro &array,&index

. . .

mend

и программу поиска и вывода элемента массива, максимального по

абсолютной величине.

11. Макроопредеоения перестановки массивов

COPY macro &dst,&src,&len

...

mend

и макроопределение отыскания максимума в массиве

MAXITEM macro &array,&length

. . .

mend

и программу сортировки введенной квадратной матрицы

( хранение по строкам ) по убыванию значений максимальных

элементов в строке

4. Вопpосы и задания для самопpовеки

1. Какие действия выполняются с использованием

следующих макроопределений ?

а) SWAP macro &a,&b б) EXCHANGE macro &a,&b

push sta *+2

lda &a jmp *+2

push nop

lda &b lda &a

sta &a sta *+2

pop jmp *+2

sta &b nop

pop lda &b

mend sta &a

lda *-7

sta &b

lda *-9

mend

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