Лабораторная работа № 1. Арифметические операции над байтами и словами. Линейное исполнение программ

Цель работы

Цели лабораторной работы:

1) изучение принципов функционирования памяти и микропроцессора компьютера при последовательном исполнении команд программы;

2) приобретение навыков использования арифметических команд при написании ассемблерных программ;

3) получение представления об особенностях обработки данных разных размерностей и режимах доступа к данным при выполнении арифметических операций.

Контрольные вопросы

1) Понятие сегмента, характеристики сегмента, организация сегмента.

2) На какие сегменты разбита память компьютера? В какие регистры записываются начальные адреса сегментов?

3) Какие регистры микропроцессора используются при выполнении арифметических операций?

4) На какие флаги воздействуют арифметические команды?

5) Какие режимы адресации могут применяться для доступа к данным при выполнении арифметических операций?

6) Особенности выполнения операции умножения.

7) Особенности выполнения операции деления. Распределение регистров.

Задание на лабораторную работу

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

1.1) В сегменте данных определить два байтовых значения 10 и 27, слово 325 и байт 15.

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

1.3) Выполнить сложение 10 и 27; полученный результат записать в соответствующую ячейку памяти.

1.4) Выполнить вычитание 10 и 27; полученный результат переслать в соответствующую ячейку памяти.

1.5) Изменить знак второго числа (27) и снова выполнить операцию вычитания 10 и -27.

1.6)Выполнить умножение 10 и -27 с учетом знака; результат записать в соответствующую ячейку памяти. Выполнить умножение 10 и -27 без учета знака.

1.7) Выполнить деление 325 и 15; полученные результаты записать в соответствующие ячейки памяти.

2) На основе исходной программы получить исполняемый файл. Выполнить программу по шагам с помощью отладчика TURBO DEBUGGER, описать изменение состояния регистров и ячеек памяти при выполнении программы. Обратить особое внимание на следующие моменты:

2.1) Как представляется число 27 и -27 в 16-ричной системе счисления?

2.2) Какое значение разности при выполнении вычитания в пунктах 1.4 и 1.5 задания?

2.3) Где размещается результат умножения 10 и -27?

2.4) В чем заключается разность произведения 10 и -27 при умножении со знаком и без учета знака?

2.5) В каких регистрах размещаются результаты деления 325 и 15, и чему равны значения частного и остатка от деления?

Лабораторная работа № 2. Логические операции и операции сдвига над данными

Цель работы

Цели лабораторной работы:

1) закрепление принципов функционирования памяти и микропроцессора компьютера при последовательном исполнении команд программы;

2) приобретение навыков использования логических команд и команд сдвига при написании ассемблерных программ;

3) получение представления об особенностях обработки данных и режимах доступа к данным при выполнении логических и сдвиговых операций.

Контрольные вопросы

1) Основные логические операции и принципы их выполнения.

2) Правила формирования масок для установки и сброса битов.

3) Каким образом выполняются логические команды над словами?

4) Команды линейного логического и арифметического сдвигов. В чем заключается разница их выполнения?

5) Особенности выполнения команд циклического сдвига. Сферы применения этих команд.

6) Что указывает директива ASSUME в программе?

7) Как оформляется начало выполнения программы?

Задание на лабораторную работу

1) Написать программу на языке ассемблера, которая выполняет логические операции и операции сдвига над данными.

1.1) В сегменте данных определить однобайтовое число в двоичной системе счисления.

1.2) Переписать его в регистр, установить 2 любых бита в единицу, инвертировать все, сбросить 3 любых бита.

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

1.4) Выполнить проверку, является ли полученный результат четным числом. Если да, то переписать его в регистр DH, иначе – в регистр DL.

1.5) Используя команды линейного сдвига, умножить сначала значение регистра DH или DL, в зависимости от результата предыдущей операции, на 4, а потом разделить на 2.

1.6) Используя команды циклического сдвига, в регистре BL получить значение третьего бита полученного числа, а в регистре BH – значение пятого бита.

2) На основе исходной программы получить исполняемый файл. Выполнить программу по шагам с помощью отладчика TURBO DEBUGGER, описать изменение состояния регистров и ячеек памяти при выполнении программы. Обратить особое внимание на следующие моменты:

2.1) Чему равна маска для установки двух битов в единицу и почему?

2.1) Чему равна маска для сброса трех битов в ноль?

2.3) В каком регистре будет находиться сначала результат умножения на 4, а потом результат деления на 2 при выполнении операций линейного сдвига? Чему равны полученные результаты в десятичной системе счисления?

2.4) Чему равны третий и пятый биты анализируемого числа и какую позицию они занимают в регистрах BL и BH, соответственно?

2.5) Где находятся биты числа, подвергнутые циклическому сдвигу и чему они равны?

Наши рекомендации