
- •Л Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович абораторная работа №1 Начало работы на языке ассемблера
- •Теоретическая часть
- •Задание
- •Контрольные вопросы.
- •Лабораторная работа №2 д Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович ирективы языка ассемблера
- •Теоретическая часть
- •Задания (2 часа)
- •Контрольные вопросы
- •Лабораторная работа №3 к Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович оманды пересылки данных. Стек.
- •Теоретическая часть
- •Команды пересылки данных
- •Задание
- •Контрольные вопросы:
- •Лабораторная работа №4 а Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович рифметические операции. Битовые команды.
- •Теоретическая часть
- •Битовые команды
- •Задание
- •Контрольные вопросы:
- •Теоретическая часть
- •Задание
- •1. Предварительная подготовка
- •2 Порядок выполнения работы на эвм
- •Контрольные вопросы:
- •С Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович троковые функции и массивы (4 часа).
- •Теоретическая часть Строковые инструкции
- •Инициализация массивов
- •Задание
- •Контрольные вопросы:
- •Лабораторная работа №7 п Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович роцедуры.
- •Теоретическая часть
- •Работа команд ret и retf
- •Задание
- •Программа №7.1
- •Контрольные вопросы
Работа команд ret и retf
Алгоритм работы: Работа команд зависит от типа процедуры:
для процедур ближнего типа — восстановить из стека содержимое ip;
для процедур дальнего типа — последовательно восстановить из стека содержимое ip и сегментного регистра cs.
если команда ret имеет операнд, то увеличить содержимое sp на величину операнда число;
Состояние флагов после выполнения команды не меняется.
Применение: Команду ret необходимо применять для возврата управления вызывающей программе из процедуры, управление которой было передано по команде call. На самом деле микропроцессор имеет три варианта команды возврата ret - это ret, ее синоним retn, а также команда retf. Они отличаются типами процедур, в которых используются. Команды ret и retn служат для возврата из процедур ближнего типа. Команда retf — команда возврата для процедур дальнего типа. Какая конкретно команда будет использоваться, определяется компилятором; программисту лучше использовать команду ret, и доверить транслятору самому сгенерировать ее ближний или дальний вариант. Количество команд ret в процедуре должно соответствовать количеству точек выхода из нее. Некоторые языки высокого уровня, к примеру Pascal, требуют, чтобы вызываемая процедура очищала стек от переданных ей параметров. Для этого команда ret содержит необязательный параметр число, который, в зависимости от установленного атрибута размера адреса, означает количество байт или слов, удаляемых из стека по окончании работы процедуры
Синтаксис директив ARG и LOCAL
Приведем синтаксис определения передаваемых процедуре аргументов:
ARG аргумент [,аргумент]... [=идентификатор]
[RETURNS аргумент] [,аргумент]]
При определении локальных переменных процедуры используется следующий синтаксис:
LOCAL аргумент [,аргумент]... [=идентификатор]
Отдельные аргументы имеют следующий синтаксис:
имя_аргумента [[выражение_счетчик_1]]
[: сложный_тип [:выражение_счетчик_2]]
где "сложный_тип" - это тип данных аргумента. Он может быть либо простым типом, либо сложным выражением-указателем.
"Выражение_счетчик_2" задает, сколько элементов данного типа определяет аргумент. Например, в определении аргумента:
ARG tmp:DWORD:4
определяется аргумент с именем "tmp", состоящий из 4 двойных слов.
По умолчанию "выражение_счетчик_2" имеет значение 1 (кроме аргументов типа BYTE). Так как вы не можете занести в стек байтовое значение, для аргументов типа BYTE значение счетчика по умолчанию равно 2, что обеспечивает для них в стеке размер в слово.
Аргументы и переменные определяются в процедуре как операнды в памяти относительно BP. Передаваемые аргументы, определенные с помощью директивы ARG, имеют положительное смещение относительно BP. Локальные переменные, определенные с помощью директивы LOCAL, имеют отрицательное смещение от BP. Приведем пример:
...
func1 PROC NEAR
ARG a:WORD,b:WORD:4,c:BYTE=d
LOCAL x:DWORD,y=WORD:2=z
...
Здесь a определяется, как [bp+4], b определяется, как [bp+6], c определяется, как [bp+14], а d - как 20. x - это [bp-2], y - [bp-6], а z - 8.