Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5. CPU i86.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
237.57 Кб
Скачать

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

Существует 2 формы представления машинных команд:

- исходный текст на ассемблере;

- бинарный код.

Команды на языке ассемблера содержат:

- символьный код операции,

- один или два операнда:

- левый задает адрес приёмника,

- правый - адрес источника,

- оба операнда заданы регистрами или только один,

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

В некоторых командах операнды могут задаваться как "память-память":

- MOVS - команда копирования строки;

- работы со стеком, являющегося частью памяти.

Адрес ячейки памяти задается:

- прямым адресом (offset) или

- компонентами (B, X, disp),

где disp = "число" или disp = "число"+"числовая константа".

Примеры команд на уровне ассемблера:

mov ax, bx ;копирование в ax содержимого bx

mov ax, ds:offset 356 ;копирование в ax значения ячейки по смещению 356

mov ax, [СS:bх +356] ;копирование в ax значения ячейки из математического адреса СS:bх +356

mov ax, [bp +si+356] ;копирование в ax значения ячейки по адресу, равному сумме значений регистров bp, si и смещения 356

mov byte ptr z, 15 ;копирование числа 15 в ячейку памяти (размером в байт) по адресу z

Операнды можно записать:

1) ma[bx + di - 1000] = [bx + di + ma + (- 1000)]

2) bx[si - 511] = [bx + si + (- 511)]

где ma - числовая константа.

Машинная кодировка команд cpu i86

В CPU i86 используются команды переменной длины: 17 байт.

0-2 байта

1 байт

0,1 байт

0-2 байта

0-2 байта

префикс

код

операции

постбайт

байты

смещения (disp)

непосред-ственный операнд

Рис.5. Структура команд CPU i86

Префикс

Используются 2 необязательных префикса:

- повторения;

- замены текущего сегмента памяти в команде.

Префикс повторения:

- для обработки вектора символов;

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

Количество повторений задается:

- регистром cx, уменьшаемым каждый раз на единицу,

- выполнением условия из регистра Flags.

Префикс замены сегмента памяти

Можно явно изменить используемый по умолчанию сегмент:

1) mov ax, [CS:bx +356]

- регистр bх по умолчанию работает с сегментом DS,

- но запись CS:bх указывает на работу с данными из сегмента CS;

2) mov ax, [ma + bх +356]

- в смещении адреса указан регистр bx (или bp),

- указывающий, что неявно используется сегмент DS (или SS),

- а переменная (ma) в смещении задана в другом сегменте (пусть в CS);

- префикс замены сегмента равен сегменту, в котором находится переменная.

Код операции

Является единственным обязательным элементом команды (1 байт).

Биты 0-4 (или 0-7)

Бит 5

Бит 6

Бит 7

Код команды

s

d

w

s=1 - расширение байта данных до слова в команде с 1-м аргументом

d=1 - адрес приёмника - регистр;

иначе - память

w=0 - размер операндов - байт;

w=1 - слово

Также возможны ситуации использования битов 5-7:

- не используются под флаги s, d, w (используются под код команды);

- используются в одноместной команде для задания номера РОНа с данными.

Постбайт:

- необязательная часть команды,

- задающая 1 или 2 адреса операндов,

- один из операндов является и адресом результата.

Постбайт (рис. 6) содержит 3 поля:

- md - поле режима адресации,

- r/r - поле номеров регистров,

- r/M - поле:

- номера регистра другого операнда или

- метода получения адреса памяти.

7

6

5 -

3

2 -

0

md

r/r

r/M

Рис. 6. Структура постбайта

Параметры постбайта

md

Адресация

Примечание по адресации

Поле r/r

Поле r/M

00

регистр/память

без смещения disp

№ РОНа 1-го операнда

№ метода вычисления адреса памяти одного из операндов

01

регистр/память

смещение в 1 байт в диапазоне [-128; 127]

10

регистр/память

смещение в 2 байта в диапазоне [-32768; 32767]

11

регистр/регистр

без использования памяти

№ РОНа 2-го операнда

При адресации "регистр/память" поле r/m описывает:

r/m

Адресация ячейки памяти одного из операндов

000011

адрес задается 3-мя компонентами: B, X и disp

100111

адрес задается 2-мя компонентами: B и disp

110 при md = 00

исключение: адрес задан прямым 2-х байтным смещением

Табл.1. Формулы вычисления адресов по значениям полей постбайта

Поле

r/m

Поле md

00

01 (disp в 1 байт)

10 (disp в 2 байта)

11 (другой аргумент - регистр)

w = 0

w = 1

000

DS:[bx + si]

DS:[bx + si + disp]

DS:[bx + si + disp]

al

ax

001

DS:[bx + di]

DS:[bx + di + disp]

DS:[bx + di + disp]

cl

cx

010

SS:[bp + si]

SS:[bp + si + disp]

SS:[bp + si + disp]

dl

dx

011

SS:[bp + di]

SS:[bp + di + disp]

SS:[bp + di + disp]

bl

bx

100

DS:[si]

DS:[si + disp]

DS:[si + disp]

ah

si

101

DS:[di]

DS [di + disp]

DS [di + disp]

ch

di

110

DS:[disp 2 байта]

SS:[bp + disp]

SS:[bp + disp]

dh

bp

111

DS:[bx]

DS [bx + disp]

DS [bx + disp]

bh

bx

0-1 байт

1 байт

0-1 байт

0-2 байта

0-2 байта

Префикс

Код операции.

Постбайт

Disp

data

md

r/r

r/m

2 бита

3 бита

3 бита

Вариант базово-индексной адресации памяти

если

r/M ≤ 011

то - команда типа "регистр/память"; один операнд - в регистре, указанном полем r; адрес памяти другого операнда:

(B)+(X)+ disp, где В и Х задаются кодом поля r/M.

при:

00 

Disp - отсутствует

01 

Disp = 1 байт

10 

Disp = 2 байта

При

11

Команда типа "регистр/регистр", операнды находятся в регистрах, указанными полями r/r и r/M.

Вариант относительно-индексной адресации памяти

если

r/M 100,

то команда типа "регистр/память"; один операнд - в регистре, указанном полем r; адрес памяти другого операнда: (B)+ Disp,

где B задается кодом поля r/M.

при

00 

Disp - отсутствует

01 

Disp = 1 байт

10 

Disp = 2 байта

При md=00 и r/M = 110 адрес задается прямым смещением в 2 байта

Для адреса вида [bp] (mov [bp], 1): md=01 и cо смещением DispL=0

При указании в адресе bp используется сегмент SS; при bx - сегмент DS

Рис.7. Структура команд CPU i86 в реальном режиме

Числовое смещение, кроме случаев исключений, занимает размер:

- 1 байт, если оно в диапазоне [-128; 127];

- 2 байта, если оно в диапазоне [-32768; 32767];

- 2 байта, если в смещении задана переменная (ma, mb, bd, bk, wd, wk).

Размер данных (data) определяется:

- размером задающего их регистра (1 или 2 байта);

- директивой "Byte ptr" (1 байт) или "Word ptr" (2 байта) перед адресом (в скобках [ ]) - mov Word PTR [BX+DI], 140

- числовым значением data:

- 1 байт - в диапазоне [0; 255] → mov al, 128

- 2 байта - в диапазоне [0; 65535] → mov ax, 32760.

Если данные отрицательные, то нормируются верхним значением диапазона - числом 256 или 65536:

-7 = -7 + 256 = 249

38

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