Вы находитесь на странице: 1из 14

ОТЧЕТ

о выполнении домашнего задания по дисциплине «Архитектура ВС»


на тему
«АРХИТЕКТУРА СИСТЕМЫ КОМАНД CISC-ПРОЦЕССОРА (INTEL32/64)»

вариант № 12

Выполнил студент группы БИВ-151

ФИО Сидоренко Максим Валерьевич

Дата 20.02.2017
Задание:

Команда FINCSTP

Эффект действия команды заключается во «вращении» стека.


Команда:
1) относится к классу команд «обработки данных»;
2) работает с нечисловыми регистрами сопроцессора;
3) добавляет единицу (без переноса) к трехбитному полю «TOP» слова
состояния FPU (увеличивает указатель стека SP на 1);
4) не изменяет регистр тэгов и не перемещает данные;
5) не эквивалентна операции выталкивания из стека, потому что она не
устанавливает тэг старой вершины стека в значение пустой;
6) имеет неявную адресацию;

Формат команды FINCSTP

КОП

D9F7

Длина команды – 2 байта.


Обобщённый алгоритм команды FINCSTP

Начало алгоритма

Ф1 – чтение команды FINCSTP из ОП в регистр IR

Ф2
Ф2 – декодирование команды
Тип команды – обработки данных.
Длина – 2б.
Поля – КОП – 2б.
Ф2
Число операндов – 1, местоположение – служебный регистр SWR,
режим адресации – неявная.
Результат – 1, местоположение – регистр SWR, адресация – неявная.

Ф3 – выборка операндов
Чтение операнда из SWR во временный буфер БФ = SWR.TOP
Ф2
Ф4 – выполнение операции
ЕСЛИ БФ == 7
ТО БФ = 0;
ИНАЧЕ БФ =Ф2
БФ + 1;
ВСЁ

Ф5 – запись результата
SWR.TOP = БФ
[Результат – изменение (вращение) стека регистров FPU:
Ф2
ST(0)  ST(7), ST(7)  ST(6), …, ST(1)  ST(0)]

Конец алгоритма
Команда TEST

Команда выполняет операцию логического И над операндами, причём не


изменяя сами операнды. В зависимости от результата изменяются флаги
SF, ZF, и PF, а флаги OF и CF сбрасываются.
Форматы команды TEST
1 случай: TEST AL, i8
AX, i16
EAX, i32
КОП Константа
1б 1, 2, 4б

Длина команды – 2, 3, 5 байт.

2 случай: TEST r8 / r16 / r32, i8 / i16 / i32


КОП Постбайт Константа
1б 1б 1, 2, 4б
Длина команды – 3, 4, 6 байт.
3 случай: TEST r8 / r16 / r32, r8 / r16 / r32
КОП Постбайт
1б 1б

Длина команды – 2 байта.

4 случай: TEST m8 / m16 / m32, i8 / i16 / i32


а)
КОП Постбайт Константа
1б 1б 1, 2, 4б

Длина команды – 3, 4, 6 байт.

б)
КОП Постбайт SIB Константа
1б 1б 1б 1, 2, 4б

Длина команды – 4, 5, 7 байт.

в)
КОП Постбайт DISP Константа
1б 1б 1, 2, 4б 1, 2, 4б

Длина команды – 4, 5, 6, 7, 8, 10 байт.

г)
КОП Постбайт SIB DISP Константа
1б 1б 1б 1, 2, 4б 1, 2, 4б

Длина команды – 5, 6, 7, 8, 9, 11 байт.


5 случай: TEST m8 / m16 / m32, r8 / r16 / r32

а)
КОП Постбайт Константа
1б 1б 1, 2, 4б

Длина команды – 3, 4, 6 байт.

б)
КОП Постбайт SIB
1б 1б 1б

Длина команды – 3 байт.

в)
КОП Постбайт DISP
1б 1б 1, 2, 4б

Длина команды – 3, 4, 6 байт.

г)
КОП Постбайт SIB DISP
1б 1б 1б 1, 2, 4б

Длина команды – 4, 5, 7 байт.

Формат команды TEST AL, i8

КОП Константа
1б 1б
А8 03

Длина команды – 2 байта.


Обобщённый алгоритм команды TEST AL, i8

Начало алгоритма

Ф1 – чтение команды TEST из ОП в регистр IR

Ф2 команды
Ф2 – декодирование
Тип команды: обработки данных.
Длина – 2 байта.
Поля – КОП – 1 байт, константаФ2
– 1 байт.
Число операндов – 3, местоположение: 1 оп. – РП, 2 оп. – IR[15..8],
адресация – явная непосредственная, местоположение 3 оп. – РФ,
адресация – неявная.
Результат – 1, местоположение – ОП, адресация – неявная.

Ф3 – выборка операндов
Чтение операндов во временные буферы: БФ1 = AL, БФ2 = IR.i8.
Пусть БФ3 = EFLAGSФ2 (регистр флагов).

Ф4 – выполнение операции
БФ4 = БФ1 & БФ2
Ф2 у БФ3.
Установка флагов

Ф5 – запись результата
1)
БФ3.OF = 0
Ф2
БФ3.CF = 0
2)
ЕСЛИ БФ4 == 0
ТО БФ3.ZF = 0
ИНАЧЕ БФ3.ZF = 1
ВСЁ
3)
Пусть PAR(REG) – функция, принимающая 8-битный регистр
REG, результат которой равен 1, если младший (единственный) байт REG
после выполнения команды TEST содержит четное количество битов,
равных 1. В противном случае результат равен 0. Тогда:
ЕСЛИ PAR(БФ4) == 1Ф2
ТО БФ3.PF = 0
ИНАЧЕ БФ3.PF = 1
ВСЁ
4)
Пусть SIGN(REG) – функция, принимающая 8-битный регистр
REG, результат которой равен 1, если старший бит результата равен 1.
В противном случае результат равен 0. Тогда:
ЕСЛИ SIGN(БФ4) == 1
ТО БФ3.SF = 1
ИНАЧЕ БФ3.SF = 0
ВСЁ

Конец алгоритма
Команда LOOPNZ

Формат команды LOOPNZ

КОП REL (адрес)


1б 1, 2, 4б

Длина команды – 2, 3, 5 байт.

Формат команды LOOPNZ cycle

КОП REL (адрес)


1б 1б
E0 F9

Длина команды – 2 байта.


Обобщённый алгоритм команды LOOPNZ cycle

Начало алгоритма

Ф1 – чтение команды LOOPNZ из ОП в регистр IR

Ф2
Ф2 – декодирование команды
Тип команды: передачи управления.
Длина – 2 байта.
Поля – КОП – 1 байт, REL (адрес) – 1 байт.
Ф2
Число операндов – 4, местоположение оп1 (метки) – ОП, адресация
– прямая, явная, местоположение оп2 (ECX) – РП, адресация – неявная,
местоположение оп3 (EIP) – РП, адресация – неявная, местоположение
оп4 (EFLAGS) – РП, адресация – неявная.
Результат – 2, местоположение 1-го рез-та (адреса) – ОП, адресация
– неявная, местоположение 2-го рез-та (ECX) – РП, адресация – неявная.

Ф3 – выборка операндов
Чтение операндов во временные буферы: БФ1 = cycle (метка),
БФ2 = ECX (или CX)1, БФ3 = EIP, БФ4 = EFLAGS.

Ф2
Ф4 – выполнение операции
БФ2 = БФ2 – 1
ЕСЛИ БФ2 == 0 или БФ4.ZF == 1
ТО БФ3 = БФ3 + 2 (передать управление команде,
следующей за командой LOOPNZ, то есть выйти из цикла)

1
Примечание: если атрибут размера адреса равен 16 бит, то в качестве
счетчика используется регистр CX, иначе — ECX.
ИНАЧЕ БФ3 = БФ3 + REL (передать управление
команде, следующей за меткой cycle, то есть перейти к началу цикла)
ВСЁ
Ф2

Ф5 – запись результата
ECX (или CX) = БФ2
EIP = БФ3 Ф2

Конец алгоритма

Команда PMADDWD

Команда PMADDWD умножает 4 знаковых слова операнда-назначения


на 4 знаковых слова операнда-источника. В результате получается 4
двойных слова. Затем два старших двойных слова суммируются между
собой и результат записывается в старшее двойное слово операнда-
назначения, два младших двойных слова также суммируются между
собой, и результат записывается в младшее двойное слово операнда-
назначения.
Операндом-назначением является MMX-регистр.
Операндом-источником может быть как MMX-регистр, так и операнд в
памяти.
В результате выполнения команды PMADD произойдет циклический
перенос, если все 4 слова обоих операндов равны 8000h.

Формат команды PMADDWD


1 случай: PMADDWD rmmx1, rmmx2

КОП Постбайт
2б 1б

Длина команды – 3 байта.


2 случай: PMADDWD rmmx, m64
а)
КОП Постбайт
2б 1б

Длина команды – 3 байта.

б)
КОП Постбайт SIB
2б 1б 1б

Длина команды – 4 байт.


в)
КОП Постбайт DISP
2б 1б 1, 2, 4б

Длина команды – 4, 5, 7 байт.

г)
КОП Постбайт SIB DISP
2б 1б 1б 1, 2, 4б

Длина команды – 5, 6, 8 байт.

Формат команды PMADDWD rmmx1, rmmx2

КОП Постбайт
2б 1б
0FF5 C3

Длина команды: 3 байта.


Обобщённый алгоритм команды PMADDWD

Начало алгоритма

Ф1 – чтение команды PMADDWD из ОП в регистр IR

Ф2 команды
Ф2 – декодирование
Тип команды: обработки данных.
Длина – 3 байта. Ф2
Поля – КОП (2 байт), постбайт (1 байт).
Число операндов – 2. Местоположение 1-го и 2-го операндов – РП,
адресация –явная, прямая.
Результат – 1, местоположение – РП (первый операнд), адресация –
Ф2
явная, прямая.

Ф3 – выборка операндов
Чтение операндов во временные буферы: БФ1 = rmmx1, БФ2 = rmmx2.
Ф2

Ф4 – выполнение операции
БФ1(31..0) = (БФ1(15..0) * БФ2(15..0)) + (БФ1(31..16) * БФ2(31..16));
БФ1(63..32) = (БФ1(47..32) * БФ2(47..32)) + (БФ1(63..48) * БФ2(63..48)).

Ф5 – запись результата
rmmx1 = БФ1.
Ф2

Конец алгоритма