Возврат результата из процедуры




 

Существует три варианта возврата результата из процедуры:

- С использованием регистров.

- С использованием общей памяти.

- С использованием стека. Здесь возможны два варианта:

- Использование для возвращаемых аргументов тех же ячеек в стеке, которые применялись для передачи аргументов в процедуру.

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

 

 

Макросредства языка асемблера

4.5.1 Псевдооператоры equ и =

 

К простейшим макросредствам языка ассемблера можно отнести псевдооператоры equ и "=" (равно). Эти псевдооператоры предназначены для присвоения некоторому выражению символического имени или идентификатора. Впоследствии, когда в ходе трансляции этот идентификатор встретится в теле программы, макроассемблер подставит вместо него соответствующее выражение. В качестве выражения могут быть использованы константы, имена меток, символические имена и строки в апострофах. После присвоения этим конструкциям символического имени его можно использовать везде, где требуется размещение данной конструкции.

Синтаксис псевдооператора equ:

 

Синтаксис псевдооператора “=”:

 

имя_идентификатора = числовое_выражение

 

Несмотря на внешнее и функциональное сходство псевдооператоры equ и “=” отличаются следующим:

- из синтаксического описания видно, что с помощью equ идентификатору можно ставить в соответствие, как числовые выражения, так и текстовые строки, а псевдооператор “=” может использоваться только с числовыми выражениями;

- идентификаторы, определенные с помощью “=”, можно переопределять в исходном тексте программы, а определенные с использованием equ - нельзя.

 

Ассемблер всегда пытается вычислить значение строки, воспринимая ее как выражение. Для того, чтобы строка воспринималась именно как текстовая, необходимо заключить ее в угловые скобки: <строка>.

 

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

Псевдооператор equ удобно использовать для настройки программы на конкретные условия выполнения, замены сложных в обозначении объектов, многократно используемых в программе более простыми именами и т. п.

Псевдооператор “=” удобно использовать для определения простых абсолютных (то есть независящих от места загрузки программы в память) математических выражений. Главное условие то, чтобы транслятор мог вычислить эти выражения во время трансляции.

 

 

Макрокоманды

 

Идейно макрокоманда представляет собой дальнейшее развитие механизма замены текста. С помощью макрокоманд в текст программы можно вставлять последовательности строк (которые логически могут быть данными или командами) и даже более того - привязывать их к контексту места вставки.

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

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

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

 

Имя_макрокоманды macro список_аргументов

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

Endm

 

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

- В начале исходного текста программы до сегмента кода и данных с тем, чтобы не ухудшать читабельность программы. Этот вариант следует применять в случаях, если определяемые вами макрокоманды актуальны только в пределах одной этой программы.

- В отдельном файле. Этот вариант подходит при работе над несколькими программами одной проблемной области. Чтобы сделать доступными эти макроопределения в конкретной программе, необходимо в начале исходного текста этой программы записать директиву include имя_файла.

- В макробиблиотеке. Если у вас есть универсальные макрокоманды, которые используются практически во всех ваших программах, то их целесообразно записать в так называемую макробиблиотеку. Сделать актуальными макрокоманды из этой библиотеки можно с помощью все той же директивы include.

Если в программе некоторая макрокоманда вызывается несколько раз, то в процессе макрогенерации возникнет ситуация, когда в программе один идентификатор будет определен несколько раз, что, естественно, будет распознано транслятором как ошибка. Для выхода из подобной ситуации применяют директиву local, которая имеет следующий синтаксис: local список_идентификаторов.

 

 

Задание на выполнение

 

Модифицировать предыдущую программу в виде:

 

Вариант 1

1. Написать процедуру для вывода результата

2. Написать процедуру для ввода чисел

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

Передача параметров через регистры

 

Вариант 2

1. Написать процедуру для вывода результата

2. Написать макрос для ввода чисел

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

Передача параметров через стек

 

Вариант 3

1. Написать макрос для вывода результата

2. Написать процедуру для ввода чисел

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

Передача параметров через стек

 

Вариант 4

1. Написать макрос для вывода результата

2. Написать макрос для ввода чисел

3. Написать процедуру для расчета

Передача параметров через стек

 

Вариант 5

1. Написать процедуру для вывода результата

2. Написать процедуру для ввода чисел

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

Передача параметров через стек

 

Вариант 6

1. Написать процедуру для вывода результата

2. Написать макрос для ввода чисел

3. Написать процедуру для расчета

 

Передача параметров через стек

 

Вариант 7

1. Написать макрос для вывода результата

2. Написать процедуру для ввода чисел

3. Написать процедуру для расчета

Передача параметров через стек

 

Вариант 8

1. Написать процедуру для вывода результата

2. Написать процедуру для ввода чисел

3. Написать процедуру для расчета

Передача параметров через стек

 

Вариант 9

1. Написать макрос для вывода результата

2. Написать макрос для ввода чисел

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

Передача параметров через общую память

 

Вариант 10

1. Написать процедуру для вывода результата

2. Написать макрос для ввода чисел

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

Передача параметров через общую память

 

Вариант 11

1. Написать макрос для вывода результата

2. Написать процедуру для ввода чисел

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

Передача параметров через общую память

 

Вариант 12

1. Написать макрос для вывода результата

2. Написать макрос для ввода чисел

3. Написать процедуру для расчета

Передача параметров через общую память

 

Вариант 13

1. Написать процедуру для вывода результата

2. Написать процедуру для ввода чисел

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

Передача параметров через общую память

 

Вариант 14

1. Написать макрос для вывода результата

2. Написать процедуру для ввода чисел

3. Написать процедуру для расчета

Передача параметров через общую память

 

Вариант 15

1. Написать процедуру для вывода результата

2. Написать макрос для ввода чисел

3. Написать процедуру для расчета

Передача параметров через общую память

 

Вариант 16

1. Написать процедуру для вывода результата

2. Написать процедуру для ввода чисел

3. Написать процедуру для расчета

Передача параметров через общую память

 

Вариант 17

1. Написать макрос для вывода результата

2. Написать макрос для ввода чисел

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

Передача параметров через регистры

 

Вариант 18

1. Написать процедуру для вывода результата

2. Написать макрос для ввода чисел

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

Передача параметров через регистры

 

Вариант 19

1. Написать макрос для вывода результата

2. Написать процедуру для ввода чисел

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

Передача параметров через регистры

 

Вариант 20

1. Написать макрос для вывода результата

2. Написать макрос для ввода чисел

3. Написать процедуру для расчета

Передача параметров через регистры



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-08-26 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: