Флаг полуперти - Half-carry flag

А полуприкрытый флаг (также известный как вспомогательный флаг или же десятичный флаг настройки) является битом флага условия в регистр статуса из многих ЦПУ семьи, такие как Intel 8080, Зилог Z80, то x86,[1] и Atmel AVR серии, среди прочего. Он указывает, когда нести или заимствование было сгенерировано из четырех младших битов аккумулятор зарегистрироваться после выполнения арифметика инструкция. В основном он используется в десятичном (BCD ) арифметические инструкции.

использование

Обычно процессор, использующий двоичная арифметика (который включает почти все современные процессоры) добавит два 8-битных байтовых значения в соответствии с правилами простого двоичного сложения. Например, добавив 2516 и 4816 производит 6D16. Однако для двоично-десятичный (BCD) значения, где каждый 4-битный полубайт представляет собой десятичную цифру, сложение более сложное. Например, добавление десятичных значений 25 и 48, которые закодированы как значения BCD 2516 и 4816, двоичное сложение двух значений дает 6D16. Поскольку младший полубайт этого значения является недесятичной цифрой (D), его необходимо отрегулировать, добавив 0616 для получения правильного результата BCD 7316, который представляет собой десятичное значение 73.

  0010 0101   25+ 0100 1000   48-----------  0110 1101 6D, промежуточный результат+      0110   06, корректирование-----------  0111 0011   73, скорректированный результат

Аналогичным образом, добавляя значения BCD 3916 и 4816 производит 8116. В этом результате отсутствует недесятичный младший полубайт, но он вызывает перенос младшей значащей цифры (младшие четыре бита) в старшую значащую цифру (старшие четыре бита). На это указывает установка ЦП флага полупереноса. Это значение также необходимо исправить, добавив 0616 до 8116 для получения скорректированного результата BCD 8716.

  0011 1001   39+ 0100 1000   48-----------  1000 0001   81, промежуточный результат+      0110   06, корректирование-----------  1000 0111   87, скорректированный результат

Наконец, если сложение приводит к не десятичной высокой цифре, тогда 6016 необходимо добавить к значению, чтобы получить правильный результат BCD. Например, добавив 7216 и 7316 производит E516. Так как самая значимая цифра этой суммы не является десятичной (E), добавляем 6016 для получения исправленного результата BCD 14516. (Обратите внимание, что первая цифра на самом деле бит для переноски.)

  0111 0010   72+ 0111 0011   73-----------  1110 0101 E5, промежуточный результат+ 0110        60, корректирование-----------1 0100 0101  145, скорректированный результат

Подводя итог, если результат двоичного сложения содержит недесятичную младшую цифру или приводит к установке флага полупереноса, результат должен быть исправлен добавлением 0616 к нему; если результат содержит не десятичную старшую цифру, результат необходимо дополнительно исправить, добавив 6016 для получения правильного окончательного значения BCD.

Смотрите также

Рекомендации

  1. ^ «Руководство разработчика программного обеспечения для архитектуры Intel, Том 2: Справочное руководство по набору инструкций» (PDF). Получено 2013-05-29.