- •Введение
- •Лабораторная работа № 1 Трансляция, компоновка и отладка программ
- •1.1. Цельработы
- •1.2.1. Архитектура компьютера
- •1.2.2. Процедуры формирования программы
- •1.2.3. Структура программы
- •1.2.4. Пример программы на Ассемблере
- •1.3. Порядок выполнения работы
- •1.4. Содержание отчета
- •Лабораторная работа № 2
- •[Метка:] мнемокод [операнд] [; комментарий]
- •2.2.2. Режимы адресации
- •2.3. Порядок выполнения работы
- •2.4. Содержание отчета.
- •2.5. Варианты заданий
- •Лабораторная работа № 3
- •3.2.2. Команда безусловного перехода
- •3.2.3. Организация циклов
- •Inc операнд ,
- •3.3. Порядок выполнения работы
- •3.4. Содержание отчета
- •3.5. Варианты заданий
- •Лабораторная работа № 4
- •4.2.2. Сложение и вычитание целых чисел
- •4.2.3. Умножение и деление целых чисел
- •4.3. Порядок выполнения работы
- •4.4. Содержание отчета
- •4.5. Варианты заданий.
- •Лабораторная работа № 5 Программирование операций ввода-вывода
- •5.1. Цель работы
- •5.2. Основные теоретические сведения
- •Int 21h ; прочитать строку.
- •5.3. Порядок выполнения работы
- •5.4. Содержание отчета
- •5.5. Варианты заданий
4.3. Порядок выполнения работы
1. Изучить приведенный теоретический материал к лабораторной работе.
2. В соответствии с вариантом задания написать программу на ассемблере.
3. Оттранслировать программу в объектный код.
4. Провести отладку программы и проверить получаемые результаты.
4.4. Содержание отчета
Отчет должен включать:
титульный лист;
описание цели работы;
описание задания на лабораторную работу;
словесные пояснения к алгоритму решения
задачи и схему программы (обращаю Ваше
внимание на то, что понятие массива и
индексации массива весьма условны, ибо
в памяти ЭВМ элементы
листинги программ;
результаты выполнения программ;
выводы.
4.5. Варианты заданий.
Написать и отладить программы.
Подсчитать количество четных (нечетных) элементов двухмерного массива
а) элементы массива однобайтовые;
б) элементы массива двухбайтовые.
Подсчитать сумму элементов строк (столбцов) двухмерного массива
а) элементы массива однобайтовые;
б) элементы массива двухбайтовые.
Подсчитать сумму всех элементов двухмерного массива и найти медиану (среднее арифметическое)
а) элементы массива однобайтовые;
б) элементы массива двухбайтовые.
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.
Следует отметить, что такая реализация обнаружения четности-нечетности самая неудачная, потому что операция деления относится к “длинным” операциям и занимает значительно больше процессорного времени, чем предыдущие команды. Кроме того, необходимо учитывать наличие или отсутствие знака у элементов массива. Приведенный пример предполагает, что элементы массива – беззнаковые.
Для отрицательных целых чисел признаки четности-нечетности будут иными!
Контрольные вопросы
1. Как представляются десятичные числа в ассемблере?
2. Когда может возникнуть ситуация переполнения при сложении или вычитании двоичных чисел?
3. Какие команды умножения и деления невозможны в ассемблере?
4. Какие команды используются при сложении (вычитании) десятичных чисел, при умножении (делении) десятичных чисел?