- •История разработки микропроцессоров
- •3.Регистр флагов eflags/flags
- •Сегментная организация памяти
- •Сегментная организация памяти в защищенном режиме
- •Страничная организация памяти
- •Команды передачи данных
- •Двоично-десятичная арифметика
- •2.Команда add
- •Команда sar
- •Команда shr
- •Особые случаи
- •Округления
История разработки микропроцессоров
№№ п/п |
Год выпуска |
Наименование |
Краткая характеристика |
1 |
1974 |
i8080 |
8-ми разрядный. Тактовая частота 8Mгц. 6 мкм технология |
2 |
1978 |
i8086 |
16-ми разрядный. |
3 |
1982 |
i8286 |
16-ми разрядный. Защищенный режим. |
4 |
1982 |
i8287 |
Математический сопроцессор |
5 |
1985 |
i8386 |
32-х разрядный |
6 |
1985 |
i8387 |
Математический сопроцессор |
7 |
1989 |
i8486 |
32-х разрядный. Встроенный математический сопроцессор |
8 |
1993 |
Pentium |
32-х разрядный . 64-х разрядная шина данных. Тактовая частота 3500 Mгц. Суперскалярная архитектура |
9 |
1997 |
Pentium MMX |
Технология MMXпозволяет реализовать ЭВМ с одиночным потоком инструкций и множественным потоком данных (SIMD). 0,35 мкм технология |
Функции
Fip – функция счетчика инструкций
Fdec– функция декодирования инструкций
Fор– функция выполнения инструкций
Fam– функция реализации режимов адресации
Frs - функция регистрового файла
Fcc - функция преобразования адресов команд из виртуальных в физические
Fcd - функция преобразования адресов из виртуальных в физические.
Действия над двоичными числами
Представление чисел
Беззнаковые числа. Диапазоны:
Байт (8бит) 0 – 255,
Слово (2байта 16бит) – 0- 65535
Двойное слово (4байта - 32бита) 0- 232-1
Номер бита |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Значение |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Шестнадцатиричное представление
Двоичное представление тетрады |
Шестнадцатиричное представление тетрады
|
0000 |
0 |
0001 |
1 |
0010 |
2 |
0011 |
3 |
0100 |
4 |
0101 |
5 |
0110 |
6 |
0111 |
7 |
1000 |
8 |
1001 |
9 |
1010 |
A |
1011 |
B |
1100 |
C |
1101 |
D |
1110 |
E |
1111 |
F |
Пример записи слов
0AC1, 8D5F
Знаковые числа. Старший бит – 1 признак отрицательного числа (0 – положительное число,1 – отрицательное число) .
Диапазон:
Байт (8бит) -128- +127
Слово (2байта 16бит) –32768-+32767
Двойное слово (4байта - -231 -231-1
Знаковые числа образуется с помощью дополнительного кода.
Дополнительный код формируется из обратного кода добавлением 1.
Пояснение
|
|
|
|
Число |
Прямой код |
Обратный код |
Дополнительный код |
-3 |
10000011 |
11111100 |
11111101 |
Представляем 11111101 как беззнаковое
11111101 – число 253
128+64+32+16+8+4+1
128+64= 192: 192+32=224: 224+16= 240: 240+8= 248: 248+4= 252: 252+1= 253
Команды двоичной арифметики
Команды сложения и вычитания
CЛОЖЕНИЕ
Правила сложения в МП 80х86
add op1,op2 ; складывает два операнда и сумму записывает на место первого операнда
а) сложение беззнаковых чисел. При переполнении ошибка не фиксируется, а только вырабатывается флаг переноса – С, который говорит, что сумма получилась неверная.
Например
1. 5+11 = 16– формат – байт
00000101
+
00001011
=
00010000
2.192+ 64 = 278>255 192=128+64
1100 0000
+
0100 0000
=
0000 0000 и флаг С=1!
Сложение знаковых чисел
3. -3+1=-2
Складываем их как беззнаковые 253+1=254 , а это есть представление -2 в дополнительном коде
|
|
|
|
Пояснение:
Представляем знаковое число -3 в дополнительном коде
-3 - 11111101
А 1 - в прямом коде 0000 0001
Складываем и получаем 11111110
|
Прямой код |
Обратный код |
Дополнительный код |
-2 |
10000010 |
11111101 |
11111110 |
11111110 – число 254
128+64+32+16+8+4+2
128+64= 192: 192+32=224: 224+16= 240: 240+8= 248: 248+4= 252: 252+2= 254
Таким образом понятно, что дает дополнительный код, а именно что можно для сложение знаковых и беззнаковых чисел одну и ту же команду - add.
При вычислении результат может трактоваться по разному. Знаковые числа имеют диапазон от -127 до +127. Беззнаковые – от 0 до 255. Поэтому переполнение разрядной сетки может трактовать только программист. Он должен знать, какие числа он складывает и как понимать флаг переполнения OF. Если числа знаковые, то флаг OF (over flow) – настоящее переполнение.
Как процессор (железо) может понять, что число отрицательное? Программист пишет число (-100), а транслятор ассемблера преобразует это число в дополнительный код. Микропроцессор не знает, с каким код он работает, с прямым или дополнительным.
Вычитание
Вычитается из первого операнда второй операнд и разность записывает на место первого операнда
sub op1,op2
Вычитание беззнаковых чисел. Если второй операнд больше первого, то ошибка не фиксируется, а только вырабатывается флаг переноса – С, который говорит, что сумма получилась неверная.
Например
1.64(0100 0000) - 32 (0010 0000)
0100 0000
-
0010 0000
=
0010 0000 - 32
2. 32 (0010 0000) -64(0100 0000)
0010 0000
-
0100 0000
= 1110 0000 CF=1!
Вычитание знаковых чисел. Например -3-1=-4
Представляем знаковое число -3 в дополнительном коде
-3 - 11111101– число 253
253-1= 252
|
Прямой код |
Обратный код |
Дополнительный код |
-4 |
10000100 |
11111011 |
11111100 |
128+64+32+16+8+4+1= 253
253-1=252
128+64+32+16+8+4 =252, то есть -4 в дополнительном коде!
Операции с различными форматами данных в МП Intel
|
|
|
| ||
Операнд 1 |
Операнд 2 |
Примечание | |||
r8 |
i8,r8,m8 |
Cложение/ Вычитание байтов | |||
m8 |
i8,r8 | ||||
r16 |
i16,r16,m16 |
Cложение/ Вычитание слов | |||
m16 |
i16,r16 | ||||
r32 |
i32,r32,m32 |
Cложение/ Вычитание двойных слов | |||
m32 |
i32,r32 |
Примечание iX – непосредственный операнд (задается в коде команды), rX – регистр, название которого задается в коде команды
mX – адрес оперативной памяти (задается в коде команды).
Ассемблер
Директивы определения данных
Директива DB - определить байт
Примеры
X DB ? – зарезервирована память за переменной Х в 1 байт
A DB 02– зарезервирована память за переменной A = 02 в 1 байт
B DB FFh– зарезервирована память за переменной B = FF в 1 байт
C DB -64– зарезервирована память за переменной C= -64 в 1 байт
Резервирование массива директивой DUP. Пример обнуление 100 байтов
R DB 100 DUP(0)
Определение массива
N DB 02
DB -2
DB 12h
DB ?
Директива DW - определить слово (16 бит)
A DW ? – зарезервирована память за переменной A в 1 слово
Директива DD - определить двойное слово (32 бита)
B DD 123456h – зарезервирована память за переменной B= 123456h в 2 слова
Примеры на сложение и вычитание
z DB 02
w DW 0Fh
y DD 0F12h
add ah,12 ; ah:= ah+12: r8+i8
add ah,bl : r8+r8
add w + ax; m16+r16
sub si,z : si:= si- z ; r8+m8
add z-200 : z:= z+(-200) ; m8-i8
Булева алгебра получила название по имени ее изобретателя Дж. Буля. Операции в булевой алгебре продуманы таким образом, чтобы их можно было использовать в логических рассуждениях. В ней два объекта два высказывания) интерпретируются как истина (будем обозначать как true -1) и ложь (будем обозначать как false- 0). Далее мы будем называть символы true и false булевыми величинами, а переменные, которые их обозначают - булевыми переменными. В булевой алгебре рассматриваются только те высказывания, для которых истинность может принимать два значения: либо истина (true), либо ложь (false). Результат над булевыми переменными тоже может принимать только два значения – истина (1) или ложь (0).
Основные булевы функции. ¬ˆˇ
Функция И (AND) . Результаты выполнения булевых функций удобно представить в таблицах истинности. Такая таблица для функции И для двух переменных c = аˆ b или c = а&b или c = а b. Операция конънкция
a
b
c
0
0
0
0
1
0
1
0
0
1
1
1
Функция ИЛИ (OR) . Таблица истинности для функции ИЛИ для двух переменных c = аˇ b или + Операция дизънкция
a
b
c
0
0
0
0
1
1
1
0
1
1
1
1
Функция НЕ (NOT) . Таблица истинности для функции НЕ
C= ¬a
a=1, c=0. a=0, c=1.
С помощью этих базовых функций можно описать поведение любого дискретного объекта за исключением объекта с памятью.
4 Удобно использовать еще одну булеву функцию – сумму по модулю 2 (исключающую ИЛИ –XOR). Таблица истинности для функции ИЛИ для двух переменных c = а® b
a |
b |
c |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
2. Главные правила и теоремы булевой алгебры.
Операции с 0 и 1.
av0=a.av1=1aˆ0=0.aˆ1=a
Операции с одной переменной
ava=a,aˆa=a¬ (a)=a
av(¬a)=1,aˆ(¬a)=0
Старшинство выполнения операций как и при арифметическом сложении и умножении.
Пример d=cvaˆb. Порядок действий:d=aˆbvc. Чтобы изменить порядок действий, применяются скобкиd=(cva)ˆb
Коммутативность
avb=bva,aˆb=bˆa
Ассоциативность
(avb)vc=av(bvc)=avbvc
(aˆb)ˆc=aˆ(bˆc)=aˆbˆc
Дистрибутивность
aˆ(bvc)=aˆbvaˆc
av(bˆc) = (avb) ˆ(avc)
Теоремы упрощения выражений
aˆbvaˆ¬b=a– проверяется по таблице истинности. Один из термов ( членов конъюнкции) обязательно равен 0, так как либоb=0, либо ¬b. Остается либо термaˆb, либо термaˆ¬b, то есть терм, в которомbили ¬bравен 1, а ранее было показано, чтоaˆ1=a. То есть остается 0v(aˆ1) =a
(avb) ˆ (av¬b)=a- одна из дизънкций обязательно равна 1, а именно та, в которойbили ¬b= 1. Значит при упрощении получаем 1ˆ(av0)=a.
avaˆ b=a - если b=0. то av0=a; если b=1. то ava=a
aˆ (avb)= a - если b=0. то aˆa=a; если b=1. то aˆ1=a
(av¬b) ˆb=aˆb- - еслиb=0, то результат равен 0, еслиb=1. тоaˆ1=a
(aˆb)vb=avb- еслиb=0,то 0vb=b; еслиb=1. тоavb
ругие (1):
.
.
.
.
, инволютивность отрицания, закон снятия двойного отрицания.
Другие (2):
.
.
.
.
Другие (3) (Дополнение законов де Мо́ргана):
.
Таблица истинности для конънкции и дизънкции трех переменных.
a |
b |
c |
И |
ИЛИ |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
Теорема де Моргана
C=¬(avb) = ¬aˆ¬b
a |
b |
¬(avb) |
¬aˆ¬b |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
¬ (aˆb) = ¬av¬b
a |
b |
¬ (aˆb) |
¬av¬b |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
Регистры микропроцессора
Пользовательские регистры:
Регистры общего назначения (РОН)
А) 8 8-ми разрядных регистра
AH, AL, BH, BL, CH, CL, DH, DL
B) 8 16-ти разрядных регистра
AX, BX, CX, DX. BP, SP, SI, DI
AX BX CX DX
AH, AL BH, BL CH, CL DH, DL
C)8 32-разрядных регистра имеют тоже наименование, что и 16-разрядные регистры, только перед наименованием регистра имеется буква Е. Например EAX, ECX. Старшие половины этих регистров адресовать нельзя.
EAX
Ст. пол. AH, AL
Регистр ESP (SP) используется в качестве указателя вершины стека. Регистры SI, DI используется для индексации обращения к массивам данных.
Сегментные регистры
6 16-разрядных сегментных регистра, которые содержат селекторы сегментов, используемые для различных форм обращения к памяти.
A) Сегментный регистр кода CS определяет сегмент, который содержит набор команд, образующих собственно программу.
B) Сегментный регистр стека SS определяет текущий сегмент стека, т.е. ту область памяти, в которой выполняются все стековые операции.
C) Сегментный регистр данных DS определяет сегмент, который содержит все данные, относящиеся к выполняемой программе. Дополнительные сегментные регистры ES, FS и GS предназначены для задания еще трех сегментов данных, которыми может пользоваться выполняемая программа.
D) Регистр указателя команд EIP/IP предназначен для адресации команд внутри текущего сегмента кода.