Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler (Уч_пос_Лаб_Ч1).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.43 Mб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]