Флаг половинного переноса (также известный как вспомогательный флаг или десятичная регулировка флага ) немного состояния флага в регистре состояния многих процессоров семейств, такие как Intel 8080 , Zilog Z80 , то x 86 , [1] и Atmel AVR серии, среди прочего. Он указывает, когда был сгенерирован перенос или заимствование из четырех младших битов регистра накопителя после выполнения арифметической инструкции. Он в основном используется в десятичных ( BCD ) арифметических инструкциях.
Применение
Обычно процессор, использующий двоичную арифметику (которая включает почти все современные ЦП), добавляет два 8-битных байтовых значения в соответствии с правилами простого двоичного сложения. Например, сложение 25 16 и 48 16 дает 6D 16 . Однако для двоично-десятичных (BCD) значений, где каждый 4-битный полубайт представляет десятичную цифру, сложение является более сложным. Например, добавляя десятичные значения 25 и 48, которые кодируются как значения 25 16 и 48 16 BCD , двоичное сложение двух значений дает 6D 16 . Поскольку младший полубайт этого значения является недесятичной цифрой (D), его необходимо отрегулировать, добавив 06 16, чтобы получить правильный результат BCD 73 16 , который представляет собой десятичное значение 73.
0010 0101 25+ 0100 1000 48----------- 0110 1101 6D , промежуточный результат + 0110 06, корректировка----------- 0111 0011 73 , скорректированный результат
Аналогичным образом, сложение значений BCD 39 16 и 48 16 дает 81 16 . В этом результате отсутствует недесятичный младший полубайт, но он вызывает перенос младшей значащей цифры (младшие четыре бита) в старшую значащую цифру (старшие четыре бита). На это указывает установка ЦП флага полупереноса. Это значение также необходимо скорректировать, добавив 06 16 к 81 16, чтобы получить скорректированный результат BCD 87 16 .
0011 1001 39+ 0100 1000 48----------- 1000 0001 81 , промежуточный результат + 0110 06, корректировка----------- 1000 0111 87 , скорректированный результат
Наконец, если в результате сложения получается не десятичная старшая цифра, то к значению необходимо добавить 60 16, чтобы получить правильный результат BCD. Например, сложение 72 16 и 73 16 дает E5 16 . Поскольку самая значимая цифра этой суммы не является десятичной (E), добавление к ней 60 16 дает скорректированный результат BCD 145 16 . (Обратите внимание, что первая цифра на самом деле является битом переноса .)
0111 0010 72+ 0111 0011 73----------- 1110 0101 E5 , промежуточный результат + 0110 60, корректировка-----------1 0100 0101 145 , скорректированный результат
Подводя итог, если результат двоичного сложения содержит недесятичную младшую цифру или вызывает установку флага полупереноса, результат должен быть скорректирован путем добавления к нему 06 16 ; если результат содержит не десятичную старшую цифру, результат необходимо дополнительно скорректировать, добавив 60 16, чтобы получить правильное окончательное значение BCD.
Смотрите также
Рекомендации
- ^ «Руководство разработчика программного обеспечения для архитектуры Intel, Том 2: Справочное руководство по набору инструкций» (PDF) . Проверено 29 мая 2013 .