Архитектура младшей модели семейства Intel

Содержание

Слайд 2

Форматы данных Вещественные числа На современных ЭВМ чаще всего используются три

Форматы данных Вещественные числа

На современных ЭВМ чаще всего используются три формата вещественных

чисел:
короткие (длиной 4 байта),
длинные (8 байт)
и сверхдлинные (16 байт) вещественные числа.
На момент массового выпуска ЭВМ с командами для работы с вещественными числами, уже существовал международный стандарт на внутреннее представление этих чисел (ANSI/IEEE standart 754-1985), и почти все современные машины придерживаются этого стандарта на представление вещественных чисел.
Слайд 3

Целые числа в младшей модели могут занимать в памяти 8 бит

Целые числа в младшей модели могут занимать в памяти 8 бит

(короткое целое), 16 бит (длинное целое) и 32 бита (сверхдлинное целое). Длинное целое принято называть машинным словом
(не путать с машинным словом в машине Фон Неймана, там это содержимое одной ячейки памяти!).

Целые числа

Слайд 4

Символьные данные В качестве символов используются короткие целые числа, которые трактуются

Символьные данные

В качестве символов используются короткие целые числа, которые трактуются как

неотрицательные (беззнаковые) числа, задающие номер символа в некотором алфавите.
Слайд 5

Массивы (строки) Допускаются только одномерные массивы, которые могут состоять из коротких

Массивы (строки)

Допускаются только одномерные массивы, которые могут состоять из коротких или

длинных целых чисел. Массив коротких целых чисел может рассматриваться программистом как символьная строка, отсюда и второе название этой структуры данных. В машинном языке присутствуют команды для обработки элементов таких массивов
Слайд 6

Логические (битовые) вектора. В языке машины представлены команды для обработки логический

Логические (битовые) вектора.
В языке машины представлены команды для обработки логический векторов

длиной 8 или 16 бит. Элементы таких векторов трактуются как логические переменные..
Двоично-десятичные целые числа.
Это целые числа в двоично-десятичной записи, имеющие размер до 16 байт.
Слайд 7

Вещественные числа

Вещественные числа

Слайд 8

Вещественные числа Такое представление вещественного числа называется нормализованным: его первый сомножитель удовлетворяет неравенству:

Вещественные числа

Такое представление вещественного числа называется нормализованным:
его первый сомножитель

удовлетворяет неравенству:
Слайд 9

–13.25 Сначала переведём его в двоичную систему счисления: –13.2510 = -1101.012

–13.25

Сначала переведём его в двоичную систему счисления:
–13.2510 = -1101.012
Затем нормализуем это

число:
-1101.012 = -1.101012*23
Следовательно, мантисса нашего числа будет иметь вид 101010000000000000000002 , и осталось вычислить машинный порядок
E: 3 = E-127; E = 130 = 128+2 = 100000102 .
Учитывая знак, получаем вид внутреннего машинного представления числа –13.2510:
1100 0001 0101 0100 0000 0000 0000 00002 = C154000016
Слайд 10

Шестнадцатеричные числа в языке Ассемблера принято записывать с буквой h на

Шестнадцатеричные числа в языке Ассемблера принято записывать с буквой h на

конце,

при этом, если такое число начинается с буквы, то впереди записывается незначащий ноль, чтобы отличить запись такого числа от имени:
C154000016 = 0C1540000h

Слайд 11

Представимый диапазон порядков коротких вещественных чисел равен 2–126..2127 ≈ 10–38..1038

Представимый диапазон порядков коротких вещественных чисел равен 2–126..2127 ≈ 10–38..1038

Слайд 12

Из-за конечной длины представления вещественных чисел действия с ними выдают приближённый результат

Из-за конечной длины представления вещественных чисел действия с ними выдают приближённый

результат
Слайд 13

Возможно: Возможны случаи, когда (a+b)+c ≠ a+(b+c) и (a+b)*c ≠ a*c+b*c.

Возможно:

Возможны случаи, когда (a+b)+c ≠ a+(b+c) и (a+b)*c ≠ a*c+b*c.
Решение

простейшего уравнения X+A=A будет равен, скажем, 10+6.
Слайд 14

Значение машинного порядка E=255 при мантиссе M ≠ 0 обозначает специальное

Значение машинного порядка E=255 при мантиссе M ≠ 0 обозначает специальное

значение "не число" (NAN – not a number).

Некоторые комбинации нулей и единиц в памяти, отведённой под хранения вещественного числа, используются для служебных целей.

Слайд 15

Машинный порядок E=255 при мантиссе M = 0 задаёт, в зависимости от знака числа, специальные значения

Машинный порядок E=255 при мантиссе M = 0 задаёт, в зависимости

от знака числа, специальные значения
Слайд 16

Целые числа Беззнаковые (неотрицательные) числа представляются в двоичной системе счисления -

Целые числа

Беззнаковые (неотрицательные) числа представляются в двоичной системе счисления - прямым

кодом
Если инвертировать прямой код (т.е. заменить все "1" на "0", а все "0" на "1"), то получим обратный код числа.
Для представления отрицательных знаковых чисел используется дополнительный (complementary) код, который можно получить из обратного кода прибавлением единицы.
Слайд 17

Слайд 18

Другой способ Дополнительный код числа –13 можно вычислить и так: 28-13

Другой способ

Дополнительный код числа –13 можно вычислить и так:
28-13 = 256–13

= 100000000–00001101 = 11110011
Слайд 19

Если сложить дополнительный код с прямым кодом, то получится ноль и

Если сложить дополнительный код с прямым кодом, то получится ноль и

"лишняя" единица, не помещающаяся в отводимое число разрядов.
Слайд 20

Результат операций могут быть разными для знаковых и беззнаковых чисел

Результат операций могут быть разными для знаковых и беззнаковых чисел

Слайд 21

Для таких ситуаций в архитектуре компьютера введено понятие флагов. Каждый флаг

Для таких ситуаций в архитектуре компьютера введено понятие флагов. Каждый флаг

занимает один бит в специальном регистре флагов с именем FLAGS. Для рассмотренного выше примера флаг CF (carry flag) после сложения примет значение, равное единице (иногда говорят, что флаг поднят), сигнализируя программисту о том, что при без- знаковом сложении произошла ошибка. Рассматривая результат в знаковых числах, мы получили правильный ответ, поэтому флаг результата знакового сложения OF (overflow flag) будет положен равным нулю (или, как говорят, опущен).
Флаг CF называется флагом переноса,
а OF – флагом переполнения.

Флаги

Слайд 22

Существует флаг SF, в который всегда заносится знаковый (крайний левый) бит

Существует флаг SF, в который всегда заносится знаковый (крайний левый) бит

результата, таким образом, при знаковой трактовке чисел этот флаг сигнализирует, что результат получился отрицательным.
Флаг ZF, устанавливается в 1, если результат тождественно равен нулю, в противном случае этот флаг устанавливается в 0. Флаги в нашей архитектуре выполняют ту же роль, что и регистр признака результата ω в изученной ранее учебной ЭВМ УМ-3.
Слайд 23

Сегментация памяти Память нашей ЭВМ имеет сегментную организацию. В любой момент

Сегментация памяти

Память нашей ЭВМ имеет сегментную организацию. В любой момент времени

для младшей модели определены четыре сегмента (хотя для старших моделей число сегментов больше). Есть четыре сегментных регистра, которые указывают на определённые области памяти. Каждый сегментный регистр имеет длину 16 разрядов, а в то же время для адресации любого места нашей памяти необходимо, как мы уже говорили, 20 разрядов. Для того чтобы сегмент мог указывать на некоторое место оперативной памяти, адрес начала сегмента получается после умножения значения сегментного регистра на число 16. При таком способе задания начала сегмента, он может начинаться не с любого места оперативной памяти, а только с адресов, кратных 16 (в некоторых книгах по Ассемблеру такие участки памяти называются параграфами).
Слайд 24

Физический адрес числа или команды вычисляется центральным процессором по формуле

Физический адрес числа или команды вычисляется центральным процессором по формуле

Слайд 25

В качестве мнемонических обозначений сегментных регистров выбраны следующие двухбуквенные служебные имена:

В качестве мнемонических обозначений сегментных регистров выбраны следующие двухбуквенные служебные имена:


кодовый сегментный регистр (CS),
сегментный регистр данных (DS),
сегментный регистр стека (SS)
дополнительный сегментный регистр (ES).
Слайд 26

Сегментные регистры являются специализированными, предназначенными только для хранения адресов сегментов, поэтому

Сегментные регистры являются специализированными, предназначенными только для хранения адресов сегментов, поэтому

арифметические операции (сложение, вычитание и др.) над их содержимым в языке машины не предусмотрены.
Заметим, что даже если все сегменты не перекрываются и имеют максимальный размер, то и в этом случае центральный процессор в каждый момент времени имеет доступ только к одной четвёртой от общего объёма оперативной памяти.
Слайд 27

Слайд 28

только для хранения адресов сегментов

только для хранения адресов сегментов

Слайд 29

Мнемонические обозначения регистров Регистры общего назначения, каждый из которых может складывать,

Мнемонические обозначения регистров

Регистры общего назначения, каждый из которых может складывать, вычитать

и просто хранить данные, а некоторые – ещё умножать и делить, обозначают следующими служебными именами:
AX, BX, CX, DX.
Для обеспечения многообразия форматов данных каждый из них разбит на две части по 8 бит.
Слайд 30

Каждый из регистров AH, AL, BH, BL, CH, CL, DH и

Каждый из регистров AH, AL, BH, BL, CH, CL, DH и

DL может быть использован в машинных командах как самостоятельный регистр, на них можно выполнять операции сложения и вычитания.
Слайд 31

Существуют также четыре регистра с именами SI, DI, SP и BP,

Существуют также четыре регистра с именами SI, DI, SP и BP,

которые также могут использоваться для проведения сложения и вычитания, но они уже не делятся на половинки:

В основном эти четыре регистра используются как индексные, т.е. на них обычно храниться положение конкретного элемента в некотором массиве. Условное обозначение - r16 (а AH, AL, BH, BL, CH, CLи т.п. – r8)

Слайд 32

Слайд 33

Кроме перечисленных выше регистров программист имеет дело с регистром IP (instruction

Кроме перечисленных выше регистров программист имеет дело с регистром IP (instruction

pointer), который называется счётчиком адреса (в учебной машине мы обозначали его как RA). Этот регистр содержит адрес следующей исполняемой команды (точнее, содержит смещение этой команды относительно начала кодового сегмента, адрес начала этого сегмента равен значению сегментного регистра CS, умноженному на 16).
И, наконец, как уже упоминалось, архитектурой изучаемой ЭВМ предусмотрен регистр флагов с именем FLAGS. Он содержит шестнадцать одноразрядных флагов, например, флаги CF и OF.
Слайд 34

Слайд 35

Особенности хранения чисел в регистровой и основной памяти ЭВМ Запишем, например,

Особенности хранения чисел в регистровой и основной памяти ЭВМ

Запишем, например, шестнадцатеричное

число 1234h в какой-нибудь 16-тиразрядный регистр (каждая шестнадцатеричная цифра занимает по 4 бита):
Слайд 36

Перешлём машинной командой содержимое этого регистра в память в ячейки с

Перешлём машинной командой содержимое этого регистра в память в ячейки с

адресами, например, 100 и 101. В ячейку с первым (старшим) адресом 100 при такой пересылке запишется число из младшего байта регистра 34h, а в ячейку со вторым (младшим) адресом 101 запишется число из первого (старшего) байта регистр 12h.
Говорят, что целое число представлено в основной памяти (в отличие от регистров) в перевёрнутом виде.
Слайд 37

Структура команд

Структура команд

Слайд 38

Команды этого формата занимают в памяти 2 байта. Первое поле команды

Команды этого формата занимают в памяти 2 байта.
Первое поле команды

– код операции – занимает 6 первых бит( до 64 различных операций).
Однобитные поля с именами d и w,
где d –бит направления, а w – бит размера аргумента,
последующие два бита для этого формата всегда равны 11,
а последние две части (по 3 бита каждая) -
задают номера регистров-операндов команды.

Команды этого формата занимают в памяти 2 байта.
Первое поле команды – код операции – занимает 6 первых бит( до 64 различных операций).
Однобитные поля с именами d и w,
где d –бит направления, а w – бит размера аргумента,
последующие два бита для этого формата всегда равны 11,
а последние две части (по 3 бита каждая) -
задают номера регистров-операндов команды.

Слайд 39

Назначение битов d и w Бит d задаёт направление выполнения команды, а именно:

Назначение битов d и w

Бит d задаёт направление выполнения команды, а

именно:
Слайд 40

Бит w задаёт размер регистров-операндов, а соответствие двоичных номеров регистров и

Бит w задаёт размер регистров-операндов, а соответствие двоичных номеров регистров и

их имён можно определить по таблице
Слайд 41

Для проведения операций над числами разной длины появляется необходимость преобразования типов

Для проведения операций над числами разной длины появляется необходимость преобразования типов

из короткого целого в длинное, и из длинного в сверхдлинное (и наоборот). Такое преобразование зависит от знаковой или беззнаковой трактовки числа.
Слайд 42

Слайд 43

Для преобразования знаковых целых чисел из более короткого формата в более

Для преобразования знаковых целых чисел из более короткого формата в более

длинный в языке машины предусмотрены безадресные команды, имеющие в Ассемблере такую мнемонику:

cbw (convert byte to word)
и
cwd (convert word to double),
которые производят знаковое расширение соответственно значения регистра AL до AX и AX до значения пары регистров (так называемой регистровой пары), которые в этом случае рассматриваются как один длинный 32-х битный регистр.

Слайд 44

Формат регистр–память (и память-регистр). КОП r1 A2 Второй операнд A2 может

Формат регистр–память (и память-регистр).

КОП r1 A2
Второй операнд A2 может в этом

формате иметь один из приведённых ниже трёх видов:
1. A2 = A,
2. A2 = A[M1],
3. A2 = A[M1][M2].
Здесь A – задаваемое в команде число (смещение) длиной 1 или 2 байта (заметим, что нулевое смещение иногда может не задаваться и совсем не занимать места в команде), M1 и M2 – так называемые регистры-модификаторы. Как мы сейчас увидим, значение адреса второго операнда A2 будет вычисляться по определённым правилам, поэтому этот адрес часто называют исполнительным адресом.
Слайд 45

Подробнее каждый их трёх возможных видов второго операнда A2 см. в Приложении «Возможные виды второго операнда»

Подробнее каждый их трёх возможных видов второго операнда A2 см. в

Приложении «Возможные виды второго операнда»
Слайд 46

Команды языка машины Команды пересылки Все они пересылают значение одного или

Команды языка машины Команды пересылки

Все они пересылают значение одного или двух байт

из одного места памяти в другое. Для более компактного описания синтаксиса машинных команд введём следующие условные обозначения (с некоторыми из них мы уже знакомы):
r8 – любой короткий регистр AH,AL,BH,BL,CH,CL,DH,DL;
r16 – любой из длинных регистров AX,BX,CX,DX,SI,DI,SP,BP;
m8, m16, m32 – операнды, расположенные в основной памяти длиной 1,2 и 4 байта;
i8, i16, i32 – непосредственные операнды в самой команде длиной 1, 2 и 4 байта;
SR – один из трёх сегментных регистров SS, DS, ES;
CS – кодовый сегментный регистр.
Слайд 47

Общий вид команды пересылки в двухадресной ЭВМ такой (после точки с

Общий вид команды пересылки в двухадресной ЭВМ такой (после точки с

запятой будем записывать, как это принято в Ассемблере, комментарий к команде):
mov op1,op2; op1 := op2
Существуют следующие допустимые форматы первого и второго операндов команды пересылки, запишем их в виде таблицы, где во второй колонке перечислены все возможные вторые операнды, допустимые для операнда из первой колонки:
Слайд 48

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

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

кодом операции mov бывают форматов
RR, RX (и XR), RI и SI.
Команда обмена содержимым двух операндов, команда также не меняет флаги
xchg op1,op2;
Таблица допустимых операндов для этой команды:
Слайд 49

Арифметические команды КОП op1,op2, где КОП = add, sub, adc, sbb.

Арифметические команды

КОП op1,op2,
где КОП = add, sub, adc, sbb.
Команды с

кодами операций add (сложение) и sub (вычитание) выполняются по схеме:
op1 := op1 ± op2
Слайд 50

Команды с кодами операций adc (сложение с учётом флага переноса) и

Команды с кодами операций adc (сложение с учётом флага переноса) и

sbb (вычитание с учётом флага переноса) имеют три операнда, два из которых задаются в команде явно, а третий по умолчанию является значением флага переноса CF: op1 := op1 ± op2 ± CF
Слайд 51

Таблица допустимых операндов для этих команд:

Таблица допустимых операндов для этих команд:

Слайд 52

Команды умножения и деления целых чисел Первый операнд всех команд этого

Команды умножения и деления целых чисел

Первый операнд всех команд этого класса

явно в команде не указывается и находится в фиксированном регистре, заданном по умолчанию. В младшей модели семейства есть следующие команды умножения и деления, в них, как и в одноадресной ЭВМ, явно задаётся только второй операнд (т.е. второй сомножитель или делитель):
mul op2; беззнаковое умножение,
imul op2; знаковое умножение,
div op2; беззнаковое целочисленное деление,
idiv op2; знаковое целочисленное деление.
Слайд 53

В случае с коротким вторым операндом форматов r8 и m8 при

В случае с коротким вторым операндом форматов r8 и m8 при

умножении вычисление производится по формуле:
AX := AL * op2
В случае с длинным вторым операндом форматов r16 и m16 при умножении вычисление производится по формуле:
:= AX * op2
Как видим, в этом случае произведение располагается сразу в двух регистрах (это называется регистровой парой).
Схема выполнения короткого и длинного умножения.
Слайд 54

При делении на короткий операнд форматов r8 и m8 производятся следующие

При делении на короткий операнд форматов r8 и m8 производятся следующие

действия:
AL := AX div op2
AH := AX mod op2
При делении на длинный операнд формата r16 и m16 вычисление производится по формулам:
AX := div op2
DX := mod op2
В этих командах операнд запись обозначает 32-разрядное целое число, расположенное сразу в двух регистрах DX и AX, а op2, как уже говорилось, может иметь формат r16 или m16
Слайд 55

Схема выполнения короткого и длинного деления

Схема выполнения короткого и длинного деления

Слайд 56

После выполнения команд умножения устанавливаются некоторые флаги, из которых для программиста

После выполнения команд умножения устанавливаются некоторые флаги, из которых для программиста

представляют интерес только флаги переполнения и переноса (CF и OF).
Эти флаги устанавливаются по следующему правилу. CF=OF=1, если в произведении столько значащих (двоичных) цифр, что они не помещаются в младшей половине произведения. На практике это означает, что при значениях флагов CF=OF=1 произведение коротких целых чисел не помещается в регистр AL и частично "переползает" в регистр AH. Аналогично произведение длинных целых чисел – не помещается в регистре AX и "на самом деле" занимает оба регистра . И наоборот, если CF=OF=0, то в старшей половине произведения (соответственно в регистрах AH и DX) находятся только незначащие двоичные цифры произведения (это двоичные нули для положительных и двоичные единицы для отрицательных произведений). Другими словами, при CF=OF=0 в качестве результата произведения можно взять только его младшую половину, что может оказаться полезным при программировании.
Слайд 57

Для написания программ на Ассемблере нам будут нужны также следующие унарные

Для написания программ на Ассемблере нам будут нужны также следующие унарные

арифметические операции.
neg op1; взятие обратной величины знакового числа, op1:=-op1;
inc op1; увеличение (инкремент) аргумента на единицу, op1:=op1+1;
dec op1; уменьшение (декремент) аргумента на единицу, op1:=op1-1;
Здесь операнд op1 может быть форматов r8, m8, r16 и m16. Применение этих команд вместо соответствующих по действию команд вычитания и сложения приводит к более компактным программам. Необходимо, однако, отметить, что компактные команды inc op1 и dec op1 , в отличие от эквивалентных им более длинных команд add op1,1 и sub op1,1 никогда не меняют флаг CF.1
Слайд 58

Слайд 59

Слайд 60

Программа на ассемблере MASM 4 data segment ;сегмент данных программы string

Программа на ассемблере MASM 4

data segment ;сегмент данных программы
string db "Hello word",13,10,"$"
data

ends
code segment ;кодовый сегмент программы
assume cs:code,ds:data
start: ;точка входа программы
mov ax,data ;загрузка в регистр DS значения
mov ds,ax ;соответствующего положению
mov dx,offset string ;загрузка положения строки
mov ah,09h ;обращение за воспроизведением
int 21h ;строки
mov ah,4ch ;вызов функции завершения
int 21h
code ends
stack segment stack ;стековый сегмент программы
DW 64 DUP(?) ;определение области стека
stack ends
end start ;обозначение конца и определе
;ние начала
Слайд 61

text segment assume Cs:text,Ds:data begin: mov Ax,data mov Ds,Ax mov AH,09h


text segment
assume Cs:text,Ds:data
begin:
mov Ax,data
mov Ds,Ax
mov AH,09h
mov Dx,offset string
int 21h
mov AH,4Ch
mov AL,0
int 21h
text ends
data segment
string db

"start!$"
data ends
stack segment stack
db 256 dup (0)
stack ends
end begin ; обозначение конца и определе ;ние начала
Слайд 62

Программа на Fasm org 100h ; расположения в памяти : 100h

Программа на Fasm

org 100h ; расположения в памяти : 100h
start:

; Метка старота программы (не ;обязательно)
mov ah,9 ; Функция ДОС
mov dx,hello ; для вывода строки
int 21h ; на экран
mov ah,0 ; Функция БИОС
int 16h ; Ожидание нажатия клавиши
int 20h ; завершение программы
ret ; Возврат из процедуры start
hello db 'Hello world!',13,10,24h
Слайд 63

Слайд 64

http://placeprog.com/blogs/assembler/asembler-dlja-win32-okno.html

http://placeprog.com/blogs/assembler/asembler-dlja-win32-okno.html

Слайд 65

Листинг программы

Листинг программы