Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы по асм.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
257.02 Кб
Скачать

Контрольные вопросы:

  1. Можно ли заменить команду STOSB командой STOSW?

  2. Какую операцию производят строковые инструкции автоматически?

  3. При применении строковых операций, можно ли в качестве регистра смешения использовать другие регистры, отличные от SI и DI?

  4. Что служит результатом сравнения двух строк при помощи команды CMPS?

  5. Используя какую строковую инструкцию можно присвоить значение элементам массива?

Лабораторная работа №7 п Составитель: преп.Каф.Информатики Аркабаев Нуркасым Кылычбекович роцедуры.

Цель работы:

  • ознакомить с основами работы с процедурами;

  • объяснить виды адресаций процедур (NEAR, FAR);

  • показать использование локальных переменных;

Теоретическая часть

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

Ассемблер позволяет вам описывать процедуры несколькими способами. В данной работе описываются процедуры NEAR и FAR, объявление языка процедур, использование в процедурах аргументов и переменных, сохранение регистров, вложенные процедуры и описание процедур методов для объектов.

Синтаксис определения процедур

Для описания процедур вы можете использовать директиву PROC. Директива имеет следующий синтаксис:

PROC имя [расстояние]

[ARG список_аргументов] [RETURN список_элементов];

[LOCAL список_аргументов]

[USES список_элементов]

.

.

.

ENDP [имя]

Ассемблер также воспринимает для определения процедур синтаксис MASM.

Описание процедур NEAR или FAR

Процедуры NEAR вызываются с помощью вызова ближнего типа и содержат ближний возврат управления. Вы должны вызывать их только в том же сегменте, в котором они определены. Вызов ближнего типа заносит адрес возврата в стек и устанавливает указатель инструктор (IP) в значение смешения процедуры. Поскольку сегмент кода (CS) не изменяется, процедура должна находиться в том же сегменте, что и вызывающая программа. Когда процессор обнаруживает возврат ближнего типа, он извлекает из стека адрес возврата и снова устанавливает в него IP. Сегмент кода не изменяется.

Процедура FAR вызывается с помощью вызова дальнего типа и содержит возврат дальнего типа. Процедуры FAR вы можете вызывать вне сегмента, в котором они определяются. Вызов FAR заносит в стек адрес в виде сегмента и смещения, а затем устанавливает CS:IP в адрес процедуры. Когда процессор обнаруживает возврат дальнего типа, он извлекает из стека сегмент и смещение адреса возврата и устанавливает в него CS:IP.

В процедурах NEAR и FAR используется одна и та же инструкция RET. Ассемблер использует расстояние процедуры для определения того, требуется возврат ближнего или дальнего типа. Аналогично, Ассемблер использует расстояние процедуры для определения того, требуется для ссылки на процедуру возврат ближнего или дальнего типа.

..

CALL test1 ; это дальний вызов

CALL test2 ; это ближний вызов

...