
- •В.А. Афанасьев
- •Часть 1 Лабораторный практикум
- •Предисловие
- •1. Краткая характеристика операционной среды ms-dos в компьютерах с операционной системой Windows
- •2. Составные части ms-dos и её инициализация
- •3. Взаимодействие Ассемблерной программы с ms-dos и аппаратными средствами Компьютера
- •4. Сегментированная организация памяти в реальном режиме. Виды памяти в среде ms-dos
- •Распределение первого мегабайта памяти компьютера
- •Содержание некоторых полей области данных bios
- •5. Программная модель 32-разрядных процессоров i80x86
- •Назначения сегментных регистров
- •6.2.2. Путь выполнения команды
- •6.2.3. Трансляция программы. Опции командной строки
- •6.2.4. Структура программы для .Exe- и .Com-файлов. Образ программы в памяти
- •Сегменты упрощенной модели памяти Small
- •%Title "Имя exe-файла программы"
- •%Title "Имя com – файла программы"
- •6.2.5. Работа с отладчиком Turbo Debugger (td)
- •6.2.6. Форматы машинных команд и их кодирование
- •Определение эффективного адреса
- •Косвенные виды адресации
- •6.2.6.2. Использование 32-битных регистров
- •6.2.7. Работа над синтаксическими ошибками при ассемблировании программы
- •6.3. Задание к работе. Порядок выполнения
- •6.4. Контрольные вопросы
- •Приложения к лабораторной работе № 1 п.1.1. Машинные коды команд базового процессора i8086
- •Машинные коды команд базового процессора i8086
- •П.1.2. Демонстрационные файлы
- •П.1.3. Форматы исполняемых файлов .Exe и .Com на диске
- •А) Листинг prog_com. Lst
- •Содержимое префикса программы psp
- •А) Листинг prog_exe.Lst
- •Б) Машинный код исполняемого файла prog_exe.Exe на диске объёмом 624 байта
- •Формат заголовка исполняемого .Exe – файла на диске
- •7.2.2. Ввод с клавиатуры символьной информации
- •7.2.2.1. Буфер ввода данных с клавиатуры
- •7.2.2.2. Системные функции dos ввода данных с клавиатуры
- •Сравнительная характеристика функций dos ввода с клавиатуры
- •7.2.3. Функции dos вывода данных на экран
- •7.2.4. Расширенные коды ascii и управление программой с клавиатуры
- •Расширенные коды для функциональных клавиш
- •7.2.5. Строковые команды. Общая характеристика
- •Команды обработки строк
- •7.3. Задания к работе. Подготовка и выполнение
- •7.4. Контрольные вопросы
- •Приложения к лабораторной работе № 2 Приложение п.2.1. Примеры реализаций типового задания
- •Приложение п.2.2. Esc-последовательности
- •Параметры Esc-последовательности
- •Приложение п.2.3. Таблица символов в кодировке ascii
- •8.2.2. Прямое программирование видеобуфера в текстовом режиме
- •8.2.3. Справочные данные по функциям bios
- •8.2.3.1. Прерывание int 10h. Видеофункции bios
- •Текстовые видеорежимы и страницы в стандарте vga, поддерживаемые современными видеоконтроллерами
- •8.2.3.2. Рекомендации по использованию видеосервиса bios
- •8.2.3.3. Прерывание int 16h
- •8.2.3.4. Задержка программных операций
- •Int 15h, функция 86h
- •8.3. Варианты индивидуального задания
- •8.4. Контрольные вопросы
- •Приложения к работе № 3 Примеры реализаций типовых заданий п.3.1. Листинг 3.4. Программа получения скан-кодов клавиш клавиатуры
- •П.3.2. Листинг 3.5. Демонстрационная программа использования функций bios для работы с экраном и клавиатурой
- •9.2.1. Представление знаковых и беззнаковых чисел в 16-разрядном компьютере
- •Представление чисел в 16- разрядном компьютере
- •9.2.2. Преобразование ascii-кодов чисел с произвольным основанием в двоичное число
- •9.2.3. Преобразование двоичного числа в ascii-строку числа по произвольному основанию
- •9.2.4. Задание к работе. Порядок выполнения
- •Варианты заданий 1-7
- •Варианты заданий 8-14
- •9.2.5. Вопросы построения многомодульных программ
- •9.2.6. Ассемблирование и компоновка отдельных модулей в программу. Создание библиотеки объектных модулей
- •9.3. Контрольные вопросы
- •Список использованной и рекомендуемой Литературы
- •Оглавление
9.2.4. Задание к работе. Порядок выполнения
ВАРИАНТЫ 1-7 (табл. 4.3).
Таблица 4.3
Варианты заданий 1-7
Вариант |
Система счисления |
Выполняемая операция над байтами ASCII числа |
|
Ввод с клавиатуры |
Вывод на экран |
||
1 |
восьмеричная |
16-разрядный двоичный код, восьмеричная, десятичная |
Циклический сдвиг вправо на 1 байт |
2 |
восьмеричная |
16-разрядный двоичный код, восьмеричная, шестнадцатеричная |
Циклический сдвиг влево на 1 байт |
3 |
десятичная |
16-разрядный двоичный код, десятичная, восьмеричная |
Определить байт с наибольшим ASCII-кодом |
4 |
десятичная |
16-разрядный двоичный код, десятичная, восьмеричная |
Определить байт с наименьшим ASCII-кодом |
5 |
десятичная |
16-разрядный двоичный код, десятичная, шестнадцатеричная |
Произвести реверс байтов ASCII числа |
6 |
шестнадцатеричная |
16-разрядный двоичный код, шестнадцатеричная, восьмеричная |
Расположить цифры числа по возрастанию |
7 |
шестнадцатеричная |
16-разрядный двоичный код, шестнадцатеричная, десятичная |
Расположить цифры числа по убыванию |
Последовательность действий для выполнения задания.
Вводится в буфер памяти знаковое ASCII-число в заданной системе счисления (в диапазоне эквивалентному представлению от –32768 до 32767) с последующим преобразованием его в 16-разрядный двоичный дополнительный код (внутреннее представление целочисленных данных).
Рассматривая исходное ASCII-число в буфере как некоторую последовательность байт, выполните над ними заданное преобразование (операцию). Результат операции (новую последовательность байт) вывести на экран.
Двоичный дополнительный код преобразуется в числовой ASCII-формат для различных оснований с последующим выводом на экран.
ВАРИАНТЫ 8-14 (табл. 4.4).
Ввести последовательно, по запросу программы, два числа в заданной системе счисления. Отдельной строкой вывести перечень выполняемых операций (операторов). Ввод пользователем оператора из предложенного списка инициирует программу на вывод результата для введённых чисел. Необходимо предоставить возможность пользователю в дальнейшем либо ввести другую операцию, либо следующую пару чисел с последующим выбором оператора.
Таблица 4.4
Варианты заданий 8-14
Вари-ант |
Система счисления для ввода чисел |
Выполняемые операторы и форма вывода результата |
|||
8 |
восьмеричная |
+ * |
десятичная |
EQ |
True/false |
9 |
восьмеричная |
/ + |
шестнадцатеричная |
NE |
True/false |
10 |
десятичная |
* / |
двоичная |
GE |
True/false |
11 |
десятичная |
* / + |
восьмеричная |
GT |
True/false |
12 |
десятичная |
* / |
шестнадцатеричная |
GE |
True/false |
13 |
шестнадцатеричная |
+ * |
восьмеричная |
LT |
True/false |
14 |
шестнадцатеричная |
/ + |
десятичная |
LE |
True/false |
Реализацию арифметических операторов выполнить на основе использования соответствующих арифметических команд (add, sub, imul, idiv, cwd), а логических операторов – команды cmp в сочетании с необходимыми командами условных переходов. Формат результата операции умножения при 16-раз-рядных входных сомножителях – 32 бита; внутренний формат делимого при 16-разрядных входных числах перед выполнением операции деления должен быть подвергнут расширению со знаком до 32 бит.
Соглашения (обязательные требования к разработке для всех 14 вариантов).
Программа должна включать один основной и несколько вспомогательных модулей (см. п. 9.2.5);
Диапазон вводимых знаковых чисел от –32768 до 32767, диапазон выводимых чисел такой же за исключением результата от выполнения операции умножения – увеличивается в два раза;
Ввод числа осуществляется по запросу программы. Первым вводится символ знака "–" (если число отрицательное), затем число старшими разрядами вперёд. Ввод числа заканчивается нажатием клавиши <Enter>.
"8"-,"10"- и "16"-тeричные вводимые и выводимые числа представляются в естественном виде (т.е. значащими цифрами модуля с указанием знака для отрицательных чисел), а двоичные – 16-разрядным дополнительным кодом. Числа должны представляться соответствующими сообщениями на экране дисплея и заканчиваться (кроме десятичных) спецификаторами оснований.
Ошибки ввода числа выявляются в процессе преобразования введённого числа в двоичный дополнительный код. К ним относятся:
ошибка переполнения, когда введённое число не укладывается в диапазон знаковых чисел 16-разрядного компьютера или, например, когда произошло переполнение при выполнении операций сложения или вычитания;
ввод недопустимого символа при изображении данного числа.
Если в ходе преобразования была обнаружена ошибка, то выводится сообщение о характере этой ошибки.
Если при выполнении арифметической операции произошло переполнение, то выводится соответствующее сообщение, а сам результат не выводится.
В конце каждого цикла преобразования программа выдаёт запрос на продолжение работы или её завершение. Управление осуществляется функциональными клавишами.