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

Процедуры в языке ассемблера

Для оформления процедур как отдельных объектов существует специальная директива:

PROC/ENDP

И машинная команда RET

Процедуры, так же как и макрокоманды, ценны тем, что могут быть активизированы в любом месте программы. Процедурам, как и макрокомандам, могут быть переданы некоторые аргументы, что позволяет, имея одну копию кода в памяти изменять её для каждого конкретного случая использования.

Возможные варианты размещения процедур в программе:

  • В начале программы до первой исполняемой команды

  • В конце программы, после команды, возвращающей управление ОС

  • Тело процедуры располагается внутри другой процедуры

  • В другом модуле

Т.к. отдельный модуль – это функционально-автономный объект, то он ничего не должен знать о внутреннем устройстве других модулей и наоборот. Каждый модуль должен иметь такие средства, с помощью которых он извещал бы транслятор о том, что некоторый объект должен быть видимым вне этого модуля. Это позволит транслятору правильно сформировать машинные команды. На своём этапе компоновщики произведут настройку модулей и разрешат все внешние ссылки в объединяемых модулях.

Для того чтобы объявить о подобного рода видимых из вне объектах, программа должна использовать 2 директивы:

Extrn имя : тип, … , имя:тип

Public имя , … , имя

Директива extrn предназначена для объявления некоторого имени внешним по отношению к данному модулю.

Директива public предназначена для объявления некоторого имени определённого в этом модуле и видимого в других модулях.

В синтаксисе имя – это идентификатор, определённый в другом модуле. В качестве него могут выступать

  1. Имена переменных, определённых директивами db или dw.

  2. Имена процедур

  3. Имена констант определённых операторами «=» и “equ”

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

Имя – это…

Возможные значения

Имя переменной

Byte, word, dword, pword, fword, qword, tbyte

Имя процедуры

Near, far

Имя константы

Abs

Аргумент – это ссылка на некоторые данные, которые требуются, для выполнения возложенных на модуль функций и разрешённых вне этого модуля. Аргументы бывают формальными и фактическими.

Формальный аргумент – это место-держатель для действительных данных, которые будут подставлены с помощью фактического аргумента. Фактический аргумент – это то, что передаётся на место формального аргумента.

Существующие варианты передачи аргумента в модуль:

  1. Через регистр

  2. Через общую область памяти

  3. Через стек

  4. С помощью директивы extrn и public

Модульное программирование – 2 Передача аргумента через регистр

Это наиболее простой в реализации способ передачи данных. Данные переданные подобным способом становятся доступными немедленно после управления передачи процедуре. Этот способ наиболее эффективен при небольшом объеме передаваемых данных.

Ограничения на способ передачи аргументов через регистр:

  • Небольшое число доступных для пользователя регистров

  • Нужно постоянно помнить о том, какая информация в каком регистре находится

  • Ограничение размера передаваемых данных размерами регистра. В случае превышения необходимо передавать не сами данные, а указатели на них