Мегаобучалка Главная | О нас | Обратная связь


CALL_NODA, B ; наглядное обращение к ПП с параметрами.



2018-07-06 555 Обсуждений (0)
CALL_NODA, B ; наглядное обращение к ПП с параметрами. 0.00 из 5.00 0 оценок




mov CX, AX ; (CX) = NOD(A,B)

CALL_NOD C, D ; (AX) = NOD(C,D)

add CX, AX ; (CX) = NOD(A,B) + NOD(C,D)

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

Пример 1. Если в макроопределении используются метки, но нетдирективы Local , то после макрогенерации будет сообщение обошибке – дублирование меток:

Вычислить остаток от деления одного числа на другое с помощью вычитания (числа натуральные, r1 и r2 - регистры).

MD Macro r1, r2 ; r1 = r1 mod r2

Local M, M1

M: cmp r1, r2 ; while r1 >= r2 DO r1 = r1 – r2

Jb M1

Sub r1, r2

Jmp M

M1:

Endm

Обращения к макросу MD: (r1 = AX, r2 = BX)

-----------------

MD AX, BX ??0000 : cmp AX, BX

Jb ?? 0001

Sub AX, BX

Jmp ?? 0000

??0001: ----------------

2) MD CX, DX ; (r1 = CX, r2 = DX)

---------------------

??0002 : cmp CX, DX

Jb ??0003

Sub CX, DX

Jmp ??0002

??0003: ---------------------

Макрогенератор, встретив директиву LocalM, M1, будет заменять метки M и M1 на специальные имена вида ??хххх,

где хххх – четырехзначное 16-ричное число от 0000÷FFFF.

Директивы условного ассемблирования (ДУА).

ДУА управляют процессом ассемблирования путем подключения илиотключения фрагментов исходного текста программы.

Общий вид:

1) if<выражение>

If- часть

[ else

else-часть ]

Endif

2) if <выражение >

If-часть

elseif<выражение 1>

Elseif-часть 1

elseif<выражение 2>

Elseif-часть 2

-------------------------------

[ else

else-часть ]

Endif

ДУА в форме 2) используется аналогично операторам выбора в языках высокого уровня. ДУА много, рассмотрим некоторые из них:

1) if<константное выражение>if-часть

if-часть ассемблируется, включается в исходный текст программы, если значение выражения - истина, т.е. не равно нулю, в противном случае работает else-часть, если она есть, если else-части нет, выполняется следующий за директивой if оператор.

А) ife константное выражение

В) elseife константное выражение

if-часть работает, если выражение ложно, равно нулю.

3) a) ifdefметка ; if-часть работает, если

b) elseifdef метка ; указанная метка определена

4) a) ifndefметка ; if-часть работает, если

b) elseifndef метка ; указанная метка не определена

5) a) ifb<аргумент> ; if-часть работает, если

b) elseifb<аргумент> ; значением аргумента является пробел

6) a) ifnb<аргумент> ; if-часть работает, если значением

b) ifnb<аргумент> ; аргумента является не пробел

7) a) ifdif<арг1>, <арг2> ;

b) elseifdif<арг1>, <арг2>;

if-часть работает, если аргументы различны, прописные и строчные буквы различаются

8) a) ifdifi<арг1>, <арг2>

b) elseifdifi<арг1>, <арг2>

if-часть работает, если аргументы различны, прописные и строчные буквы не различаются

9) a) ifidn<арг1>, <арг2>

b) elseifidn<арг1>, <арг2>

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

10) a) ifidni<арг1>, <арг2>

b) elseifidni<арг1>, <арг2>

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

Здесь угловые скобки обязательны.

Примеры использования ДУА

1) Использование ДУА непосредственно в Ассемблере. При отладке большой программы обычно используются отладочные печати для проверки правильности работы отдельных ее участков. В отлаженной программе эти печати удаляются. Но если отладка выполняется в несколько этапов, то добавлять печати в программу и исключать их – это тоже громоздкая работа, во время которой можно внести новые ошибки.

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

DebugEQU 1 - отладка, debugEQU 0 - счет

А в программе должно быть: movx, AX

If debug

OutInt x

Endif

Mov BX, 0

После макрогенерации в программе появится текст

если debug <> 0: mov x, AXесли debug = 0: mov x, AX

OutInt x mov BX, 0

mov BX, 0

Здесь OutInt – макрокоманда обращения к процедуре вывода.

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

mov x, AX

mov CL, debug

cmp CL, 1

jne L

OutInt x

L: movBX, 0

----------------------------

Однако, этот текст всегда будет занимать место в памяти и, если такихучастков будет много, то исходный текст будет громоздким и времявыполнения программы будет существенно больше. При использовании условной генерации время тратится только на этапе ассемблирования. При счете этих операций в исходном тексте не будет.



2018-07-06 555 Обсуждений (0)
CALL_NODA, B ; наглядное обращение к ПП с параметрами. 0.00 из 5.00 0 оценок









Обсуждение в статье: CALL_NODA, B ; наглядное обращение к ПП с параметрами.

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (555)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)