- •Содержание
- •1. Введение
- •2. Представление информации в эвм
- •2.1. Системы счисления
- •2.1.1. Основные понятия
- •2.1.2. Системы счисления, используемые в вычислительной технике
- •2.1.3. Перевод чисел из одной системы счисления в другую
- •2.2. Типы данных
- •2.2.1. Типы данных, используемых в эвм
- •2.2.2. Константы
- •2.2.3. Логические величины
- •2.2.4. Символьные величины
- •2.2.5. Целые числа
- •2.2.6. Вещественные числа
- •2.3. Форматы команд
- •3. Основы построения эвм
- •3.1. Немного истории
- •3.2. Особенности архитектуры современной вычислительной машины
- •3.2.1. Основные понятия
- •3.2.2. Структурная организация машины
- •3.3. Вариант структуры микроЭвм
- •3.3.1. Общая структура машины
- •3.3.2. Процессор
- •3.3.3. Оперативная память
- •3.3.4. Системная память
- •3.3.5. Система адресации
- •3.3.6. Виртуальная память
- •3.3.7. Таймер
- •3.3.8. Внешние устройства
- •3.3.9. Принципы обмена информацией с внешними устройствами
- •Некоторые вопросы программного обеспечения
- •4.1. О программном обеспечении
- •4.2. Процесс компиляции
- •4.3. Компиляция с языка Ассемблера
- •5. Особенности архитектуры эвм типа ibm-рс
- •5.1. Введение
- •5.2. Исторический обзор процессоров клона 80х86
- •5.3. Классификация процессоров Intel 80х86
- •5.4. Особенности периферийных устройств ibm-pc
- •5.5. Характеристики компьютера
- •5.6. Сегментная адресация
- •5.7. Особенности распределения адресного пространства в компьютерах ibm-pc
- •5.7.1. Стандартная оперативная память (Conventional memory)
- •5.7.2. Область верхней памяти (Upper Memory Area ‑ uma)
- •5.7.3. Область высшей памяти (High Memory Area ‑ hma)
- •5.7.4. Расширенная память (eXtended Memory Specification — xms)
- •5.7.5. Дополнительная память (Expanded Memory Specification — ems)
- •5.8. Обмен информацией с периферийными устройствами
- •5.8.1. Порты ввода/вывода
- •5.8.2. Использование адресного пространства памяти
- •5.8.3. Прямой доступ к памяти
- •5.9. Прерывания
- •5.10. Начальный запуск эвм
- •5.11. Регистры процессора
- •5.11.1. Регистры общего назначения
- •5.11.2. Указатель инструкций
- •5.11.3. Регистр флагов и управляющие регистры
- •5.11.4. Регистры сегментов и селекторов
- •5.11.5. Системные адресные регистры
- •5.11.6. Регистры отладки
- •5.11.7. Регистры тестирования и модельно-специфические регистры
- •6. Debug — средство непосредственной коррекции и отладки загрузочного кода программ
- •6.1. Введение
- •6.1.1. Команды без аргумента
- •Input I порт
- •6.1.2. Команды обращения к ячейкам
- •15D0:010c bfffff mov di,ffff
- •15D0:010f 57 push di
- •6.1.3. Команды запуска программы
- •6.1.4. Команды просмотра и модификации регистров
- •7. Методы адресации
- •7.1. Введение
- •7.2. Регистровый метод адресации
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •7.3. Непосредственный метод адресации
- •7.4. Прямая адресация
- •7.5. Косвенная регистровая адресация
- •159B:0100 not word ptr [bx]
- •159B:0102 e000 loopnz 0104
- •7.6. Адресация по базе
- •7.7. Косвенная регистровая адресация с индексированием
- •159B:0102 0e push cs
- •7.8. Адресация по базе с индексированием
- •7.9. Относительная адресация
- •7.10. Косвенная регистровая адресация с масштабированием
- •7.11. Адресация по базе с индексированием и масштабированием
- •8. Синтаксис ассемблера
- •8.1. Директивы определения данных
- •8.1.1. Определение переменных
- •Cимвольные строки
- •Числовые данные
- •Примеры:
- •8.2. Выражения
- •8.3. Непосредственные операнды
- •8.4. Структуры
- •8.5. Сегменты
- •8.6. Модели памяти и упрощенные директивы определения сегментов
- •8.7. Упрощенные директивы описания сегментов
- •8.8. Создание программы на ассемблере
- •8.9. Получение выполняемого файла
- •9. Система команд
- •9.1. Классификация команд по операндам
- •9.2. Классификация команд по действию
- •9.2.1. Команды пересылки данных
- •9.2.2. Арифметические команды
- •8.2.3. Команды манипуляции битами
- •9.2.4. Управление центральным процессором
- •9.2.4. Команды передачи управления
- •Iret, iretd
- •9.3. Краткий список команд с используемыми операндами
- •9.3.1. Условные обозначения:
- •9.3.2. Инструкции пересылки данных
- •9.3.3. Арифметические, логические и инструкции сдвига
- •9.3.4. Инструкции обработки строк
- •9.3.5. Инструкции передачи управления
- •9.3.6. Инструкции управления процессором
- •Литература
159B:0102 e000 loopnz 0104
-d 200 201
159B:0200 20 2B +
-
После выполнения: 16A5:0200 202B (в двоичном виде: 0010 0000 0010 1011), т.е. содержимое ячейки, на которую указывает пара DS:BX, дополнено до единицы.
Процессоры до 80386 могли использовать, в качестве индексных, только регистры BX, SI, DI и BP, более поздние допускают использование также EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
Если регистр сегмента не указан, подразумевается использование DS, за исключением случая адресации через EBP, ESP или BP — в этом случае сегментный регистр по умолчанию — SS.
7.6. Адресация по базе
При использовании адресации по базе МП 8086 берет в регистре BX, SI, DI или BP смещение, складывает его со значением сдвига, заданным в команде, добавляет к сдвинутому регистру сегмента и по полученному адресу берет операнд.
Рассмотрим команду MOV AX, [0Eh+BX]:
-a 100
159B:0100 mov ax,[0e+bx]
159B:0103
-r bx
BX 0200
:20
-t
AX=014E BX=0020 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=159B ES=159B SS=159B CS=159B IP=0103 NV UP EI PL NZ NA PE NC
159B:0103 0004 ADD [SI],AL DS:0000=CD
После выполнения команды: BX=0020 AX=014E, т.е. из ячейки памяти со смещением 0020 + 000E = 002E взят операнд и помещен в аккумулятор.
7.7. Косвенная регистровая адресация с индексированием
При использовании косвенной регистровой адресации с индексированием МП 8086 берет в регистре BX или BP первое смещение (базу), складывает со смещением, взятым в регистре SI или DI (индекс), добавляет к сдвинутому регистру сегмента и по полученному адресу берет операнд.
Рассмотрим INC byte ptr [BX+DI] (byte ptr - префикс размерности операнда – 8 бит):
-a 100
159B:0100 inc byte ptr [bx+di]
159B:0102
-r bx
BX 0020
:20
-r di
DI 0000
:100
-d 120 12f
159B:0120 01 00 BF 01 00 CD 21 72-50 8B D8 B8 00 44 CD 21 ......!rP....D.!
-r
AX=014E BX=0020 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0100
DS=159B ES=159B SS=159B CS=159B IP=0100 NV UP EI PL NZ NA PE NC
159B:0100 FE01 INC BYTE PTR [BX+DI] DS:0120=01
-t
AX=014E BX=0020 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0100
DS=159B ES=159B SS=159B CS=159B IP=0102 NV UP EI PL NZ NA PO NC
159B:0102 0e push cs
-d 120 121
159B:0120 02 00 ..
-
т.е. операндно адресу 0100 + 0020 = 0120 увеличен на 1.
Процессоры до 80386 допускали использование следующих комбинаций регистров: BX+SI, BX+DI, BP+SI, BP+DI. Более поздние процессоры допускают также использование любых комбинаций регистров EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP. Запрещенной является только комбинация ESP+ESP.
7.8. Адресация по базе с индексированием
При использовании индексированной базовой адресации МП 8086 берет смещение (базу) в регистре BX или BP, складывает со смещением (индексом), взятым в регистре SI или DI, складывает со сдвигом, заданным в команде, добавляет к сдвинутому регистру сегмента и по полученному адресу берет операнд.
Рассмотрим команду MOV AX,[0200+BX+DI]:
-a 100
159B:0100 mov ax,[200+bx+di]
159B:0104
-r bx
BX 0020
:40
-r di
DI 0100
:60
-d 2a0 2af
159B:02A0 D8 80 7F FF 5C 74 04 C6-07 5C 43 89 1E CD DF 5B ....\t...\C....[
-r
AX=014E BX=0040 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0060
DS=159B ES=159B SS=159B CS=159B IP=0100 NV UP EI PL NZ NA PO NC
159B:0100 8B810002 MOV AX,[BX+DI+0200] DS:02A0=80D8
-t
AX=80D8 BX=0040 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0060
DS=159B ES=159B SS=159B CS=159B IP=0104 NV UP EI PL NZ NA PO NC
159B:0104 0400 ADD AL,00
-
т.е. по адресу 0200 + 0040 + 0060 = 02A0 взят операнд.