«Связь ассемблерных модулей с программами на языках высокого уровня»
Выполнил: Феми-Оке Антони. Группа №1303
Факультет КТИ
Преподаватель: Лавров А.А.
Санкт-Петербург
1) Задание:
Вариант №11
На языке высокого уровня (Pascal или С) генерируется массив псевдослучайных целых чисел, изменяющихся в заданном диапазоне и имеющих равномерное или гауссовское (ограниченное интервалом [Mx-3*S,Mx+3*S]) распределение. Необходимые датчики псевдослучайных чисел находятся в каталоге RAND_GEN (пpи его отсутствии получить у пpеподавателя).
Далее должен вызываться ассемблерный модуль(модули) для формирования распределения количества попаданий псевдослучайных целых чисел в заданные интервалы. В общем случае интервалы разбиения диапазона изменения псевдослучайных чисел могут иметь различную длину.
Результирующий массив частотного распределения чисел по интервалам, сформированный на ассемблерном уровне, возвращается в программу, реализованную на ЯВУ, и затем сохраняется в файле и выводится на экран средствами ЯВУ.
Исходные данные:
1. Длина массива псевдослучайных целыхчисел - NumRanDat (<= 16K)
2. Диапазон изменения массива псевдослучайных целых чисел
[Xmin, Xmax]
3. Количество интервалов, на которые разбивается диапазон
изменения массива псевдослучайных целых чисел - NInt ( <=24 )
4. Массив левых границ интервалов разбиения LGrInt
(должны принадлежать интервалу [Xmin,Xmax])
Результаты:
1. Текстовый файл, строка которого содержит:
- номер интервала,
- левую границу интервала,
- количество псевдослучайных чисел, попавших в интервал.
Количество строк равно числу интервалов разбиения.
2. График, отражающий распределение чисел по интервалам.
(необязательный результат)
Для бригад с нечетным номером: подпрограмма формирования распределения количества попаданий псевдослучайных целых чисел в заданные интервалы реализуется в виде одного асемблерного модуля, сразу получающего требуемое распределение и возвращающего его в головную программу, написанную на ЯВУ.
2) Общие сведения:
Связь ассемблера с ЯВУ.
Существует соглашения для связи ассемблера с каждым из языков. Здесь есть свои особенности.
1. Способ передачи управления (тип вызова). В Pascal, если ассемблеровская процедура описана в основной программе или в implementation, то она вызывается как NEAR; при описании в interface–вызов FAR.
2. Сегментация и модели памяти. Если выбрана модель .LARGE, то стек надо описывать как .FARSTACK и он уже не будет относиться к группе DGROUP.
3. Особенности описания общих и предопределенных переменных. В Pascal ограничений нет, но рекомендуется начинать переменные с заглавной буквы; в С-переменных необходимо начинать с символа подчеркивания «_»
4. Управление регистрами. DS – нужно следить за ним. РОН нужно сохранять или в головной программе, или в процедуре на ассемблере.
5. Способы передачи параметров. Как правило, параметры передаются через кадр стек, размещение параметров идет в различном порядке.
6. Способ возвращения результата. Возвращение результатов может быть реализовано через стек, AX (BYTE, WORD), DX:AX (DWORD), ST(0) – вершина стека x87 (FLOAT).
7. Способ восстановления стека. Pascal – в вызываемой программе, в С – вызывающей программе (для возможности оптимизации)
8. Способы задания и вызова ассемблерного модуля:
а) Раздельная компиляция. Модули на различных языках компилируются отдельно и в вызывающем модуле указан специальный оператор описания модуля на другом языке и его загрузки в виде объекта файла.
б) Встроенная компиляция. Фрагмент или команда ассемблера указывается как встроенный оператор, и сам компилятор вызывает ассемблерный транслятор автоматически.
В данной программе используется встроенная компиляция.