Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр.на_ЯВУ_уч.пос.DOC
Скачиваний:
23
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

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

  1. Что такое «ассемблер»?

  2. Что такое «макроассемблер»?

  3. В каких случаях используется язык Ассемблер?

  4. Что такое «встроенный ассемблер»?

  5. Что такое «OBJ-файл»?

  6. Какова структура asm-оператора?

  7. Как в asm-операторах записываются комментарии?

  8. Каков общий вид команды ассемблера (asm-оператора)?

  9. Все ли регистры можно изменять в asm-операторах?

  10. Как записываются локальные и глобальные метки в asm-операторах?

  11. Какие коды инструкций (команд) используются во встроенном ассемблере?

  12. Как обозначаются имена, совпадающие с зарезервированными словами?

  13. Как в asm-операторах Паскаля в выражениях трактуется имя переменной?

  14. Как в asm-операторах обозначается переменная с результатом функции?

  15. С помощью какой директивы создается подпрограмма, полностью написанная на языке ассемблер?

  16. Как можно напрямую обратиться к ячейкам памяти?

  17. К ячейкам какого размера можно обращаться напрямую?

  18. Как записывается адрес при обращении к ячейкам массива?

  19. Как выполнить доступ к портам ввода-вывода?

  20. Какой командой можно вызвать любое прерывание?

  21. Что является реакцией процессора на прерывание?

  22. Какой номер имеет наиболее часто используемое прерывание DOS?

  23. Какую директиву должна иметь подпрограмма, обслуживающая прерывание?

  24. Какова форма записи процедуры переопределения прерывания?

  25. Какова форма записи процедуры восстановления прерывания?

Глава 9. Модули §9.1. Основные понятия

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

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

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

Модуль – это совокупность или коллекция программных ресурсов, предназначенных для использования другими программами или модулями. Ресурсы – это любые программные объекты Паскаля, – константы, переменные, типы, подпрограммы.

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

Все программные ресурсы модуля делятся на две части:

1). Интерфейс. Здесь находятся видимые объекты, то есть те, которые можно использовать в других программах, и предназначенные именно для этих целей.

2). Реализация. Сюда помещают рабочие объекты, называемые невидимыми или скрытыми. Например, если модуль содержит подпрограмму универсального применения, то вызываемые этой подпрограммой процедуры и функции, содержащиеся в модуле, и используемые ею переменные могут иметь чисто внутренний характер и не должны использоваться другими программами.

В разделе реализации так же может находиться секция инициализации, содержащая любые операторы. Они будут выполняться сразу после запуска программы до операторов основной программы. Используется обычно для установки различных начальных значений. Если в Турбо Паскале секция инициализации начиналась со слова Begin, то в Delphi 1.0 для этих целей введено новое служебное слово Initialization.

Начиная с Delphi 2.0, здесь может использоваться и секция завершения (finalization), в которой выполняются действия, противоположные секции инициализации. Например, закрытие файлов, восстановление векторов прерываний и другие.

Таким образом, общая структура модуля следующая:

UNIT <имя модуля>

Interface

<описание видимых объектов>

Implementation

<описание скрытых объектов>

[ Begin {Initialization}

<операторы инициализации>

{ Finalization

<завершающие операторы> } ]

end.

Например, модуль, подключаемый при работе с комплексными числами:

Unit COMPLEX;

Interface

Type Complex = Record

Re,Im:Real;

end;

Function CADD (A,B:complex):complex;

Function CMUL (A,B:complex):complex;

Function CDIV (A,B:complex):complex;

... ...

Implementation

Function CADD;

... {тело функции}

Function CDIV;

Var X:Real; {скрытая переменная}

... ...

end.

При использовании процедур и функций есть некоторые особенности. Заголовок подпрограммы содержит всю информацию, необходимую для ее вызова: имя, количество и тип параметров, и для функций тип результата. Тело же подпрограммы содержит блок, раскрывающий его алгоритм. Можно считать, что заголовок подпрограммы является ее интерфейсом, а тело — реализацией. Поэтому в интерфейсной части модуля должны быть представлены только заголовки процедур и функций, доступные для других программ, по аналогии с опережающим описанием. Полные же описания с сокращенным заголовком помещают в раздел реализации.

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