На главную Назад
Добро пожаловать, уважаемый посетитель!

Флаг переноса (CF) служитдля поддержания процессором многоразряд-

ной арифметики. Обычно при выполнении арифметических операций вроде

сложенияиливычитания8088можетработатьснеболеечем

16-битовымичислами.Однаковнекоторыхслучаяхприходится

манипулировать с числами превышающими 2**16. Например, для сложения

двух32-битовых чиселпрограмме придетсясложить сначала младшие

частичисел, азатем -старшие. НаФиг 3.11показано сложение

32-битовых чисел 22223333H и 44445555H.

В этом примере складываютсясначала младшие 16-битовые згначе-

ния сполучением результата 8888H. Затемскладываются старшие 16-

 

второе сложениепервое сложение

---------------------------------------

22223333

44445555

--------

66668888Фиг. 3.11

--------------------------------------- 32-битовое сложение

 

битовыезначения срезультатом 6666H.32-битовый результат равен

66668888H.Дляполучения32-битовогорезультататребуетсядва

16-битовыхсложения.Для48-битовогочислапотребуется уже три

16-битовых сложения и т.д. Для выполнения сложения программа должна

расчленять каждое большое число на 16-бтовые куски.

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

16-битового сложения не влиял на второе. В общем же случае сложения

возможенпереносизоднойпозициивдругую.Когдапроцессор

выполняет слоожение двух 16-битовыхчисел, он автоматически выпол-

няет переносы. Когда жепрограмма складывает два 32-битовых числа,

как в нашемпримере, то ей приходится запоминатьперенос в первом

сложенииииспользоватьегоприсложениивторых16-битовых

значений.НаФиг.3.12показаносложениечисел22224444Hи

3333EEEEH. В этом примере перенос от первого сложения отражается на

втором сложении.

 

втоорое сложениепервое сложение

--------------------------------------------

22224444

3333EEEE

1 (перенос от первого)

---------

555613332

--------------------------------------------

Фиг. 3.12 32-битовое сложение с переносом

 

Первое 16-битовое сложение 4444H и EEEEH дает результат 13332H.

Поскольку результат имеет длину 17 бит,он не может быть помещен в

16-битовыйрегистр. Флагпереноса регистрасостояний примет этот

дополнительный бит арифметической информации. При втором 16-битовом

сложении складываются не только числа2222H и 3333H, но и значение

флага переноса. Существует двеформы команды сложения: команда ADD

складываетдва16-битовыхчисла,давая17-битовый результат, а

команда сложения с переносом ADCскладывает два 16-битовых числа и

значениефлагапереноса,даваятакже17-битовыйрезультат.В

примерена рис.3.12для первойоперации сложенияиспользовалась

команда ADD, а для второй операции сложения команда ADC.

Оба приведенных примера используют флаг переноса для выполнения

арифметикиповышенной точности.В первомпримере послесложения

3333Hи5555Hполучился нулевойперенос;когдакомандаADC

прибавляетзначение переносак числам2222H и4444H, получается

правильныйрезультат 6666H.Во второмпримере флагпереноса был

установлен,так как был перенос из младшей части суммы в старшую.

В случае арифметики ещебольшей точности программа может снова

и сноваиспользоватьвпроцессесложенияфлаг переноса. Каждое

16-битовоесложение устанавливаетфлаг переносав соответствии с

его результатом, а программа может сложить следующие по старшинству

части чисел с полученным значениемфлага переноса. В каждом случае

флагпереноса содержитсемнадцатый битпредыдущего результата, и

программа должна использовать этозначение при сложении следующих,

более старших, частей чисел.

Флаг переноса служит и длядругой важной цели. Когда программа

выполняет вычитание, существует возможностьзаема из одной позиции

в другую.Флагпереносапоказываетпривычитании необходимость

заема из одной части числа в другую.

Вычитать целыечисла, в несколько словдлиной программа может

таким же путем, как искладывать. Сначала вычитаются младшие части

чисел, с получением 16-битового результата. Команда вычитания (SUB)

устанавливаетфлагпереноса,отражаязаем. Следующее 16-битовое

вычитание программа выполняет сзаемом. Команда вычитания с заемом

(SBB)нарядусобычнымвычитаниемвычитаетиз результата флаг

переноса. Как и при сложении программа может осуществлять вычитание

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

значения заема.

Микропроцессор 8088трактует флаг переносакак истинный заем,

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

устанавливает флаг переноса равным1. Он показывает, что программа

должна вычесть 1 из результата вычитания старших частей чисел. Если

заеманет,процессорсбрасывает флагпереносананоль.Это

означает, что программе не нужно вычитать 1 из старшей части числа.

Микропроцессор устанавливает флагпереноса как индикатор заема

при расширенном вычитании. Нарядус расширением точности программа

может сипользоватьфлаг переноса дляопределения соотношения двух

чисел.Если флагпереноса установлен,вычитаемое значение больше

уменьшаемого; если флаг переноса не установлен, вычитаемое значение

меньшеили равноуменьшаемому.Этоозначает, чтофлаг переноса

становится первичныминдикатором при определениисоотношения двух

чисел: после того, как программавычитает два числа, флаг переноса

указывает,какое изнихбольше.Таким способомпрограмма может

проверятьцелые числабеззнака,включая такиеприложения, как

сортировка строк символов. В случае чисел со знаком для определения

соотношениячиселпрограмменужнадополнительнаяинформация. В

следующейглавевразделе"Условныепереходы"обсуждаются все

способы тестирования чисел.


 

Mail.ru