Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 437стр.doc
Скачиваний:
48
Добавлен:
15.06.2014
Размер:
9.54 Mб
Скачать

0 D 0 0 1 0 0 0 инверт

О О О О 1 0 0 1

Оюйд 15

Действия нвд целыми числами и машинные команды

Особенность дополнительного кода для представления отрицательных чисел :

Результат действий сложения и вычитания гри использовании дополнительного иода имеет един и тот яе вид, независимо от тою, интерпретируются m операнды мак беззнаковые им как знаковые .

Для действий умножения и деления , к сожалению , правило не выполняется .

II

Printed with FinePrint- purchase atwww.fineprint.com

Действия нвд целыми числами и машинные команды

Переполнение при действиях над числами аэ знаком

При сложении беззнаковых чисел - переполнение происходит , если при действии пересекается граница разрыва .

При сложении чисел аэ знаком : если знаки разные , переполнения быть нэ может . Если знаки одинаковые , и знак результата совпадает аэ знаками операндов , переполнения нет; противоположен знаку операндов -переполнение есть . При действиях над числами аэ знаком переполнение происходит , если пересекаем границу разрыва 011..11 - 10..00. дЬч регистрации этик фактов в процессоре обычно делают два триггера (чаще всего они входят в состав регистра состояний ). Содержимое этик триггеров называют битами признаков или флагами .

Омйд 21

Действия нвд целыми числами и машинные команды

Бит ы признаков или флаги :

С( или d - от O\RRY - перенос ) регистрирует при выполнении многих операций перенос /заем из старшего (знакового ) разряда за границу разрядной сетки

V ( или of - от OVerFlow - переполнение ) -

регистрирует перенос /заем в старший (знаковый ) разряд .

Если диапазона представимых значений нэ хватает ,можно искусственно увеличить разрядность - хранитьвеличины в нескольких машинных словах - тогдадействия над ними , даже такие простые , как сложение ивычитание , потребуют большего количества

элементарных операций .

Охгйд И

Printed with FinePrint- purchase atwww.fineprint.com

Тиы и форматы операндов

А+В

10. .001

i mToo...ooo

00. ..001

00.--010

Круговая диаграмма

Омйд Ъ

Команды для действий с целыми числами

Сложение и вычитание

Обе операции трехоперандные : два слагаемых и результат . Формат команды может быть :

•3-х операндным ;

•2-х операнд ным - результат помещается на место одного из слагаемых (так в 1*86);

  • 1-операндным - второй операнд и сумма находятся впредопределенном месте (в регистре -аккумуляторе );

  • Hyib -операндным - оба операнда находятся впредопределенных местах (чаще всего это стек ).

Соглашения ассемблера Intel (го умолчанию ):

add а, Ъ

sub a, b

а + Ь

Охгйд Ъ

Printed with FinePrint- purchase atwww.fineprint.com

Команды для действий с целыми числами

Если нэ хватает разрядности , поддерживаемой АЛУ , то можно искусственно увеличить разрядность - хранить величины в нескольких машинных словах .

Сложение двух "длинных " операндов , используя "короткое " сложение :

+ an_i ац.2 ai ao

+сК- Ъп_1 Ь^.2 bi bo

п bn.i

bibo

Результат переноса при сложении младших частей регистрируется в флаге cf. Его значение надо учитывать при сложении старших частей

Оазис1 Ъ

Команды для действий с целыми числами

Для учета при сложении значения флага переноса cf в систему команд добавляют команду сложения с переносом : adc a, b

работает так : а «€- а + ъ н- cf

Пример последовательности команд при выполнении сложения с двойной точностью :

add ЪО, аО adc Ы, al

; ЬО ^- ЬО + аО (перенос в cf) ;bl <r bl + al +cf

В некоторых системах команд (например DEC 16) команда adc - однооперандная : a=a+cf . Тогда :

add

ЬО, aO

, bO r.

- bO-

haO

adc

Ы

,bl i

-bl -

hcf

add

bl, al

;bl i

-bl н

Hal

// Вопрос о тройной точности

Охгйд Ъ

Printed with FinePrint- purchase atwww.fineprint.com

Команды для действий с целыми числами

Как перейти от представления с однарной точностью к представлению с двойной ?

Для положительных чисел просто : старшее слово -нулевое .

Для отрицательных - операция расширения знака (Sign Extsntion ). Ее действие состоит в заполнении старшего слова знаковыми битами младшего . В системе команд 1*86 есть команды dw -преобразования 8 бит ->16 бит, cwd -преобразования 16 бит ->22 бит и odq - 22 ->64 .

Омйд И

Команды для действий с целыми числами

Умножение и деление

При умножении п-разрядных операндов результат может иметь разрядность д? 2i.

В большинстве процессоров АЛУ устроено так, что соотношение разрядностей операндов и результата в командах умножения и деления следующее :(п)*(п) = (2n),(2n)/(n) = (n)q(n)r, т.е. разрядность произведения и делимого вдвое больше .

Что делать с "длинным " результатом - проблема программиста . Как ведут себя флаги при выполнении команд умножения и деления , следует смотреть в полном описании команд .

Скгйд

Printed with FinePrint- purchase atwww.fineprint.com

Команды для действий с целыми числами

Частный случай умножения - умножение на степень 2.

Сдвиг операнд на соответствующее число разрядов влево для положительной степени или вправо для отрицательной . Производится командой арифметического сдвига .

При арифметическом сдвиге вправо (деление на степень двойки ) знаковый разряд числа сохраняет свое значение неизменным , а при сдвиге влево (умножение на степень двойки ) правый конец операнда заполняется нулями .

Если при сдвиге влево знаковый разряд операнда изменял свое значение , это означает , что при умножении произошло переполнение (выход за пределы диапазона представимых значений ), что вызывает изменение флагов cf и of.

Охгйд Ъ

Команды для действий с целыми числами

Сравнение чисел , флаги и набор команд ветвления

Сравнение в ЗЗМ используется для организации последующего ветвления алгоритма (условного перехода в программе ) в зависимости от результата сравнения . Сравнение можно производить го условиям :

•а) равно / нэ равно ; •6) больше /меньше .

Условие а) всегда осмысленно и формально означает , что вое биты сравниваемых операдов одинаковы . Условие б) - его семантика понятна для данных , которые неким образом упорядочены , таких как числа или символы алфавита . Для такого вида данных , как битовые поля - нэ всегда понятно , что такое "больше /. меньше ".

Оюйд Л

Printed with FinePrint- purchase atwww.fineprint.com

Команды для действий с целыми числами

Сравнение в процессоре происходит го одной из двух схем :

1) Сравнение операнда с нулем . Его можнопроизвести специальной командой"проверка ". Например , в системе команд\*85 используется команда

test а, Ъ

2) Сравнение двух операндов между собой(вычитанием и последующим сравнениемрезультата с нулем ).

Для сравнения двух чисел можно использовать команды вычитания . Кроме того , обычно в системе команд есть специальные команды для сравнения .

Омйд 31

Команды для действий с целыми числами

В \*до это команда : стР а>ъ

она делает вычитание а - Ь, го результату операции устанавливаются флаги , после чего результат вычитания теряется , а операнды сохраняются неизменными . Обычно в процессоре имеются аце два триггера (флага ), которые меняют свое состояние rpi выполнении команд в зависимости от получившегося результата :

z (zf - от Zero) - флаг нулевого результата : rf1 *■ 1, если результат равен ную .

N (sf - от Negatve или от Sign) - флаг отрИЦЭТеЛЬНОГО

результата (знака ). Значение этого флага совпадает аэ знаковым разрядом результата , т.е.1 соответствует знаку "минус ".

Скгйд 32

Printed with FinePrint- purchase atwww.fineprint.com

Команды для действий с целыми числами

Для сравнения с нулем есть специальные команды "проверить onepai"( в i*$6 -команда : test а, ь

и, кроме того , флаги zf и sf могут устанавливаться при выполнении других команд (таких , как загрузки и пересылки ).

После выполнения команды , осуществляющей сравнение (и переустанавливающей флаги ) надо осуществить ветвление .

Для этого в процессоре обычно существует большая группа команд условного ветвления , которое происходит (или нет) в зависимости от состояния тех или иных флагов .

Омйд 33

Команды дря действий с целыми числами

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

•Ветвление го простому условию

•Ветвление го результату сравнения беззнаковых чисел

•Ветвление го результату сравнения чисел аэ знаком

Описание

Условие

Альтер натив н о е

Семантика

По знаку

sf = 0

sf=l

Результат положитвлЕн/отрицателен

По нулю

zf=0

rf=I

Результат равен/не равен нулю

По переносу

cf=0

uf=l

Установлен/нет флаг cf (по разным причинам)

По переполнению

of=0

of=l

Установлен/нет флаг of (по разным причинам)

Ветвление го простому условию

Охгйд 3\

Printed with FinePrint- purchase atwww.fineprint.com

Команды для действий с целыми числами

Ветвление го результату сравнения беззнаковых чисел

Описание

Условие

Если больше

cfv zf=0

Если меньше или равно

cfv zf=l

Если больше или равно

cf = 0

Если меньше

cf=l

Ветвление го результату сравнения чисел аэ знаком

Описание

Условие

Если больше ели равно

sf © of = 0

Если меньше

sf © of = 1

Если больше

(sf © of) v zf= 0

Если меньше ели равно

(sf © of) v zf= 1

Охгйд 35

Числа в форме с плавающей запятой

Недостатки чиоел с (Ш :

• диапазон представим ых значений однозначно определяется количеством разрядов п в разрядной сетке : 2П, т.е. разрешающая способность и диапазон связаны однозначно при данном количестве битов в представлении числа .

Число в формате плавающей точки (ПГ) можно представить как :

основание

*1П 3

12.345*10 1 =0.12345*10

Охгйд 36

Printed with FinePrint- purchase atwww.fineprint.com

Числа в форме с плавающей запятой

Нормализация числа :

Если определенным образом выбрано нормализованное представление , то при его записи в двоичном виде старший разряд мантиссы - всегда двоичная 1. Ее можно нэ запоминать - эконо мия 1 бита!

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

12.345*10 1 =0.12345*10 3

Оюйд 3?

Числа в форме с плавающей запятой

Нормализация числа :

Пример. Число Ю1101 110001000.ь 5

Пусть выбрано нормализованное представление, в котором мантисса содержит один знача и {и и разряд в целой части (всегда = \).

При нормализации сдвигаем мантиссу вправо на 5 разрядов (это эквивалентно детению мантиссы на 2s =32y и корректируем порядок (увеличиваем его на 5^= 101 ь' Л

Нормализованное представление: 1.011011100010 ..^ *2<imi .

Опуская неявный бит, получил/ мантиссу 011011100010., порядок .01111

Опйд 38

Printed with FinePrint- purchase atwww.fineprint.com

Числа в форме с плавающей запятой

Note 1: При нормализации , когда приходится сдвигать мантиссу вправо , возможна потеря точности при выходе младших битов мантиссы за границу еэ разрядной сетки

Note 2 Нормализация нэ всегда возможна , если при коррекции порядка происходит выход за границу его разрядной сетки . Если получившееся число слишком велико , его просто нельзя представить в выбранном формате ПГ. Если число слишком мало , то его можно представить , ю лишь в ненормализованной форме .

Омйд ЗР

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

Числа в форме с плавающей запятой

±Ман??шсса * основание (

Форма представления чисел с плавающей запятой

Модул» порядоа

Модул» мантмсы

ЕНак m

ЕНак р

Рг-1

Pi

Ро

m_2

m_n

Форма числа с ГВ аэ смещённым порядком :

Смещение порядоа Модул» мантисы

ЕНак гп

Рг-1

Pi

Ро

ПЛ_2

m_n

Printed with FinePrint- purchase atwww.fineprint.com

Охгйд 4]

Числа в форме с плавающей запятой

Типовой формат представления числа ПТ

Порядок


|3нак


Мантисса

Всегда в прямом коде (возможно, с неявным битом)

В формате " аэ смещением ":

Знак относится го всему числу ;

  • Поле мантиссы содержит еэ значение в прямом (нвв дополнительном ) коде с опущенным неявным битом ;

  • Поле порядка содержит сумму истинного порядка иположительной константы , называемой смещением

Оюйд 41

Числа в форме с плавающей запятой

Действия с числами плавающей точки :

Сложение и вычитание 9.87*103+4.56*102 = 9.8

103 =

» (9.87+ 0 456) * 103 = 10.326 * 1С3 = 1.0326 * 104