Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 6 Способы_адресации.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
48.77 Кб
Скачать

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.

Команды умножения устанавливаются флаги переполнения и переноса.