Материал: Lariz

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

mov a, e).Ассемблерныекодыввидекомандассемблеравставляютсявax mov b, e).Ассемблерныекодыввидекомандассемблеравставляютсявdx mov c, e).Ассемблерныекодыввидекомандассемблеравставляютсявcx mov d, [e).Ассемблерныекодыввидекомандассемблеравставляютсявbp+8] mov e).Ассемблерныекодыввидекомандассемблеравставляютсяв, [e).Ассемблерныекодыввидекомандассемблеравставляютсявbp+12] mov f, [e).Ассемблерныекодыввидекомандассемблеравставляютсявbp+16]

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

Вслучае быстрого вызова транслятор Си добавляет к имени значок @ спереди, что искажает имена при обращении к ним в ассемблерном модуле.

Возврат результата из процедуры Чтобы возвратить результат в программу на С из процедуры на ассемблере,

перед возвратом управления в вызываемой процедуре (на языке ассемблера) необходимо поместить результат в соответствующий регистр

Задание

На языке высокого уровня (Pascal или С) генерируется массив псевдослучайных целых чисел, изменяющихся в заданном диапазоне и

имеющих

равномерное

распределение.

Необходимые

датчики

псевдослучайных чисел

находятся в каталоге

Tasks\RAND_GEN

(пpи его

отсутствии программу датчика получить у пpеподавателя).

Далее должен вызываться ассемблерный модуль(модули) для формирования

распределения количества попаданий псевдослучайных целых

чисел в

заданные интервалы. В общем случае интервалы разбиения

диапазона

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

6

Исходные данные.

1.Длина массива псевдослучайных целыхчисел - NumRanDat (<= 16K, К=1024)

2.Диапазон изменения массива псевдослучайных целых чисел [Xmin, Xmax] , значения могут быть биполярные;

3.Количество интервалов, на которые разбивается диапазон изменения массива псевдослучайных целых чисел - NInt ( <=24 )

4.Массив левых границ интервалов разбиения LGrInt (должны принадлежать интервалу [Xmin, Xmax]).

Результаты:

1.Текстовый файл, строка которого содержит:

-номер интервала,

-левую границу интервала,

-количество псевдослучайных чисел, попавших в интервал. Количество строк равно числу интервалов разбиения.

2.График, отражающий распределение чисел по интервалам. (необязательный результат)

Взависимости от номера бригады формирование частотного распределения должно производиться по одному из двух вариантов:

1.Для бригад с нечетным номером: подпрограмма формирования распределения количества попаданий псевдослучайных целых чисел в заданные интервалы реализуется в виде одного ассемблерного модуля, сразу формирующего требуемое распределение и возвращающего его в головную программу, написанную на ЯВУ;

2.Для бригад с четным номером: подпрограмма формирования распределения количества попаданий псевдослучайных целых чисел в заданные интервалы реализуется в виде двух ассемблерных модулей, первый из которых формирует распределение исходных чисел по интервалам единичной

7

длины и возвращает его в вызывающую программу на ЯВУ как промежуточный результат. Это распределение должно выводиться в текстовом виде для контроля. Затем вызывается второй ассемблерный модуль, который по этому промежуточному распределению формирует окончательное распределение псевдослучайных целых чисел по интервалам произвольной длины (с заданными границами). Это распределение возвращается в головную программу и выдается как основной результат в виде текстового файла и, возможно, графика.

Выполнение

Программа реализована с использованием ЯВУ С++. Функционал ЯВУ используется для объявления переменных, инициализации массивов ввода/вывода информации из стандартного потока.

Программа начинается со считывания данных из потока ввода. Далее производится заполнение массива чисел случайными числами, сгенерированными функцией dnk_normal. Имеющиеся данные передаются в функцию, реализованную на языке ассемблера.

void MAS_FUNC(int n, int ni, int xmi, int xma, int* nums, int* lB, int* re).Ассемблерныекодыввидекомандассемблеравставляютсявs); Функция на вссемблере пробегает массив чисел, проверяя их на принадлежность интервалу. При назождении числа в интервале соответствующая ячейка результирующего массива увеличивается на 1. После прохода всего массива программы возвращает управление в программу на ЯВУ. Там происходит форматный вывод данных в виде таблицы

Тестирование.

1.

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr amount of e).Ассемблерныекодыввидекомандассемблеравставляютсявle).Ассемблерныекодыввидекомандассемблеравставляютсявme).Ассемблерныекодыввидекомандассемблеравставляютсявnts: 5

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr amount of inte).Ассемблерныекодыввидекомандассемблеравставляютсявrvals: 2

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr lowe).Ассемблерныекодыввидекомандассемблеравставляютсявr borde).Ассемблерныекодыввидекомандассемблеравставляютсявr:

8

-5

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr uppe).Ассемблерныекодыввидекомандассемблеравставляютсявr borde).Ассемблерныекодыввидекомандассемблеравставляютсявr: 5

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr 1 le).Ассемблерныекодыввидекомандассемблеравставляютсявft borde).Ассемблерныекодыввидекомандассемблеравставляютсявrs: 1

NInt

lGrInt Num

0

-5

4

1

1

1

2.

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr amount of e).Ассемблерныекодыввидекомандассемблеравставляютсявle).Ассемблерныекодыввидекомандассемблеравставляютсявme).Ассемблерныекодыввидекомандассемблеравставляютсявnts: 10000

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr amount of inte).Ассемблерныекодыввидекомандассемблеравставляютсявrvals: 10

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr lowe).Ассемблерныекодыввидекомандассемблеравставляютсявr borde).Ассемблерныекодыввидекомандассемблеравставляютсявr: -10

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr uppe).Ассемблерныекодыввидекомандассемблеравставляютсявr borde).Ассемблерныекодыввидекомандассемблеравставляютсявr: 10

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr 9 le).Ассемблерныекодыввидекомандассемблеравставляютсявft borde).Ассемблерныекодыввидекомандассемблеравставляютсявrs: -8 -6 -4 -2 0 2 4 6 8

NInt

lGrInt Num

0

-10

2247

1

-8

656

2

-6

740

3

-4

776

4

-2

791

5

0

771

6

2

753

7

4

690

9

8

6

589

9

8

1987

3.

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr amount of e).Ассемблерныекодыввидекомандассемблеравставляютсявle).Ассемблерныекодыввидекомандассемблеравставляютсявme).Ассемблерныекодыввидекомандассемблеравставляютсявnts: 10000

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr amount of inte).Ассемблерныекодыввидекомандассемблеравставляютсявrvals: 10

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr lowe).Ассемблерныекодыввидекомандассемблеравставляютсявr borde).Ассемблерныекодыввидекомандассемблеравставляютсявr: -50

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr uppe).Ассемблерныекодыввидекомандассемблеравставляютсявr borde).Ассемблерныекодыввидекомандассемблеравставляютсявr: -30

Ente).Ассемблерныекодыввидекомандассемблеравставляютсявr 9 le).Ассемблерныекодыввидекомандассемблеравставляютсявft borde).Ассемблерныекодыввидекомандассемблеравставляютсявrs:

-48 -46 -44 -42 -40 -38 -36 -34 -32

NInt

lGrInt Num

0

-50

2247

1

-48

656

2

-46

740

3

-44

776

4

-42

791

5

-40

771

6

-38

753

7

-36

690

8

-34

589

9-32 1987

Выводы.

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

10