Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Структура команд МП




 

Машинные команды МП занимают от одного до 6 байтов, причем операционная часть занимает один или 2 первых байта команды, остальные байты – адресная часть.

Операционная часть в свою очередь делится на код операции (КОП) и модификаторы. Модификаторы располагаются после КОП и указывают типы операндов и способы их адресации.

Операнды могут быть указаны:

- в самой команде (непосредственная адресация);

- в одном из регистров МП, тогда в команде указывается этот регистр (регистровая адресация);

- в оперативной памяти по адресу, который тем или иным способом описан в команде (прямая, базовая или индексная адресация;

- некоторые команды требуют, чтобы один из операндов находился в определенном регистре (например, в аккумуляторе AX), тогда операнд не указывается в команде (подразумеваемая адресация).

Команды в языке ассемблера (ЯА) МП фирмы Intel в основном двухоперандные (двухадресные). Результат выполнения команды обычно помещается на место первого операнда.

Форматы команд разнообразны, т.к. для каждого операнда может использоваться собственный способ адресации. Рассмотрим основные форматы двухадресных команд.

В общем виде команду можно записать в виде:

Op1:= op1 ¤ op2,

Где ¤ – какая-то операция, заданная кодом операции.

 

Например, команда ЯА пересылки данных из op1 в op2 имеет вид

Mov op1, op2

и выполняет копирование содержимого op2 в op1, т.е.

op2:= op1.

В данной команде

op1 – может быть регистром или ячейкой памяти,

op2 - может быть регистром, ячейкой памяти или непосредственным операндом.

Заметим, что содержимое op2 не изменяется.

Отметим также основные правила записи команд ЯА:

- мнемоника (имя) команды отделяется от операндов хотя бы одним пробелом;

- операнды разделяются запятой;

- после точки с запятой в той же строке можно поместить комментарий.

Рассмотрим форматы команд и методы адресации на примере команды пересылки, описанной выше.

1. Формат «Регистр-регистр» (Рг-Рг) – 2 байта

Например,

Mov AL, AH

Выполняет пересылку AL:= AH

В общем виде

reg?:= reg1 ¤ reg2

 

Формат команды (см. рис.4)

1-й байт 2-й байт
КОП d w md reg1 reg2
           

Рис. 4

Здесь w – определяет размер операндов, т.е. w = 0 – слова (2 байта), w = 1 – байты;

d – бит направления пересылки, d = 0 – приемник результата - reg1, d = 1 – приемник результата – reg2;

md – поле режима адресации (2 бита), для формата «Рг-Рг» md = 11;

reg1, reg2 – содержат трехразрядный двоичный код, который обозначает конкретный регистр МП. (см. табл.1):

 

Таблица 1.

 

Значение поля reg                
Адресуемый w =0 AL CL DL BL AH CH DH BH
регистр w =1 AX CX DX BX SP BP SI DI

 

2. Формат «Регистр-память» (Рг-ЯП) – 2÷4 байта

 

Например,

Mov AX, X; AX:= ОП(X)

Mov X, AX; ОП(X):= AX

Здесь запись ОП(X) означает ячейку оперативной памяти, адресованную при помощи имени X.

Формат команды (см. рис.5)

1-й байт 2-й байт 3-й, 4-й байты
КОП d w md reg r/m Adr (0 ÷ 2 байта)
             

Рис. 5

Здесь w – см. выше;

d – см. выше, а именно при d = 0 – запись результата в ячейку памяти, при d = 1 – запись результата в регистр;

md – указывает, сколько байтов в команде занимает адрес в двоично-кодированном виде (т.е. может принимать значения 00, 01, 10);

поле r/m указывает способ модификации адреса.

От сочетания полей md и r/m могут образоваться различные способы адресации.

Так при md = 00 и r/m = 110 – прямая адресация, т.е. в следующем 3-ем байте команды указан адрес ячейки памяти.

При других сочетаниях образуются следующие способы адресации:

- базово-индексная, при которой физический адрес вычисляется по выражению

[Рг Б] + [Рг И] + disp,

где disp – смещение, которое может быть константой или выражением;

[Рг Б] – содержимое базового регистра, а именно BP или BX;

[Рг И] – содержимое индексного регистра, а именно SI или DI;

- индексная адресация - [Рг И] + disp;

- базовая адресация - [Рг Б] + disp;

- при disp = 0 адресация называется косвенной.

Между индексной и базовой адресациями нет различий, они выделены для ограничения числа вариантов адресации, т.е при базово-индексной адресации не допускается использование двух регистров из одной группы. Например, нельзя использовать два базовых регистра в одной команде.

В программе на ЯА можно записать эти способы адресации разными формами записи (см табл. 2).

 

Таблица 2

Способ адресации Обозначение операнда в команде ЯА
Базово-индексная disp[Рг Б] [Рг И] disp[Рг Б] + [Рг И] disp[Рг Б + Рг И]
Индексная disp[Рг И] [Рг И] + disp
Базовая disp[Рг Б] [Рг Б] + disp
Косвенная [Рг И] [Рг Б]

 

В поле adr содержится указание адреса в “польской инверсной записи” (или LEM – little endian method), при которой младший байт располагается раньше старшего.

Например, адрес 620Bh займет в команде 2 байта

1-й байт 2-й байт 3-й байт 4-й байт
    0B  

 

3. Формат «Регистр-непосредственный операнд» (Рг-НО) – 3÷4 байта

 

Формат команды (см. рис.6)

1-й байт 2-й байт 3-й, 4-й байты
КОП s w md КОП’ reg data (1 ÷ 2 байта)
             

Рис. 6

Здесь s используется в сочетании с w в разный командах немногом по-разному, но смысл – выбор длины непосредственного операнда 1 или 2 байта;

КОП’ – дополнительное поле, расширение кода операции в двухоперандных командах с непосредственным операндом;

reg - обозначает конкретный регистр в сочетании с w;

data – поле данных, причем если это слово, то – в польской инверсной записи.

 

4. Формат «Память-непосредственный операнд» (ЯП-НО) – 3÷6 байтов

 

Формат команды (см. рис.7)

1-й байт 2-й байт С 3-го по 6-й байты
КОП s w md КОП’ r/m adr (1 ÷ 2 байта) data (1 ÷ 2 байта)
               

Рис. 7

Смысл полей аналогичен описанным выше.

Наибольшие сложности при анализе машинных кодов программ возникают при записи непосредственных операндов, т.к. отрицательные числа представляются в дополнительных кодах и хранятся в памяти в польской инверсной записи.

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 1202 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

4452 - | 4147 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.