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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Цель работы

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

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

3. Приобретение навыков использования поразрядных логических команд при написании ассемблерных программ.

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

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

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

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

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

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

5. Особенности выполнения команд сложения и вычитания. Требования к операндам этих команд.

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

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

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

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

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

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

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

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

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

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

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

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

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

1.8. Из сегмента данных в регистр переслать однобайтовое число в двоичной системе счисления, установить 2 любых бита в единицу, инвертировать все, сбросить 3 любых бита.

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

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

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

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

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

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

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

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

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

Лабораторная работа № 2. Организация межсегментных

Переходов

Цель работы

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

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

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

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

1. Внутрисегментные и межсегментные переходы. Способы вычисления адресов переходов.

2. Разновидности внутрисегментных переходов и их особенности.

3. Флаги процессора и их использование в условиях.

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

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

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

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

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

1.1. В программе определить один сегмент стека, три сегмента данных и три сегмента кода.

1.2. В сегменте стека зарезервировать 20 байт.

1.3. В первом сегменте данных определить однобайтовое число в двоичной системе счисления. Во втором сегменте данных определить адрес перехода на первый сегмент кода в виде двойного машинного слова. В третьем сегменте данных также определить однобайтовое число в двоичной системе счисления.

1.4. Начать выполнение с третьего сегмента кода и выполнить в нём с помощью команд линейного сдвига умножение на 2 числа из первого сегмента данных, а затем деление на 4 числа из третьего сегмента данных. Команды корректного завершения работы пометить меткой.

1.5. Затем перейти на метку, определенную во втором сегменте данных и выполнить переход в первый сегмент кода. Используя команды циклического сдвига, в регистре BL получить значение третьего бита числа из первого сегмента данных.

1.6. Далее выполнить переход во второй сегмент кода. В нём, используя команды циклического сдвига, в регистре BH получить значение пятого бита числа из третьего сегмента данных.

1.7. Затем перейти на метку конца, определенную в третьем сегменте кода и завершить работу программы.

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

2.1. Каким образом выполняется абсолютный прямой межсегментный переход, косвенный межсегментный переход?

2.2. В каких регистрах содержится адрес перехода при прямом переходе, при косвенном переходе?

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

В чём преимущество использования команд сдвига для умножения и деления на степень двойки перед традиционными командами умножения и деления?

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

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

2.6. Какой из трёх сегментов кода является главным и почему?



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 363; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.15.94 (0.007 с.)