Подтвердить что ты не робот

Какова цель флага четности на процессоре?

Некоторые процессоры (в частности, процессоры x86) имеют в своем регистре состояния флаг четности. Этот флаг указывает, является ли количество бит результата операции нечетным или четным.

Какую фактическую практическую цель выполняет флаг четности в контексте программирования?

Боковое примечание: Я предполагаю, что он предназначен для использования в сочетании с битом четности для выполнения базовой проверки ошибок, но такая задача, как представляется, необычна, чтобы гарантировать весь флаг ЦП.

4b9b3361

Ответ 1

Вернувшись в "старые времена", когда производительность всегда была проблемой, это имело больше смысла. Он использовался в сообщении для проверки целостности (проверка ошибок), и значительная часть сообщения была последовательной, что более эффективно использует четность, чем параллельные коммуникации. В любом случае для CPU было тривиально вычислить его, используя только 8 вентилей XOR, но в противном случае было довольно сложно вычислить без поддержки ЦП. Без поддержки аппаратного обеспечения потребовался фактический цикл (возможно, развернутый) или справочная таблица, которые были очень трудоемкими, поэтому преимущества перевешивали затраты. Теперь, хотя это больше похоже на остатки.

Ответ 2

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

TL; DR

Что такое четность

Как сказал Рэндалл Хайд в "Искусстве языка ассемблера", 2-е издание:

Четность - это очень простая схема обнаружения ошибок, первоначально используемая телеграфами и другими протоколами последовательной связи. Идея состояла в том, чтобы подсчитать количество заданных битов в символе и включить дополнительный бит в передачу, чтобы указать, содержит ли этот символ четное или нечетное число установленных бит. Принимающий конец передачи также будет подсчитывать бит и проверять, что бит "четности" указывает на успешную передачу.

Почему флаг четности был добавлен в архитектуру процессора

В старые времена было аппаратное обеспечение последовательной связи (UART), в котором не было возможности выполнять проверку четности переданных данных, поэтому программисты сделать это в программном обеспечении. Также некоторые действительно старые устройства, такие как пуансоны и считыватели бумажных лент, использовали 7 бит данных и бит четности, а программистам приходилось выполнять проверку четности в программном обеспечении для проверки целостности данных. Чтобы иметь возможность использовать бит четности для обнаружения ошибок, сторонам, связанным с общением, приходилось заранее констатировать, должен ли каждый переданный байт иметь нечетный или четный контроль (часть протокола связи).

Первичные методы проверки паритета в программном обеспечении без поддержки ЦП - это подсчет бит или использование справочной таблицы. Оба они очень дороги по сравнению с наличием флага четности в CPU, вычисленным одной инструкцией. По этой причине в апреле 1972 года Intel представила флаг четности в свой 8008 8-разрядный процессор. Ниже приведен пример того, как каждый байт может быть проверен на целостность на принимающей стороне с тех пор.

mov        al,<byte to be tested>
test       al,al
jp         <somewhere>         ; byte has even parity
                               ; byte has odd parity 

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

Эволюция инструкций условной четности в процессорах Intel

  • 1972. Флаг четности впервые представлен на Intel 8008. Существуют условные инструкции для переходов (JPO, JPE), вызовов (CPO, CPE) и возвращается (RPO, RPE).
  • 1978. Intel 8086 отбрасывает все, кроме условных переходов (JNP/JPO, JP/JPE).
  • 1985. Команды условного набора SETPE/SETP и SETPO/SETNP добавлены с Intel 80386.
  • 1995. Команды условного перемещения CMOVP/CMOVPE, CMOVNP/CMOVPO добавляются с помощью Pentium Pro.

Этот набор инструкций, которые используют флаг четности, остался неизменным с тех пор.

В настоящее время основная цель этого флага перешла на аппаратное обеспечение. Чтобы процитировать Randall Hyde в "The Art of Assembly Language", 2-е издание:

Чипы последовательной связи и другие аппаратные средства связи, использующие четность для проверки ошибок, обычно вычисляют четность в оборудовании; вам не нужно использовать программное обеспечение для этой цели.

Древность Флама четности подтверждается тем фактом, что он работает только на низких 8 бит, поэтому он ограниченного использования. Согласно инструкциям разработчиков программного обеспечения Intel® 64 и IA-32, флаг четности:

Установить, если младший байт результата содержит четное число из 1 бита; очищено в противном случае.

Интересный факт: по его собственным словам, инженер-программист Вольфганг Керн просмотрел весь код, который он написал в какой-то момент (~ 14 ГБ) для инструкций JPE и JPO, и нашел его только в модуле драйвера RS232 и в очень старый 8-битный расчет.

Источники

Ответ 3

Существует одна практическая микрооптимизация, достигаемая с четностью - эта замена битов, как используется, например, в генерации преобразования преобразования Фурье с использованием ядра бабочки.

Для замены битов 7 и 0 можно использовать четность (a & 0x81), за которой следует условное (a ^ = 0x81). Повторите для бит 6/1, 5/2 и 4/3.