Меню сайта

Урок 36. Флаг переноса

Флаг переноса (CF) служит — для поддержания процессором многоразряд-
— — — ной арифметики. Обычно при выполненииарифметических операций вроде
— — — сложения -или — вычитания — 8088 -может — — работать — с -не — более — чем
— — — 16-битовыми — — числами. — Однако — — в — — — некоторых — — случаях -приходится
— — — манипулировать с числами превышающими2**16. Например, для сложения
— — — двух -32-битовых чисел — программепридется — сложить сначала младшие
— — — части -чисел, а — затем — — — старшие. На — Фиг 3.11 — показаносложение
— — — 32-битовых чисел 22223333H и 44445555H.
— — — — — В этом примере складываются — сначала младшие 16-битовые згначе-
— — — ния с -получением результата 8888H. Затем -складываются старшие 16-

— — — — — — — -второе сложение — — — — — — — первое сложение
— — — — — — — —————————————-
— — — — — — — — — — -2222 — — — — — — — — — — — — 3333
— — — — — — — — — — -4444 — — — — — — — — — — — — 5555
— — — — — — — — — — —— — — — — — — — — — — — — —-
— — — — — — — — — — -6666 — — — — — — — — — — — — 8888 — — — Фиг. 3.11
— — — — — — — —————————————- 32-битовое сложение

— — — битовые -значения с — результатом6666H. — 32-битовый результат равен
— — — 66668888H. — — — Для — получения — — — 32-битового — результата -требуется — два
— — — 16-битовых — — — сложения. — Для — — — 48-битового — числа -потребуется уже три
— — — 16-битовых сложения и т.д. Для выполнениясложения программа должна
— — — расчленять каждое большое число на16-бтовые куски.
— — — — — Однако, приведенный пример — достаточно прост. Результат первого
— — — 16-битового сложения не влиял на второе. Вобщем же случае сложения
— — — возможен -перенос — из — одной -позиции — в — другую. -Когда — процессор
— — — выполняет слоожение двух 16-битовых — чисел, он автоматически выпол-
— — — няет переносы. Когда же — программа складывает два 32-битовых числа,
— — — как в нашем — примере, то ей приходится запоминать — перенос в первом
— — — сложении -и — — использовать — — — — — его -при — — сложении — вторых -16-битовых
— — — значений. -На — Фиг. — 3.12 показано — сложение -чисел — 22224444H — и
— — — 3333EEEEH. В этом примере перенос отпервого сложения отражается на
— — — втором сложении.

— — — — — втоорое сложение — — — — — первое сложение
— — — — — ———————————————
— — — — — — — -2222 — — — — — — — — — — — — — — — — — — 4444
— — — — — — — -3333 — — — — — — — — — — — — — — — — — — EEEE
— — — — — — — — — — -1 (перенос от первого)
— — — — — — — —— — — — — — — — — — — — — — — — — — ——
— — — — — — — -5556 — — — — — — — — — — — — — — — — — 13332
— — — — — ———————————————
— — — — — — -Фиг. 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 из старшей части числа.
— — — — — Микропроцессор устанавливает флаг — переноса как индикатор заема
— — — при расширенном вычитании. Наряду — с расширением точности программа
— — — может сипользовать — флаг переноса для -определения соотношения двух
— — — чисел. -Если флаг — переносаустановлен, — вычитаемое значение больше
— — — уменьшаемого- если флаг переноса неустановлен, вычитаемое значение
— — — меньше -или равно — уменьшаемому. — Это -означает, что — флаг переноса
— — — становится первичным — индикатором при определении — соотношения двух
— — — чисел: после того, как программа — вычитает два числа, флаг переноса
— — — указывает, — — — какоеиз — них -больше. — Таким способом — — — программа может
— — — проверять -целые числа — без — знака, -включая такие — — — — — приложения, как
— — — сортировка строк символов. В случае чиселсо знаком для определения
— — — соотношения — чисел — программе — нужна -дополнительная — информация. В
— — — следующей -главе — в — разделе -«Условные -переходы» — обсуждаются все
— — — способы тестирования чисел.

Категория: Программирование на Ассемблере | Дата: 15.02.13

Меню раздела
Блок