
- •Введение
- •1 Постановка задачи
- •1.1 Основная программа
- •1.2 Программа построение графика
- •2 Краткие теоретические сведения
- •2.1 Ассемблер, язык ассемблера
- •2.2 Ассемблеры для dos
- •3 Разработка алгоритма программы
- •3.1 Поэтапный алгоритм программы
- •3.2 Построение графика
- •4 Разработка программы
- •4.1 Описание команд микропроцессора
- •4.1.1 Команды пересылки и загрузки
- •4.1.2 Арифметические команды
- •4.1.3 Циклический сдвиг
- •4.1.4 Циклы
- •4.1.5 Синтаксис процедуры
- •4.1.6 Операции над битами и байтами
- •4.1.7 Команда сравнения и условного перехода
- •4.1.8 Префиксы
- •4.2 Регистры общего назначения
- •4.2.1 Индексные регистры
- •4.2.2 Сегментные регистры
- •4.4 Описание используемых функций
- •4.5.4 Процедура поиска нулевой строки
- •4.5.5 Процедура записи в файл “My.Dat”
- •4.5.6 Процедура создания и записи канального файла
- •4.5.7 Завершение программы
- •4.6 Описание программы разработанной на языке c#
- •5 Результат выполнения программы
- •5.3 Карта памяти
- •5.4 График
- •Заключение
- •Список используемых источников
- •Приложение 1 - Код основной программы
- •Приложение 2 – Код программы построения графика
4.2.1 Индексные регистры
Индексный регистр — регистр процессора, используемый для автоматического изменения адреса операнда во время исполнения программы.
В архитектуре x86 индексные регистры называются SI и DI. При базово-индексной адресации их содержимое может суммироваться с содержимым регистра BX.
Индексный регистр-источник SI применяется в качестве указателя адреса байта или слова в таких строковых командах, как LODS (загрузить строку), CMPS (сравнить строку), MOVS (переслать строку).
Индексный регистр-приёмник DI используется как указатель назначения для адреса байта или слова в строковых командах, таких как SCAS (сканировать строку), CMPS, MOVS, STOS (записать строку)
4.2.2 Сегментные регистры
Сегментные регистры предназначены для хранения базовых адресов в реальном режиме или селектора в защищенном режиме ,соответствующих сегментов памяти.Все сегментные регистры 16 разрядные.
SS - содержит базовый адрес текущего сегмента стека.
CS - содержит базовый адрес текущего кодового сегмента.
DS - сегмент данных по умолчанию.
ES, FS, GS - дополнительные регистры, служат для дополнительной адресации сегмента данных.
4.4 Описание используемых функций
В программе проводятся действия с различными файлами (Uk64.dat, My.dat, Result.dat). Происходит их закрытие, создание, открытие, запись, считывание из них.
Для работы с отдельным файлом необходимо указать в регистре BX дескриптор этого файла.
Открытие файла. В Ah помещается № функции открытия файла, в данном случае это 3DH. В Al - режим доступа, у нас 00 – для чтения. В Dx помещается эффективный адрес строки. Вызываем 21-е прерывание. В идентификатор используемого файла помещаем содержимое регистра АХ.
Создание файла. В Ah помещается № функции создания файла, в данном случае это 3СH. Обнуляем регистр СХ. В Dx помещается эффективный адрес строки. Вызываем 21-е прерывание. В переменную для хранения дескриптора помещаем содержимое регистра АХ.
Чтение данных. В Ah помещается № функции, в Вх – дескриптор файла. Сх – число байт для чтения. В Dx эффективный адрес переменной, куда будут считываться байты.
Закрытие файла. В Вх помещается дескриптор файла. В Ah № функции – 3EH. Вызывается 21-е прерывание.
4.5 Описание процедур программы
Ниже приведено описание используемых в программе процедур: процедуры открытия файла “Uk64.dat”, процедуры чтения заданного варианта, процедуры поиска нулевой строки, процедуры записи в файл “My.dat” и процедуры создания и записи канального файла.
4.5.1 Начало
Выполняется инициализация сегментного регистра ds (132-133).
Настройка дополнительного сегмента данных (es в качестве адреса цепочки-приёмника) для работы с цепочками данных (137-138).
4.5.2 Процедура открытия файла “Uk64.dat”
Вначале, регистр AH инициализируется номером функции для открытия существующего файла (5), затем помещаем в AL режим доступа (6). Обнуляем CX (маска атрибутов) (7), помещаем в DX исполнительный адрес строки с именем файла (8), открываем файл “Uk64.dat” (9) и сохраняем в переменной идентификатор файла “Uk64.dat” (10). На языке ассемблера это выглядит следующим образом:
4.5.3 Процедура чтения заданного варианта
Помещаем в CX номер заданного варианта (14), затем уменьшаем его значение на 1 (15). Вызываем процедуру поиска нулевой строки в кадре до тех пор, пока значение CX не станет равным 0 (16). Помещаем в AH номер функции чтения из файла (17), в BX – идентификатор (18), в CX количество необходимых бит (41). Затем, помещаем в DX исполнительный адрес буфера для приема данных (42). Производим чтение данных из файла “Uk64.dat” (43), помещаем в AH номер функции для закрытия файла (44) и закрываем его (49).