- •1.2.2. Команды управления циклом
- •1.2.3. Работа с массивами
- •1.3. Задание на лабораторную работу
- •1.4. Отчет по лабораторной работе
- •2. Лабораторная работа № 4
- •2.1. Общие методические указания по выполнению лабораторной работы
- •2.2. Теоретические сведения
- •2.2.1. Стек и сегмент стека
- •2.2.2. Стековые команды
- •2.2.3 Приемы работы со стеком
- •2.3. Задание на лабораторную работу
- •2.4. Отчет по лабораторной работе
- •3 .Лабораторная работа № 5
- •3.1. Общие методические указания по выполнению лабораторной работы
- •3.2. Теоретические сведения
- •3.2.1. Дальние переходы
- •3.2.2. Подпрограммы (процедуры)
- •3.3. Задание на лабораторную работу
- •3.4. Отчет по лабораторной работе
- •4. Лабораторная работа № 6
- •4.1. Общие методические указания по выполнению лабораторной работы
- •4.2. Теоретические сведения
- •4.2.1. Общие сведения о процессах и потоках
- •4.2.2. Описание свойств и методов компонента StringGrid
- •4.2.3. Получение информации о процессах и потоках
- •4.3.Задание на лабораторную работу
- •4.4. Отчет по лабораторной работе
1.3. Задание на лабораторную работу
1) Написать и выполнить следующие программы на базе примеров из теоретической части:
– записать в переменную значение большей из двух других переменных;
– записать в переменную (слово без знака) сумму двух переменных-байтов – байтов без знака (учитывая возможность переноса при сложении байтов);
– вычислить (записать в AX) сумму элементов вектора слов (считая, что результат помещается в слове).
2) Выполнить индивидуальное задание согласно варианту из таблицы 4.
Таблица 4
Варианты индивидуальных заданий на лабораторную работу
№ варианта |
Задание |
1 |
Найти (поместить в регистр BX) меньший из элементов вектора беззнаковых слов |
2 |
Найти (поместить в специально отведенную ячейку памяти) больший из элементов вектора знаковых байтов |
3 |
Найти максимальный отрицательный элемент вектора знаковых слов |
4 |
Найти минимальный положительный элемент вектора знаковых байтов |
Продолжение табл. 4
5 |
Поменять местами соседние (первый со вторым, третий с четвертым и т.д.) элементы вектора беззнаковых байтов |
6 |
В каждой паре соседних (первый и второй, третий и четвертый и т.д.) элементов вектора беззнаковых слов первым поставить больший (из двух) |
7 |
В каждой паре соседних (первый и второй, третий и четвертый и т.д.) элементов вектора знаковых байт первым поставить меньший (из двух) |
8 |
Проверить, упорядочен ли по убыванию вектор знаковых байт |
9 |
Найти сумму двух векторов слов (т.е. заполнить третий вектор) |
10 |
Найти разность двух векторов байтов (т.е. заполнить третий вектор) |
11 |
Вычислить сумму двух двойных слов (считать, что в них хранятся беззнаковые числа). Сумму разместить в третьем двойном слове. Если сумма не помещается, то выдать соответствующее сообщение |
12 |
Проверить, упорядочен ли по возрастанию вектор беззнаковых слов |
1.4. Отчет по лабораторной работе
Отчет по лабораторной работе должен содержать:
– текст полученного задания с указанным номером варианта;
– тексты программ с комментариями (в комментариях отобразить изменения содержимого регистров и флагов по ходу выполнения программы).
Кроме отчета и демонстрации работающей программы студент отвечает на вопросы по теоретической части, относящейся к данной лабораторной работе.
2. Лабораторная работа № 4
СТЕК
2.1. Общие методические указания по выполнению лабораторной работы
Цели работы:
– Знакомство с особенностями организации стека.
– Изучение стековых команд и приемов работы со стеком.
Среда выполнения:
Интерпретатор команд DOS, ассемблер MASM, интерактивный отладчик AFD.
2.2. Теоретические сведения
2.2.1. Стек и сегмент стека
Стек – это хранилище, работа с которым ведется по следующему принципу: элемент, записанный в стек последним, считывается из него первым. Под такое хранилище можно отвести любую область памяти, но к ней предъявляются следующие требования: ее размер не должен превышать 64 Кб и ее начальный размер должен быть кратен 16. Иначе говоря, эта область должна быть сегментом памяти, который обычно называют сегментом стека.
Регистры, используемые для работы со стеком.
SS – сегментный регистр, по которому базируются адреса из стека (в нем находятся старшие 16 разрядов абсолютного адреса начала сегмента стека в ОП).
SP – указывает на вершину стека (последний положенный в стек элемент). В данном регистре хранится не сам адрес вершины, а ее смещение, т.е. адрес вершины, отсчитанный от начала сегмента стека. Поэтому абсолютный адрес вершины стека задается парой SS:SP.
Элементы стека могут иметь любой размер: байты, слова, двойные слова и т.д. Однако команды записи в стек и считывания из стека работают только со словами. Обработка же двойных слов и байтов следует подгонять под обработку слов.
Оформление сегмента стека размером k байт осуществляется следующим образом:
S SEGMENT STACK
DB k dup (?)
S ENDS
Параметр STACK директивы SEGMENT автоматически записывает в регистр SS начало сегмента стека, а в SP размер стека в байтах (число k).
Если стек явно не используется, то он все равно должен быть (для работы системы прерываний и ОС). Рекомендуемый размер в этом случае – 128 байт. Если же программа сама использует стек, то под него надо отводить столько места, сколько надо программе, плюс 128 байтов.