Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
126
Добавлен:
02.05.2014
Размер:
338.43 Кб
Скачать

3. Порядок выполнения работы

1. Изучить приведенный теоретический материал к лабораторной работе.

2. В соответствии с вариантом задания написать программу на ассемблере.

3. Оттранслировать программу в объектный код.

4. Провести отладку программы и проверить получаемые результаты.

  1. СОДЕРЖАНИЕ ОТЧЕТА

Отчет должен включать:

  • титульный лист;

  • описание цели работы;

  • описание задания на лабораторную работу;

словесные пояснения к алгоритму решения задачи и схему программы (обращаю Ваше внимание на то, что понятие массива и индексации массива весьма условны, ибо в памяти ЭВМ элементы массива располагаются последовательно, строка за строкой. Поэтому физическая структура двумерного массива и вектора (одномерного массива) оказываются одинаковыми. Отличие двумерного массива и вектора заключается в интерпретации области памяти, отведенной этим структурам. Наращивание индекса элемента структуры определяется алгоритмом обработки структуры данных);

  • листинги программ;

  • результаты выполнения программ;

  • выводы.

  1. ВАРИАНТЫ ЗАДАНИЙ.

Написать и отладить программы.

  1. Подсчитать количество четных (нечетных) элементов двухмерного массива

а) элементы массива однобайтовые;

б) элементы массива двухбайтовые.

  1. Подсчитать сумму элементов строк (столбцов) двухмерного массива

а) элементы массива однобайтовые;

б) элементы массива двухбайтовые.

  1. Подсчитать сумму всех элементов двухмерного массива и найти медиану (среднее арифметическое)

а) элементы массива однобайтовые;

б) элементы массива двухбайтовые.

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

а) элементы массива однобайтовые;

б) элементы массива двухбайтовые.

Примечание к заданиям 1-2: в контексте определения четности-нечетности могут быть использованы различные команды ассемблера:

- команда логического умножения (конъюнкции). При этом учитывается то обстоятельство, что четные положительные числа имеют значение младшего двоичного разряда равное 0, а нечетные – 1. То есть, если результат выполнения команд

mov al, mas[si]

and al,1b

равен 0, то число четное, иначе – нечетное;

- команда арифметического сдвига вправо – shr на одну позицию. При этом число уменьшается в 2 раза, а младший разряд числа выталкивается во флаг переноса CF. Далее значение флага анализируется командой JC (переход, если есть перенос) или JNC (переход, если нет переноса);

- команда деления DIV или IDIV, например:

mov al, mas[si] ;если исходные элементы однобайтовые

cbw ;преобразуем байт в полное слово

;если исходные элементы – двухбайтовые слова, то вместо предыдущих команд записываем команду mov aх, mas[si]

div byte ptr c ;константа с объявлена в сегменте данных как c equ 2.

Следует отметить, что такая реализация обнаружения четности-нечетности самая неудачная, потому что операция деления относится к “длинным” операциям и занимает значительно больше процессорного времени, чем предыдущие команды. Кроме того, необходимо учитывать наличие или отсутствие знака у элементов массива. Приведенный пример предполагает, что элементы массива – беззнаковые.

Для отрицательных целых чисел признаки четности-нечетности будут иными!

Соседние файлы в папке Лекции по ассемблеру