
- •В.А. Афанасьев
- •Часть 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. Контрольные вопросы
- •Список использованной и рекомендуемой Литературы
- •Оглавление
6.2.6. Форматы машинных команд и их кодирование
Общий формат команд процессора (начиная с модели i80386) приведён на рис 1.5 [6, 8, 13]. Команды состоят из необязательных префиксов, одного или двух байт кода операции, спецификаторов адреса (постбайт и байт sib), внутрикомандного смещения (Displacement) и непосредственных данных. Английские аббревиатуры означают следующее: Base – база, MoDe – режим, Register/Memory – регистр/память, Scale – масштаб, Index – индекс. Из всех полей команды обязательным является только один или два байта кода операции.
Префикс – это байт, который модифицирует операцию следующей за ним команды. Два префикса замены операнда и размера адреса (коды 66h и 67h соответственно) позволяют в реальном режиме изменить принимаемые по умолчанию 16-битные размеры операнда и эффективного адреса ЕА (Effective address) на 32-битные. Здесь необходимо заметить, что при ассемблировании машинной команды Tasm самостоятельно вставляет соответствующий префикс, если обнаруживает в мнемокоде команды 32-битный операнд или 32-битную ссылку на память.
Рис. 1.5. Общий формат команды процессора старших моделей
В реальном режиме может быть использован как 16-битный режим адресации памяти (единственно возможный в базовом процессоре i8086), так и 32-битный. Однако, учитывая, что в реальном режиме размер любого сегмента ограничен величиной 216 = 64 Кбайта, значение адреса в 32-битном слове не должно превышать величины FFFFh.
6.2.6.1. 16-битный режим адресации операндов в памяти
Для практического изучения команд процессора i8086 составлен ряд демонстрационных программ (Mov.asm, Arithmet.asm, Logiecal.asm, LoopCall.asm), а в табл. П.1.1_1 приложения П.1.1. приведена система команд, упорядоченная по мнемокоду, с машинными кодами и содержанием выполняемой операции для каждой ассемблерной команды.
По функциональному признаку система команд разбивается на 6 групп: пересылка данных, арифметические операции, логические операции и сдвиги, передача управления, обработка цепочек и управления микропроцессором. В этом параграфе рассмотрим формирование машинных кодов команд процессора, которые могут адресовать один или два операнда и структурно принадлежат к одному из трёх типовых форматов, приведённых на рис.1.6.
Машинные форматы команд в зависимости от типа команды и способа адресации содержат от 1 до 6 байтов, из которых ключевыми являются первый (код операции) и второй (способ адресации). Штриховыми линиями на рис. 1.6 показаны необязательные байты команд. Принципы кодирования полей отдельных байтов команд рассмотрим на примере наиболее общей формы двухоперандной команды.
Рис. 1.6. Типичные форматы команд: двухоперандные команды (а) и (б) и однооперандная (в)
w (Word) – однобитовое поле, идентифицирующее тип операнда: при w = 1 команда оперирует словами, а при w = 0 – байтом;
d (Direction) – однобитовое поле, определяющее направление передачи операнда или результата. При d = 1 осуществляется передача операнда в регистр, определённый полем reg во втором байте, при d = 0 – передача из указанного регистра;
reg (Register) – 3-битовое поле регистра, условно определяющее назначение второго операнда;
r/m (Register/Memory) – 3-битовое поле операнда, который может находиться в памяти или в регистре и условно считается первым;
md (Mode) – 2-битовое поле, показывающее (табл. 1.2), как интерпретировать поле r/m при нахождении эффективного адреса EA первого операнда: если md = 11, то операнд содержится в регистре, в остальных случаях – в памяти.
Таблица 1.2