- •Структура мп ix86 фирмы Intel
- •Регистры общего назначения (регистры данных)
- •Регистры-указатели
- •Регистры сегментов (сегментные регистры)
- •Указатель команд и регистр флагов
- •Сегментация памяти
- •Структура команд мп
- •Формат «Регистр-регистр» (Рг-Рг) – 2 байта
- •Формат «Регистр-память» (Рг-яп) – 2÷4 байта
- •Формат «Регистр-непосредственный операнд» (Рг-но) – 3÷4 байта
- •Формат «Память-непосредственный операнд» (яп-но) – 3÷6 байтов
- •Представление данных в пэвм
- •Целые числа
- •Двоично-десятичные числа (bcd)
- •Символьные данные
- •Вещественные данные
- •Система команд мп семейства iх86 фирмы Intel
- •Команды сложения и вычитания
- •Дополнительные команды
- •Команды умножения и деления
- •Команды преобразования длины
- •Стековые команды
- •Доступ к элементам стека с помощью регистра вр
- •Команды передачи управления
- •Близкие и далекие переходы.
- •Адресация в переходах.
- •Конструкции языка Ассемблера Литература
Вещественные данные
Вещественные данные обрабатываются сопроцессором Intel 8087 (вспомогательным процессором). Современные МП типа Pentium имеют встроенный сопроцессор. Сопроцессор позволяет выполнить дополнительный набор арифметических команд над числами разных типов:
целые со знаком (2Б);
короткие целые со знаком (4Б);
длинные целые со знаком (8Б);
упакованные BCD-формата (10Б);
короткие вещественные (4Б);
длинные вещественные (8Б)
временные вещественные (10Б).
В упакованном BCD-формате число занимает 10 байтов, причем первый байт – знак числа, остальные 9Б могут хранить 18 цифр.
Например: числа в сопроцессоре представлены в виде
00 00 00 00 00 12 34 56 78 90 - положительное число,
80 99 99 99 99 87 65 43 21 00 - отрицательное число.
При вводе знак “+“ не требуется, достаточно записать все значащие цифры числа.
Вещественные числа представляются в экспоненциальной форме
А = М * 2Р ,
где М – мантисса числа,
р – двоичный порядок числа.
Порядок определяет положение дробной точки в числе. Для упрощения арифметики используется смещенный порядок (характеристика) числа р*. Нулевой порядок смещается на 127, тогда порядок числа вычисляется по формуле
p = р*-127
Мантисса представляется в нормализованном виде в двоичной системе счисления так, чтобы старшая цифра находилась в разряде целых единиц. Т.к. эта цифра присутствует всегда к=1, то ее наличие подразумевается, а в памяти ее не хранят.
Для вещественных чисел используют 3 формата:
короткое вещественное (4Б)
31 |
30 23 |
22 0 |
|
характеристика |
мантисса |
знак |
|
|
длинное вещественное (8Б)
63 |
62 52 |
51 0 |
|
характеристика |
мантисса |
знак |
|
|
временное вещественное
79 |
78 64 |
63 0 |
|
характеристика |
мантисса |
знак |
|
|
В сопроцессоре есть восемь 10-байтовых регистров. Набор этих регистров чаще всего используется в режиме стека, но можно обращаться к конкретному регистру по имени от ST(0) до ST(7).
Система команд мп семейства iх86 фирмы Intel
Арифметические команды
Команды сложения и вычитания
Операции сложения и вычитания одинаково для знаковых и беззнаковых целых. Используются две формы операндов: байт или слово, причем операнды должны быть одинаковой длины. Операнды могут храниться в регистре или в ОП, но второй операнд может быть непосредственным.
Перечислим команды, относящиеся к группе команд сложения и вычитания:
а) ADD op1, op2 ; op1 := op1+op2
SUB op1, op2 ; op1 := op1 – op2
Сложение (вычитание) операндов в дополнительном двоичном коде, результат помещается на место первого операнда, второй операнд не изменяется.
Команда модифицирует регистр флагов FLAGS в соответствии с результатом операции, а именно:
ZF – нулевой рез-т,
SF – знак результата,
PF – флаг четности,
CF, AF – флаги переносов,
OF – флаг переполнения.
Примеры:
ADD AH, 12 ; AH := AH + 12 (1Б)
SUB z, BX ; z := z – BX (2Б)
б) ADC op1, op2 ; op1 := op1+op2+CF
SBC op1, op2 ; op1 := op1 – op2 – CF
Сложение (вычитание) операндов с переносом, образованным предыдущей командой.
Модифицирует флаги аналогично п.(а).
Например, если требуется сложить двойные слова, расположенные в парах регистров
(AX, BX) := (AX, BX) + (CX, DX),
причем AX, CX – старшие байты слагаемых,
BX, DX – младшие байты.
Сложение выполняется двумя командами:
ADD BX, DX
ADC AX, CX
в) Специальный случай сложения – изменение операнда на единицу.
INC op ; op:= op +1 инкремент
DEC op ; op:= op –1 декремент
г) Десятичная коррекция результата предыдущей операции. Это анализ флагов и преобразование результата сложения (вычитания) BCD-кодов. BCD-операнды обрабатываются обычными командами сложения и вычитания, а затем размещается команда десятичной коррекции.
Команда коррекции обрабатывает только однобайтовый операнд, находящийся в AL, поэтому команды десятичной коррекции операнда не имеют (подразумеваемая адресация).
DAA; коррекция после сложения
DAS; коррекция после вычитания.
Например,
ADD AL, y
DAA
SUB AL, DH
DAS
Примечание: BCD-операнды, представленные более, чем одним байтом должны обрабатываться побайтно.
Команды десятичной коррекции модифицирует флаги аналогично п.(а), за исключением флагов AF и OF.