- •1. Предварительные сведения 6
- •2. Процессоры intel в реальном режиме 11
- •3. Директивы и операторы ассемблера 51
- •Введение
- •1. Предварительные сведения
- •1.1. Подготовка программ на языке ассемблера
- •1.2. Представление данных в компьютерах
- •1.2.1. Двоичная система счисления
- •1.2.2. Биты, байты и слова
- •1.2.3. Шестнадцатеричная система счисления
- •1.2.4. Числа со знаком
- •1.2.5. Логические операции
- •1.2.6. Коды символов
- •2. Процессоры intel в реальном режиме
- •2.1. Регистры процессора
- •2.1.1. Регистры общего назначения
- •2.1.2. Модели памяти и сегментные регистры
- •2.1.3. Стек
- •2.1.4. Регистр флагов
- •2.2.4. Косвенная адресация
- •2.2.5. Адресация по базе со смещением
- •2.2.6. Косвенная адресация с масштабированием
- •2.2.7. Адресация по базе с индексированием
- •2.2.8. Адресация по базе с индексированием и масштабированием
- •2.3. Основные непривилегированные команды
- •2.3.1. Пересылка данных
- •2.3.2. Двоичная арифметика
- •2.3.3. Десятичная арифметика
- •2.3.4. Логические операции
- •2.3.5. Сдвиговые операции
- •2.3.6. Операции над битами и байтами
- •2.3.7. Команды передачи управления
- •2.3.8. Строковые операции
- •2.3.9. Управление флагами
- •2.3.10. Загрузка сегментных регистров
- •2.3.11. Другие команды
- •3. Директивы и операторы ассемблера
- •3.1. Структура программы
- •3.2. Директивы распределения памяти
- •3.2.1. Псевдокоманды определения переменных
- •3.2.2. Структуры
- •3.3. Организация программы
- •3.3.1. Сегменты
- •3.3.2. Модели памяти и упрощенные директивы определения сегментов
- •3.3.4. Процедуры
- •3.3.5. Конец программы
- •3.3.6. Директивы задания набора допустимых команд
- •3.3.7. Директивы управления программным счетчиком
- •3.3.8. Глобальные объявления
- •3.3.9. Условное ассемблирование
- •3.4. Выражения
- •3.5. Макроопределения
- •3.5.1. Блоки повторений
- •3.5.2. Макрооператоры
- •3.5.3. Другие директивы, используемые в макроопределениях
- •3.6. Другие директивы
- •3.6.1. Управление файлами
- •3.6.2. Управление листингом
- •3.6.3. Комментарии
- •Литература
2.3.10. Загрузка сегментных регистров
• Команда: LDS приемник,источник
• Назначение: Загрузить адрес, используя DS
• Процессор: 8086
• Команда: LES приемник,источник
• Назначение: Загрузить адрес, используя ES
• Процессор: 8086
• Команда: LFS приемник,источник
• Назначение: Загрузить адрес, используя FS
• Процессор: 80386
• Команда: LGS приемник,источник
• Назначение: Загрузить адрес, используя GS
• Процессор: 80386
• Команда: LSS приемник,источник
• Назначение: Загрузить адрес, используя SS
• Процессор: 80386
Второй операнд (источник) для всех этих команд — переменная в памяти размером в 32 или 48 бит (в зависимости от разрядности операндов). Первые 16 бит из этой переменной загружаются в соответствующий сегментный регистр (DS для LDS, ES для LES и т. д.), а следующие 16 или 32 — в регистр общего назначения, указанный в качестве первого операнда. В защищенном режиме значение, загружаемое в сегментный регистр, всегда должно быть правильным селектором сегмента (в реальном режиме любое число может использоваться как селектор).
2.3.11. Другие команды
• Команда: NOP
• Назначение: Отсутствие операции
• Процессор: 8086
NOР — однобайтная команда (код 90h), которая не выполняет ничего, только занимает место и время. Код этой команды фактически соответствует команде XCHG AL,AL. Можно многие команды записать так, что они не будут приводить ни к каким действиям, например:
mov ах,ах ; 2 байта
xchg ах,ах ; 2 байта
lea bx,[bх+0] ; 3 байта (8Dh, 5Fh, 00h, но многие ассемблеры,
; встретив такую команду, реально используют более
; короткую команду lea bx [bх] с кодом 8Dh 1Fh)
shl еах,0 ; 4 байта
shrd еах,еах,0 ; 5 байт
• Префикс: LOCK
• Назначение: Префикс блокировки шины данных
• Процессор: 8086
На все время выполнения команды, снабженной таким префиксом, будет заблокирована шина данных, и если в системе присутствует другой процессор, он не сможет обращаться к памяти, пока не закончится выполнение команды с префиксом LOCK. Команда XCHG автоматически всегда выполняется с блокировкой доступа к памяти, даже если префикс LOCK не указан. Этот префикс можно использовать только с командами ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD и XCHG.
• Команда: UD2
• Назначение: Неопределенная операция
• Процессор: Р6
Эта команда всегда вызывает ошибку «неопределенная операция» (исключение #UD). Впервые она описана как таковая для Pentium Pro, но во всех предыдущих процессорах эта команда (код 0Fh 0Bh) не была определена и, естественно, приводила к такой же ошибке. UD2 предназначена для тестирования программного обеспечения, в частности операционных систем, которые должны уметь корректно обрабатывать такую ошибку. Название команды происходит от команды UD (код 0Fh 0FFh), которая была определена AMD для процессоров AMD K5.
• Команда: CPUID
• Назначение: Идентификация процессора
• Процессор: 80486
CPUID сообщает информацию о производителе, типе и модификации процессора, о наличии и поддержке различных расширений. Команда CPUID поддерживается Intel, начиная с процессоров Intel 80486DX/SX/DX2 SL, UMC U5S, Cyrix Ml, AMD 80486DX4. Процессор поддерживает эту команду, если возможна установка флага ID в 1 (бит 21 в peгистpe EFLAGS).
Результат работы CPUID зависит от значения регистра ЕАХ. Если ЕАХ = 0, CPUID возвращает в ЕАХ максимальное значение, с которым ее можно вызывать (2 для Р6, 1 для Р5), а регистры EBX:ECX:EDX содержат 12-байтную строку — идентификатор производителя (табл. 8).
Например, для процессоров Intel регистр ЕВХ содержит «Genu» (756E6547h), ЕСХ содержит «ineI» (49656E69h), a EDX — «ntel» (6C65746Eh).
Если ЕАХ = 1, CPUID возвращает в ЕАХ информацию о версии процессора, а в EDX — информацию о поддерживаемых расширениях, относящихся к работе процессора в защищенном режиме. Значения битов EAX следующие: биты 3 – 0 — модификация; биты 7 – 4 — модель; биты 11 – 8 — семейство (3 для 386, 4 для 486, 5 для Pentium, 6 для Pentium Pro); биты 13 – 12 — тип (0 — OEM, I — Overdrive, 2 — Dual); биты 31–14 зарезервированы и равны нулю.
-
Таблица 8. Строки производителей в CPUID
Производитель
Строка в EBX:ECX:EDX
Intel
GenuineIntel
UMC
UMC UMC UMC
Cyrix
CyrixInstead
AMD
AuthenticAMD
NexGen
NexGenDriven
Centaur Technology
CentaurHalls