- •Магомедов и. А. Микропроцессорные системы. Аппаратные и программные средства.
- •Глава 1. Микропроцессоры
- •Глава II. Программирование микропроцессоров
- •Глава III. Лабораторный практикум по программированию мп i80х86
- •Глава 1. Микропроцессоры
- •1.1. Назначение микропроцессоров
- •1.2. Универсальные микропроцессоры
- •1.2.2. Микропроцессоры компании amd
- •1.2.3. Микропроцессоры компании Cyrix
- •1.2.4. Микропроцессоры с архитектурой Alpha
- •1.2.5. Микропроцессоры с архитектурой sparc
- •1.2.6. Микропроцессоры Hewlett-Packard ра-8000
- •1.3. Микропроцессоры обработки сигналов
- •1.3.1. Сигнальные микропроцессоры компании
- •1.3.2. Сигнальные микропроцессоры компании Motorola
- •1.3.3. Микропроцессоры семейства dsp 560хх
- •1.4. Медийные микропроцессоры
- •1.5. Транспьютероподобные микропроцессоры
- •1.6. Нейропроцессоры
- •Глава II. Программирование микропроцессоров
- •2.1. Программная модель 32-разрядных процессоров
- •2.1.2. Типы данных
- •2.1.3. Регистры процессора
- •2.2. Форматы команд
- •2.3. Выбор операнда
- •2.4. Режимы адресации
- •Вопросы для самоконтроля к главе 2
- •Глава III. Лабораторный практикум по программированию мп i86
- •Обобщенная структурная схема микропроцессора х86
- •Организация основной памяти и средства аппаратной поддержки управления памятью
- •Выполнение программы
- •Формат операторов ассемблера
- •Определение полей памяти для размещения данных.
- •3.2. Операнды команд ассемблера
- •Команда пересылки данных
- •Команда загрузки исполнительного адреса
- •Команды загрузки указателя.
- •Команда записи в стек
- •Команда обмен данными
- •Команды сложения/ Команды вычитания
- •Команда изменения знака
- •Команда добавления /вычитания единицы
- •Команда сравнения
- •Команды умножения/ деления
- •Команда преобразования байта в слово, а слова - в двойное слово.
- •Команды передачи управления
- •Команды условного перехода
- •Команды организации циклической обработки
- •Команда перехода по обнуленному счетчику
- •Команды организации цикла с условием
- •Команды вызова подпрограмм
- •Команда возврата управления
- •Команды обработки строк
- •Логические команды
- •2. Программирование циклических процессов.
- •3. Моделирование одномерных массивов
- •4. Моделирование матриц
- •5. Преобразования ввода-вывода.
- •3.4. Основные команды отладчика afd
- •Fspec определяет имя файла, наименованного в соответствии с соглашениями dos. Для команды l расширением по умолчанию является “exe”;
- •String задает список значений или ascii строк (строка заключена в кавычки) разделенных пробелами или запятой.
- •Например: 1234 bx, ‘tromb’ ff.
- •Лабораторная работа № 1 Создание выполнимого файла, работа в отладчике, изучение оператора пересылки mov
- •Оператор mov
- •Индивидуальные задания
- •Лабораторная работа № 2 Сегментация памяти, директивы ассемблера
- •Прямая адресация
- •Косвенная адресация
- •Директива assume
- •Индивидуальные задания
- •Лабораторная работа №.3 Директивы equ, label, команды сложения и вычитания Директива equ
- •Директива label
- •Команды сложения и вычитания
- •Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •Лабораторная работа № 4 Изучение операторов обмена xchg и xlat
- •Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •Система команд процессораi486
- •П1. Команды пересылки данных
- •П2. Арифметические команды
- •П3. Логические команды
- •П4. Команды переходов
- •П5. Команды процессора i486
2.3. Выбор операнда
Команда может не использовать операнды, использовать один или более операндов. Примером безоперандной команды может служить команда NOP (нет операций). Операнд может находиться [32-34]:
-в команде;
-в регистре (32-битные операнды в регистрах EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP; 16-битные операнды в регистрах AX, BX, CX, DX, SI, DI SP или BP; 8-битные операнды в регистрах AH, AL, BH, BL, CH,CL, DH или DL; в сегментных регистрах, в регистре флагов).
Для большинства команд один из двух явно адресуемых операндов является операндом-источником или операндом-приемником и может находиться в регистре или памяти. Другой операнд должен быть в регистре или указан непосредственно в команде. Имеются следующие типы двухоперандных команд:
-регистр- регистр;
-регистр- память;
-память-регистр;
-непосредственный операнд-регистр;
-непосредственный операнд-память.
2.4. Режимы адресации
Неявная адресация. Операнд адресует неявно, если в команде нет специальных полей его определения, т.е. операнд задается кодом операции.
Примерами команд с неявной адресацией могут служить:
AAA – скорректировать регистр AL после сложения;
CMC – инвертировать флажок переноса;
STD – установить в 1флажок направления.
Регистровая адресация. В командах с таким режимом адресации операнд(ы) находится во внутреннем регистре процессора [33, 34]. Регистровые операнды в ассемблерных командах указываются именами регистров в поле операнда. Наиболее часто в командах манипуляций данными участвуют 8/16/32-битные РОН. Привлекаемые в командах регистры определяются полями reg и mod r/m (при mod=11B). В сокращенных формах команд регистры могут указываться в поле операции, особенно это относится к регистрам-аккумуляторам EAX/AX/AL. Сегментные регистры в командах загрузки и сохранения идентифицируются полями sreg2 или sreg3, занимающими место поля reg в байте mod r/m.
Примеры команд с регистровой адресацией:
INC ESI – инкремент регистра ESI;
SUB ECX,ECX – сбросить регистр ECX;
MOV EAX,CR0 – передать в EAX содержимое CR0;
ADD AL,DL – прибавить к AL содержимое регистра DL;
MOVSX EAX,DH – переслать со знаковым расширением.
Непосредственная адресация. В этом режиме операнд находится в самой команде, т.е. хранится в месте с командой в сегментном коде. Из-за этого изменить непосредственный операнд невозможно, им может быть только константа как операнд-источник. Допускаются непосредственные операнды длиной 8, 16 и 32 бита; они всегда находятся в конце команды. Использование непосредственных операндов обычно определяется неявно, а байт mod r/m задает получатель.
Примеры команд с непосредственной адресацией:
MOV EAX,0f0f0f0f0h - загрузить константу в EAX;
AND AL,0fh – выделить младшую тетраду регистра AL;
BT EDI,3 – передать в CF бит 3 регистра EDI.
Адресация ввода-вывода. Процессоры 80х86 могут обращаться к устройствам ввода-вывода двумя способами. Они могут быть отображены на память или иметь свои адреса в пространстве ввода-вывода. Процессор поддерживает 64К адресов ввода-вывода, обычно называемых портами ввода-вывода.
В командах ввода-вывода источником или приемником всегда служит аккумулятор EAX/AX/AL, а порт определяется как непосредственный операнд (фиксированный порт) или содержимое регистра DX (переменный порт).
Примеры команд ввода-вывода:
IN AL,40h –ввод байта из фиксированного порта;
IN AX,40h - ввод слова из фиксированного порта;
IN EAX,40h- ввод двойного слова из фиксированного порта;
OUT 20h,AL- вывод байта в фиксированный порт;
OUT 20h,AX- вывод слова в фиксированный порт;
OUT 20h,EAX- вывод двойного слова в фиксированный порт;
IN AL,DX - ввод байта из переменного порта (адрес порта содержится в регистре DX);
IN AX,DX- ввод слова из переменного порта;
IN EAX,DX- ввод двойного слова из переменного порта;
OUT DX,AL- вывод байта в переменный порт (адрес порта содержится в регистре DX);
OUT DX,AX- вывод слова в переменный порт;
OUT DX,EAX- вывод двойного слова в переменный порт.
Адресация операндов в памяти. Напомним, что эффективный адрес задает смещение (расстояние) от начала соответствующего сегмента. Адрес 0 есть адрес первого байта в сегменте, адрес 1-второго байта и т.д., независимо от физического начального или базового сегмента. В большинстве команд манипуляции данными по умолчанию привлекается сегмент, адресуемый регистром DS, но с помощью префикса замены сегмента можно обращаться к любому другому сегменту.
Прямая адресация. Это простейший режим адресации (он называется также абсолютной адресацией), т.к. эффективный адрес содержится в самой команде. Местонахождение операнда задается смещением в текущем сегменте, которое следует считать константой. Численное значение адреса в ассемблерных командах заключается в квадратные скобки.
Примеры команд с прямой адресацией:
MOV AL, [20h]-передать байт в регистр AL;
SHL WORD PTR [A5h],5 – сдвинуть слово на пять бит влево;
INC DWORD PTR[12345h] – инкремент двойного слова в памяти.
Отметим, что во второй и третьей командах применяется спецификатор длины операнда, т.к. без него невозможно определить, с какими данными должна работать команда.
