Лекции по курсу "Проектирование ассемблеров, компоновщиков, макропроцессоров
9. Формат машинных команд
Система машинных команд является важнейшей частью архитектуры компьютера, так как с их помощью производится непосредственное управление работой процессора. Каждая команда ассемблера = 1 команде машины.
- Команды, которые не содержат операндов, занимают в памяти 1 байт.
- Команды с одним операндом (одноадресные)
- Операнд в 16-ти разрядном регистре. Машинная команда занимает 1 байт, который делится на 2 поля: биты 0-4 хранят код операции (КОП), а биты 5-7 - код регистра.
В таблице приведены соответствия кодов в r/m и названий для 16-разрядных регистров.
Таблица 1 Код 000 001 010 011 100 101 110 111 Регистр AX CX DX BX SP BP SI DI - Операнд в 8-разрядном либо в 16-разрядном регистре. Команда занимает 2 байта.
Однобитное поле w определяет длину операнда. Поле mod (3 бита) показывает, находится ли операнд в регистре или в памяти. Если mod = 11, то операнд содержится в регистре, а три остальные комбинации (00, 01, 10) относятся к памяти. Когда операнд - в регистре, поле r/m показывает конкретный регистр (таблицы 1 и 2); а если операнд - в памяти, это поле определяет, где он находится (таблица 3).
mod = 11
r/m - код регистра
w = 0 - 8-разрядный регистр
w = 1 - 16-разрядный регистр
В таблице приведены соответствия кодов в r/m и названий для 8-разрядных регистров.
Таблица 2 Код 000 001 010 011 100 101 110 111 Регистр AL CL DL BL AH CH DH BH
Пример:
inc cl - Косвенная адресация. Формат команды - 2 байта. mod = 00.
Таблица 3 r/m Базовый регистр Индексный регистр 000
001
010
011
100
101
110
111BX
BX
BP
BP
-
-
BP
BXSI
DI
SI
DI
SI
DI
-
- - Смешанная адресация.
Пример: INC Word Ptr X[BX]
Значение mod зависит от размера X, где offset X - число.
Если offset Х < 128, то команда занимает 3 байта, и mod = 01.
Если offset X >= 128 (… 255), то команда занимает 4 байта (третий байт - младшие разряды смещения, четвертый байт - старшие разряды смещения), и mod = 10
Префикс замены сегментного регистра:
В поле seg сегментные регистры кодируются следующим образом: - Операнд в 16-ти разрядном регистре. Машинная команда занимает 1 байт, который делится на 2 поля: биты 0-4 хранят код операции (КОП), а биты 5-7 - код регистра.
- Двухоперандные команды
Главная часть команды - 2 байта.
Пример: mov ax,x
mov x,ax
Значения mod и r/m такие же, что и при однооперандных командах. reg хранит адрес одного из регистров. Бит d определяет назначение.
d = 0 mov x,ax регистр-источник
d = 1 mov ax,x регистр-приёмник
Введение
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев