Пиши Дома Нужные Работы

Обратная связь

Модульная структура программ на языке Ассемблера.

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

Рассмотрим процесс объединения отдельных модулей (оформленных в виде отдельных asm-файлов) в единый загрузочный модуль.

Пусть в программе имеется два модуля Ml и М2. Пусть в модуле М2 описана процедура Р, к которой будет обращаться модуль Ml, и пусть модуль М2 пользуется переменной Х и константой К из модуля Ml. Чтобы при трансляции не возникло сообщение об ошибке «неописанное имя», транслятору ассемблера сообщается, что имена Х и К, хотя и используются в М2, описаны в другом модуле. Такое сообщение делается с помощью директивы

EXTRN <имя>:<тип>,..., <имя>:<тип>

где <тип> - это BYTE, WORD, DWORD, ABS, NEAR, FAR.

В нашем случае в модуле М2 надо указать директиву EXTRN X:BYTE, K:ABS. Она сообщает ассемблеру, что имена Х и К являются внешними по отношению к данному модулю. В модуле Ml следует поместить директиву EXTRN Р: PAR, сообщающую, что Р - это процедура из другого модуля и вызов ее должен быть дальним. В модуле, где описаны имена К и Х (т.е. в Ml) надо поместить директиву PUBLIC <имя>,....,<имя>

В данном случае в модуле Ml надо записать директиву PUBLIC X,K. Этой директивой сообщается, что имена Х и К данного модуля разрешено использовать в других модулях. Имена, описанные в модуле и доступные другим модулям, по отношению к этому модулю называются общими. Итак, если в каком-то модуле программы некоторое имя описано как внешнее, то в каком-то другом модуле это имя обязательно должно быть объявлено общим. С учетом сказанного модули Ml и М2 должны иметь следующий вид



;модуль Ml

EXTRN Р: FAR

PUBLIC Х, K

X DB ?

К EQU 100

CALL Р

; модуль М2

EXTRN X:BYTE, K:ABS

PUBLIC P

P PROC FAR

MOV X, 0

MOV АХ,К

Модули транслируются отдельно. Затем при компоновке они объединяются в единую машинную программу с помощью команды:

LINK M1.OBJ+...+Mk.OBJ, M.EXE;

Работа с командой прерываний INT.

Особым видом являются подпрограммы, вызываемые по прерыванию командой INT. Прерывания бывают двух видов:

ü аппаратные – это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить данное устройство:

ü программные – создается программами BIOS или DOS для вызова сервисных подпрограмм.

Команда прерывания INT number

вызывает подпрограммы операционной системы. Эти прерывания имеют номера от 0 до FFh. Перед вызовом команды INT, в регистр AX помещают номер функции, который определяет необходимую подпрограмму. Другие регистры тоже могут использоваться в прерывании.

Процессор выполняет команду прерывания, используя таблицу векторов прерываний. Таблица векторов прерываний занимает самые нижние 1024 байта памяти. Каждый элемент таблицы – это 32-битный адрес «сегмент: смещение», указывающий на подпрограммы операционной системы. Когда происходит вызов команды INT процессор производит следующие действия:

1). Параметр number сообщает процессору местонахождение вектора в таблице векторов прерываний.

2). Процессор передает управление по указанному в векторе прерываний адресу процедуры обработки прерывания (ПОП).

3). Подпрограмма DOS или BIOS, расположенная по указанному адресу начинает выполняться и передает управление назад, когда будет достигнута команда IRET.

4). Команда возврата из прерывания IRET отдает управление вызывающей программе, которая продолжает работу со следующей за прерыванием командой.

Задания для индивидуальной работы.

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

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

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

3. Разработать две подпрограммы, одна из которых соединяет две строки в одну, а другая обрезает строку до заданной длины (или дополняет пробелами, если длина строки меньше заданной).

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

5. Разработать две подпрограммы, одна из которых сравнивает две строки по лексикографическому порядку, а другая обменивает значения двух строк. Разработать программу, которая вводит с клавиатуры несколько строк (конец ввода - пустая строка) и сортирует их в лексикографическом порядке.

6. Разработать подпрограмму, которая разбивает заданную строку на две части: первое слово строки (до первого пробела) и остаток строки (пробелы после первого слова отбрасываются). Раз­работать программу, которая вводит с клавиатуры строку и выводит каждое слово с новой строки.

7. Разработать подпрограмму, которая переставляет символы заданной строки в обратном порядке. Разработать программу, которая вводит с клавиатуры строку и переставляет в обратном порядке символы в каждом слове (слова разделяются пробелами).

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

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

10. Разработать две подпрограммы, одна из которых преобразует любую заданную букву в заглавную (в том числе для русских букв), а другая - преобразует букву в строчную.

11. Разработать программу, которая вводит с клавиатуры строку и заменяет первые буквы всех слов на заглавные, а остальные буквы – на строчные.

12. Дано натуральное число n. Вывести на экран все простые числа из отрезка [1, n].

13. Вычислить b = 53 + (а+1) – 1. Для вычисления хn использовать процедуру возведения в степень через умножение.

14. Описать процедуру sum (x, y, z), которая присваивает вектору z сумму векторов х и у. Использовать ее для вычисления d = a + b + c.

15. Описать процедуру mах (х, у), которая присваивает х большее из целых чисел х и у, а у – меньшее.

16. *Даны три натуральных числа. Определить их наибольший общий делитель.

Контрольные вопросы и задания.

1. Что такое «ближние» и «дальние» подпрограммы?

2. Как определяется, «ближний» или «дальний» вариант команды call использован в программе?

3. Опишите механизм передачи параметров через регистры по значению.

4. Опишите механизм передачи параметров через регистры по ссылке.

5. Может ли массив быть параметром процедуры? Как в этом случае возможна передача параметра?

6. Можно ли адресовать параметры в стеке через регистр SP, не используя ВР?

7. Что означает операнд команды ret?

8. Какой последовательностью команд можно было бы заменить команду ret 6?

9. Что называют «входными» действиями процедуры?

10. Изобразите графически состояние стека после вызова процедуры.

11. Что называют «выходными» действиями процедуры?

12. Изобразите графически состояние стека перед возвратом из процедуры.

13. Каким образом разрешается проблема одновременного использования одних и тех же регистров и основной программой и процедурой?

14. Понятие о прерывании. Виды прерываний.

15. Объясните механизм обработки прерывания.

16. Генерация программных прерываний.

17. Назначение директив EXTRN и PUBLIC.

18. Опишите технологию объединения нескольких модулей в одну программу.

Лабораторная работа № 6






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.