Флаг полупереноса
Флаг полупереноса (также известный как вспомогательный флаг ) — это бит флага состояния в регистре состояния многих семейств процессоров , таких как Intel 8080 , Zilog Z80 , x86 , [ 1 ] и серия Atmel AVR , среди других. Он указывает, что инструкции был сгенерирован перенос или заимствование из четырех младших битов аккумуляторного после выполнения арифметической регистра . В основном он используется в десятичных ( BCD ) арифметических инструкциях.
Использование
[ редактировать ]Обычно процессор, использующий двоичную арифметику (к которому относятся почти все современные процессоры), складывает два 8-битных байтовых значения в соответствии с правилами простого двоичного сложения. Например, сложив 25 16 и 48 16, получим 6D 16 . Однако для двоично-десятичных значений (BCD), где каждый 4-битный полубайт представляет десятичную цифру, сложение более сложное. Например, при добавлении десятичных значений 25 и 48, которые закодированы как значения BCD 25 16 и 48 16 , двоичное сложение двух значений дает 6D 16 . Поскольку младший полубайт этого значения представляет собой недесятичную цифру (D), его необходимо скорректировать, добавив 06 16, чтобы получить правильный результат BCD 73 16 , который представляет десятичное значение 73.
0010 0101 25 + 0100 1000 48 ----------- 0110 1101 6D, intermediate result + 0110 06, adjustment ----------- 0111 0011 73, adjusted result
Аналогично, сложение значений BCD 39 16 и 48 16 дает 81 16 . Этот результат не имеет недесятичного младшего полубайта, но он вызывает перенос младшей значащей цифры (четыре младших бита) в старшую цифру (четыре старших бита). Об этом свидетельствует установка процессором флага полупереноса. Это значение также необходимо исправить, добавив 06 16 к 81 16, чтобы получить скорректированный результат BCD 87 16 .
0011 1001 39 + 0100 1000 48 ----------- 1000 0001 81, intermediate result + 0110 06, adjustment ----------- 1000 0111 87, adjusted result
Наконец, если в результате сложения получается недесятичная старшая цифра, то 60 16 к значению необходимо добавить , чтобы получить правильный результат в формате BCD. Например, сложение 72 16 и 73 16 дает E5 16 . Поскольку самая значимая цифра этой суммы недесятичная (E), прибавление к ней 60 16 дает исправленный результат BCD 145 16 . (Обратите внимание, что первая цифра на самом деле является битом переноса .)
0111 0010 72 + 0111 0011 73 ----------- 1110 0101 E5, intermediate result + 0110 60, adjustment ----------- 1 0100 0101 145, adjusted result
Подводя итог, если результат двоичного сложения содержит недесятичную младшую цифру или вызывает установку флага полупереноса, результат необходимо исправить, добавив 06 16 к нему ; если результат содержит недесятичную старшую цифру, результат необходимо дополнительно исправить, добавив 60 16 , чтобы получить правильное окончательное значение BCD.
Вспомогательный флаг переноса в x86
[ редактировать ]
|
Флаг вспомогательного переноса (AF) — это флаг ЦП в регистре FLAGS всех x86 -совместимых ЦП . [ 2 ] и предыдущее семейство 8080 . Intel иногда называла его флагом настройки. [ 3 ] Бит флага расположен в позиции 4 в регистре флага ЦП. Он указывает, когда арифметический перенос из четырех младших битов или младшего полубайта был сгенерирован или заимствование. Он в основном используется для поддержки двоично-десятичной арифметики (BCD).
Флаг вспомогательного переноса устанавливается (в 1), если во время операции добавления происходит перенос из младшего полубайта (четыре младших бита) в старший полубайт (4 старших бита) или заимствование из старшего полубайта в младший. полубайт в младшей 8-битной части во время вычитания. В противном случае, если такого переноса или заимствования не происходит, флаг очищается или «сбрасывается» (устанавливается в 0). [ 4 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Руководство разработчика программного обеспечения для архитектуры Intel, том 2: Справочное руководство по набору команд» (PDF) . Проверено 29 мая 2013 г.
- ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том. 1 . Декабрь 2022. с. 3-16.
- ^ Руководство разработчика семейства Pentium Pro: Том 2 (PDF) . Январь 1996 г. с. 3-11.
- ^ «Руководство пользователя семейства 8086» (PDF) . Интел. Архивировано из оригинала (PDF) 27 сентября 2020 года . Проверено 2 июля 2020 г.