
- •ОБразования российской федерации
- •Цель работы
- •Теоретическая часть
- •Режимы работы процессоров
- •Организация памяти эвм
- •Управляющие регистры
- •Прерывания и исключения
- •Цикл выполнения команды в процессоре
- •Стандартные фазы цикла выполнения команды
- •Примеры команд 32-разрядного процессора
- •XchGоперанд_1, операнд_2 (xchgах,bl)
- •Порядок выполнения работы
- •Вопросы для самопроверки (защиты л/р)
- •Список литературы
Примеры команд 32-разрядного процессора
При выполнении курсового проекта следует помнить, что:
1) попытка выполнения любой команды с последовательностью байтов, представляющих операнд в памяти, хотя бы один байт которого не умещается в данном сегменте, вызовет исключение #GP;
2) при невозможности обращения к требуемой странице памяти процессор вырабатывает исключение #PF(PageFault– отказ страницы).
ADC (Additionwith Carry)- сложение с учетом значения флага переносаCF.
ADCприемник, источник (ADCАХ, В)
Действие:приемник = приемник + источник + EFLAGS.CF.
Команда влияет на флаги OF,SF,ZF,AF,PF,CF, значения которых определяются результатом сложения. Первый операнд – имя регистра или адрес ячейки памяти (8, 16 или 32 разряда); второй операнд – имя регистра, адрес ячейки памяти или непосредственный операнд размером в байт, слово или двойное слово. Размерности первого и второго операнда должны совпадать.
Алгоритм выполнения команды в АЛУ
Выборка операнда приемники копирование его в регистр-накопитель.
Выборка операнда источники сложение его с содержимым регистра-накопителя.
Прибавление к содержимому накопителя значения флага переноса EFLAGS.CF.
Копирование содержимого накопителя в операнд приемник.
В зависимости от результата установить флаги.
Исключения: #GP, #PF.
DIV (DIVide unsigned) – беззнаковое деление
DIVделитель(DIVСХ ;AX:=(DX|AX)/CX(DX-ост))
Действие:деление без учёта знака (положительные числа) делимого, расположенного в регистрах процессора (см. табл.7) на операнд-делитель. Делимое задается неявно, и его размер зависит от размера делителя. Местоположение делимого, делителя, частного и остатка, в зависимости от размера, показаны в табл.7. После выполнения команды флагиOF,SF,ZF,AF,PF,CFимеют неопределенные значения. Использование в качестве делителя непосредственных операндов не допускается.
Таблица 7.Местоположение и размер данных, участвующих в операции беззнакового деления
Размер операнда |
Делимое |
Делитель |
Частное |
Остаток | |
байт |
AX |
r8/m8 |
AL= |
АХ |
AH |
операнд | |||||
слово |
DX:AX |
r16/m16 |
AX= |
DX:AX |
DX |
операнд | |||||
двойное слово |
ЕDX:ЕAX |
r32/m32 |
ЕAX= |
ЕDX:ЕAX |
ЕDX |
операнд |
Здесь r– регистр,m– ячейка памяти, число означает разрядность.
Частное целое и округляется в меньшую сторону.
Алгоритм выполнения команды в АЛУ
Выборка делимогои копирование его в регистр-накопитель.
Выборка операнда делительи непосредственное деление на него содержимого накопителя методом последовательного многократного вычитанияделителяизделимого, причем частное и остаток записываются в регистры, указанные в табл.7.
Исключения: #DE, #GP, #PF.
MOV (MOVeoperand)– копирование содержимого операндаисточникв операндприемник.
MOVприемник, источник (MOVАХ, [EDI])
Действие:приёмник=источник
Выборка операнда из источникаи копирование его вприемник. Значение второго операнда не изменяется. Первый операнд – имя регистра или адрес ячейки памяти размером в байт, слово или двойного слово. Второй операнд – регистр, ячейка памяти или непосредственный операнд (исключается случай, когда оба операнда находятся в памяти или оба в сегментных регистрах). Размерности первого и второго операнда должны совпадать. Команда не изменяет значения флагов.
Алгоритм выполнения команды
Выборка операнда из источника.
Копирование его в приемник, начиная с младших разрядов.
Исключения: #GP, #PF.
OR (logical inclusive OR) – логическое включающее ИЛИ.
OR приемник, маска (OR EDX, mas[EBX+ESI])
Действие:приемник = приемник маска
Команда выполняет операцию логического ИЛИ над соответствующими парами бит операндов приёмника и маски. Первый операнд – имя регистра или адрес ячейки памяти размером в байт, слово или двойное слово. Второй операнд – регистр, ячейка памяти или непосредственный операнд (исключается случай, когда оба операнда находятся в памяти). Команда сбрасывает в 0 флаги CFиOF; значение флагов SF, ZF, PF зависят от результата выполнения команды; флагAFостается неопределенным.
Алгоритм выполнения команды в АЛУ
Выборка операнда из приемникаи копирование его в накопитель.
Побитовая дизъюнкция содержимого накопителя и маски. При этом бит результата равен 0, если соответствующие биты операндов маска и назначения равны 0, в противном случае бит равен 1;
Копирование содержимого накопителя в приемник.
Запись результата операции в источник (операнд маскаостается неизменным);
Установка флагов.
Исключения: #GP, #PF.
SUB (SUBtract) – вычитание.
SUBоперанд_1, операнд_2 (SUBEAX,EAX)
Действие:операнд_1 = операнд_2 – операнд_1.
Команда выполняет целочисленное вычитание операндов со знаком. Значение флагов OF, SF, ZF, AF, PF, CF зависят от результата выполнения команды. Операнд_1– регистр или ячейка памяти размером байт, слово или двойное слово.Операнд_2– регистр, ячейка памяти или непосредственный операнд того же размера, что иоперанд_1 (исключается случай, когда оба операнда находятся в памяти).
Алгоритм выполнения команды в АЛУ
Выборка значения операнда_2и запись его в накопитель.
Выборка значения операнда_1в свободный регистр1 АЛУ и преобразование его в дополнительный код
Сложение содержимого регистра1 АЛУ из содержимого накопителя.
Копирование содержимого накопителя в опернад_1.
Установка флагов.
Исключения: #GP, #PF.
SHR (SHift logical Right) – поразрядный сдвиг вправо.
SHRоперанд_1, операнд_2 (SHRЕАХ, 8)
Действие:Cдвиг всех разрядов операнда_1 на число, определяемое операндом_2. Разряды, выдвинутые за пределы разрядной сетки теряются (кроме последнего, который попадает во флаг переноса СF), освободившиеся разряды заполняются нулями. Операнд_1: 8, 16 или 32-разрядный регистр или ячейка памяти. Операнд_2: 1(единица), 8-разрядная константа или регистрCL. ФлагиCF,SF,ZF,PFустанавливаются по результату операции.
Алгоритм выполнения команды в АЛУ
Сдвиг всехразрядов операнда_1вправо один разряд; при этом выдвигаемый справа бит становится значением флага переноса CF.
Одновременно слева в операнд_1 вдвигается нулевой бит.
Указанные выше два действия повторяются количество раз, равное значению операнда_2.
Исключения: #GP, #PF.
LOOP – команда организации цикла со счётчиком в регистре ЕСХ.
LOOPметка (LOOPМЕТ1)
Действие: передача управления (зацикливание) по метке, типа SHORT-ближняя, пока значение ECX не будет равно 0. Регистр ECX декрементируется после проверки условия выхода из цикла. Метка (однобайтовая знаковая константа) – это адрес команды, отнесенной от LOOP не более чем на +127 или на –128 байт. Выполнение команды не влияет на флаги.
Алгоритм выполнения команды в АЛУ
Сравнение ECXс нулём.
ЕслиЕСХ=0, то занесение в регистр командEIPадреса следующей послеLOOPкоманды (завершение цикла).
Иначезанесение вEIPадреса метки (адрес начала цикла).
К.Если
Уменьшение ECXна 1.
Исключения: #GP, #PF.
REPE (REPeat string operation while Equal) CMPSB (CoMРare String Byte) сравнение строк и поиск первого несовпадения.
REPECMPSB(операнды не указываются)
Действие:повторение сравнения двух однобайтовых элементов строк с логическими адресамиDS:ESIиES:EDI. По результату сравнения устанавливаются флаги:OF,SF,ZF,AF,PF,CF. Выход из цикла сравнения происходит приECX=0 или нахождении в строках первого несовпадения (флагZF=0). После каждого сравнения (независимо от результата) происходит увеличение (при сброшенном флагеEFLAGS.DF=0) или уменьшение (при установленном флагеEFLAGS.DF=1) значений регистров ESI и EDI.
Алгоритм выполнения команды в АЛУ
Сравнение байта источника DS:ESI с байтом приемника ES:EDI методом вычитания. По результату сравнения устанавливаются флаги, например, если байты равны (EFLAGS.ZF=1, EFLAGS.СF=0), иначе (EFLAGS.ZF=0, EFLAGS.СF=1).
Переход к просмотру следующего элемента строки.
Еслифлаг направления просмотраEFLAGS.DF=0,
тоувеличить значения индексных регистров на длину элемента строки –1байт(ESI=ESI+1 иEDI=EDI+1),
Иначе (DF=1) уменьшить значения индексных регистров (ESI=ESI–1 и EDI=EDI–1),
Проверка условий повторения просмотра строк: (EFLAGS.ZF=1 иECX≠0)?
Еслисравниваемые байты равны (ZF=1) и счётчик повторенийECX≠0,
тоуменьшить на 1 счётчик повторений (ECX=ECX-1), переход к п.1.
Конец выполнения команды.
Исключения: #GP, #PF.
POP(POP avaluefromthestack)– извлечение из стека двойного слова и помещение его по адресу операнда.
POPоперанд (POPЕВХ)
Действие: операнд[31÷0]=ОП[SS:ESP]
Извлечение двойного слова в операнд из вершины стека (SS:ESP). Операнд: 32-разрядный регистр или ячейка памяти. Выполнение команды не влияет на флаги.
Алгоритм выполнения команды.
Формирование физического адреса вершины стека (SS:ESP).
Копирование двойного слова из вершины стека по адресу операнда.
Формирование адреса новой вершины стека (ESP=ESP+4).
Исключения: #GP, #PF.
TEST(TEST приемник, источник)– логическое «и» без изменения операндов.
TESTприемник, источник (TESTАХ,BL)
Действие: результат = приемник & источник. Приемник: 8, 16 или 32-разрядный регистр или ячейка памяти. Источник: 8, 16 или 32-разрядный регистр, ячейка памяти или константа. Результат сохраняется только во временной памяти АЛУ, по его значению устанавливаются флагZF,SF,PFCF=OF=0.
Алгоритм выполнения команды.
Выборка источника и приёмника
Выполнение логического «и».
Установка флагов.
Исключения: #GP, #PF.
DAA(Decimal Adjust AL for Addition)– десятичная коррекция результата сложения двух упакованных двоично-десятичных чисел с целью получения правильного двоично-десятичного числа. Число для коррекции выбирается из регистраAL. Результат сохраняется в регистрAL, по его значению устанавливаются флагZF,SF,PF, АF,CF.
DAA(без операндов)
Алгоритм выполнения команды.
Если (EFLAGS.АF=1 илиAL[30]>9), тоAL=AL+00000110,EFLAGS.АF=1, в зависимости от результата установитьEFLAGS.СF.
Иначе EFLAGS.АF=0.
Если (EFLAGS.СF=1 или AL[74]>9), то AL= AL+01100000, EFLAGS.CF=1,
Иначе EFLAGS.СF=0.
Исключения: #GP, #PF.
CWDE(Convert Word to Double Extended)– преобразование слова в двойное слово с учётом знака. Число для преобразования выбирается из регистраAХ. Результат сохраняется в регистр ЕAХ, на флаги не влияет.
CWDE(без операндов)
Действие: ЕАХ[31]=ЕАХ[30]…=ЕАХ[16]=АХ[15] – расширение знакового бита АХ на всё старшее слово регистра ЕАХ.
Исключения: #GP, #PF.
NEG(NEG приемник)– изменить знак операнда. Приемник: 8, 16 или 32-разрядный регистр или ячейка памяти. Результат сохраняется в приёмнике, по его значению устанавливаются флагиZF,PF, АF,SF,OF(EFLAGS.CF= неEFLAGS.ZF).
NEGприемник (NEGАХ)
Действие: приемник = двоичное дополнение приемника
Алгоритм выполнения команды.
Выборка приёмника
Получение двоичного дополнения приемника.
Установка флагов.
Исключения: #GP, #PF.
XCHG(eXCHanGe register/memorywithregister)– обмен значениями между операндами. Операнд_1: 8, 16 или 32-разрядный регистр или ячейка памяти, операнд_2: 8, 16 или 32-разрядный регистр. На флаги не влияет.