![](/user_photo/2706_HbeT2.jpg)
- •2.4. Машинный язык и язык Ассемблера
- •2.5. Синаксис языка Ассемблера
- •2.6. Принципы работы Ассемблера
- •2.7. Биты, байты и слова
- •2.8. Нумерация бит
- •2.9. Набор символов
- •2.10. Принципы работы компьютера
- •2.11. Процедуры
- •2.12. Стек
- •2.13. Прерывания
- •3.1. Модель программирования 8088
- •3.2. Регистры общего назначения
- •3.3. Регистры адресации
- •3.4. Прямая адресация
- •3.5. Вычисление адресов
- •3.6. Адресация через базу и смещение
- •3.8. Байт mod r-m
- •3.9 Физическая адресация
- •3.10. Сегментные регистры
- •3.11. Предназначение сегментов
- •3.12. Оператор Segment
- •3.13. Оператор Assume
- •3.14. Управляющие рагистры
- •3.14.1. Указатель инструкций (ip)
- •3.14.2. Указатель стека
- •3.14.3. Регистр флагов
- •3.14.4. Флаг знака
- •3.14.5. Флаг нуля
- •3.14.6. Флаг четности
- •3.14.7. Флаг переноса
- •3.14.8. Дополнительный флаг переноса
- •3.14.9. Флаг переполнения
- •3.14.10. Флаг захвата
- •3.15. Векторы прерываний
- •Глава 4 - Набор команд микропроцессора 8088
- •4.1. Пересылка данных
- •4.1.1. Команда пересылки
- •4.1.2. Команда замены
- •4.1.3. Команды ввода и вывода
- •4.1.4. Загрузка исполнительного адреса
- •4.1.5. Загрузка указателя
- •4.1.6. Пересылка флагов
- •4.1.7. Перекодировка
- •4.2. Операции со стеком
- •4.3. Передача параметров
3.14.9. Флаг переполнения
Флаг переполнения OF - единственный флаг в старшем байте регистра флагов, который устанавливается обычными арифметическими операциями. Остальные флаги старшего байта находятся под прямым управлением программиста. Флаг переполнения - еще один арифметический флаг, как флаг нуляи переноса. Флаг переполнения необходим для арифметики в дополнительном коде в такой же степени, как флаг переноса для арифметики повышенной точности.
В арифметике чисел, представленныхв дополнительном коде, старший бит используется для хранения знака числа. Сумматор микропроцессора работает как со знакопеременными числами, так и беззнаковыми. Обычно сложение чисел со знаком дает верный результат. Однако некоторые из чисел, представленных в дополнительном коде, при сложении дают неверный результат. Пример на Фиг. 3.14 - сложение двух 8-битовых чисел, представленных в коде двоичного дополнения, - иллюстрирует этот случай. Если 72H и 53H - числа без знака, то результат их сложения верен. Если же это числа, представленныев дополнительном коде со знаком, то результат сложения 0C5H неверен, в коде двоичного дополнения он равен -59.
Шестнадцатеричное |
Десятичный эквивалент |
72H |
114 |
+ 53H |
+ 83 |
0C5H |
197 |
Фиг. 3.14 8-битовое сложение с переполнением
сложение положительных чисел никогда не дает в результате отрицательное. Результат сложения оказался непредставиммым в диапазоне значений 8-битовых чисел в двоичном коде (от 127 до -128). Этот эффект принято называть переполнением,так как сумма вышла за пределы диапазона чисел, представимых в дополнительном коде.
Важно заметить, что переполнение и перенос - два различных флага и имеют разное значение. На Фиг. 3.14 нет переноса, так как сложение без знака дает правильный результат, а есть переполнение: что сложение со знаком дает неверный результат. Возможен и случай одновременно переноса и переполнения, как показано на Фиг. 3.15.
Шестнадцатеричное |
Десятичный эквивалент |
|
Hex |
Со знаком |
Без знака |
8Eh |
-114 |
142 |
0ADh |
-83 |
173 |
1.3Bh |
-197 |
315 |
Фиг. 3.15 8-битовое сложение с переносом и перепонением
Здесь показан пример сложения двух отрицательных чисел. Результат -197 выходит за пределы диапазона представимости в дополнительном коде. Это показано тем, что 8-битовый результат 3BH - положительное число. Кроме того в этом примере устанавливается флаг переноса, означающий, что сложение без знака дало число, большее максимального представимого. В случае 8-битовых чисел максимальное число равно 255.
Вообще говоря, операция сложения в процессоре выполняется одинаково над числами и со знаком, и без знака, а также с десятичнымичислами. Флаги переноса, дополнительного переноса и переполнения содержат информацию о выполненной операции, позволяя программе определить верный результат в используемой системе счисления. Флаг переполнения показывает, что результат арифметическойоперации выходит за пределы диапазона чисел, представленныхв дополнительном виде. Переполнение отличается от переноса, который показывает, что произошел перенос из старшего бита результата.