
- •Введение в архитектуру эвм.
- •3. Регистр — непосредственный операнд(ri). 4. Память — непосредственный операнд(si). 5. Память — память(ss).
- •Базирование адресов.
- •8 Бит 24 бита
- •Структура команд
- •Формат регистр–память (и память-регистр).
- •8 Бит 2 бита 3 бита 3 бита 8 бит 8 бит
- •Значения полей mod и mem в формате регистр-память.
- •Арифметические команды
8 Бит 2 бита 3 бита 3 бита 8 бит 8 бит
КОП |
d |
W |
Mod |
R1 |
Mem |
a8 |
a8->a16 |
mod – поле модификатора,
mem – поле способа адресации,
a8 и a16 – одно- или двухбайтовое смещение,
d и w – биты направления и размера аргумета.
Значения полей mod и mem в формате регистр-память.
Mem \ mod |
00 |
01 |
10 |
11 |
|
0 доп. байт |
1 доп. байт |
2 доп. байта |
Формат RR
|
000 |
[BX+SI] |
[BX+SI]+a8 |
[BX+SI]+a16 |
|
001 |
[BX+DI] |
[BX+DI]+a8 |
[BX+DI]+a16 |
|
010 |
[BP+SI] |
[BP+SI]+a8 |
[BP+SI]+a16 |
|
011 |
[BP+DI] |
[BP+DI]+a8 |
[BP+DI]+a16 |
|
100 |
[SI] [SI]+a8 |
[SI]+a16 |
|
|
101 |
[DI] [DI]+a8 |
[DI]+a16 |
|
|
110 |
a16 [BP]+a8 |
[BP]+a16 |
|
|
111 |
[BX] [BX]+a8 |
[BX]+a16 |
|
Команды языка машины
Рассмотрим синтаксис машинных команд и семантику их выполнения центральным процессором. Для удобства команды будем записывать так, как это принято в языке Ассемблер.
Команды пересылки
Команды пересылки – одни из самых распространённых команд в языке машины. Все они пересылают один или два байта из одного места памяти в другое.
Введём следующие условные обозначения:
r8 – любой короткий регистр AH,AL,BH,BL,CH,CL,DH,DL;
r16 – любой из длинных регистров AX,BX,CX,DX,SI,DI,SP,BP;
m8, m16 – операнды в основной памяти длиной 1 и 2 байта соответственно;
i8, i16 – непосредственные операнды в самой команде длиной 1 и 2 байта соответственно;
SR – один из сегментных регистров SS, DS, ES;
m32 – операнд в основной памяти длиной 4 байта.
mov op1, op2; op1 := op2
Существуют следующие допустимые форматы операндов команды пересылки:
op1 |
оp2 |
R8 |
r8, m8, i8 |
R16 |
r16, m16, i16, SR, CS |
M8 |
r8, i8 |
M16 |
r16, i16, SR, CS |
SR |
r16, m16 |
Команда пересылки не меняет флаги в регистре FLAGS.
Арифметические команды
Команды сложения и вычитания:
add op1, op2 – сложение,
sub op1, op2 - вычитание:
op1 := op1 ± op2
adc op1, op2 – сложение с учётом флага переноса,
sbb op1, op2 – вычитание с учётом флага переноса:
op1 := op1 ± op2 ± CF
Таблица допустимых операндов для этих команд:
op1 |
op2 |
R8 |
r8, m8, i8 |
M8 |
r8, i8 |
R16 |
r16, m16, i16 |
M16 |
r16, i16 |
В результате выполнения операций изменяются следующие флаги:
CF – флаг переноса,
OF – флаг переполнения,
ZF – флаг нулевого результата,
SF – флаг знака результата.
Команды умножения и деления целых чисел.
В младшей модели семейства есть следующие команды умножения и деления, в них явно задаётся только второй операнд (второй сомножитель или делитель). Первый операнд всех команд этого класса явно в команде не указывается и находится в фиксированном регистре, принимаемом по умолчанию.
mul op2 – беззнаковое умножение,
imul op2 – знаковое умножение,
div op2 – беззнаковое целочисленное деление,
idiv op2 – знаковое целочисленное деление.
Вычисления производится по формулам:
Умножение для коротких операндов:
AX := AL * op2
Деление для коротких операндов:
AL := AX div op2
AH := AX mod op2
Умножение для длинных операндов:
(DX,AX) := AX * op2
Деление для длинных операндов:
AX := (DX,AX) div op2
DX := (DX,AX) mod op2
В этих командах операнд op2 может иметь формат r8,r16,m8 или m16.
Команды умножения устанавливаются флаги переполнения и переноса.