Разница между JP и JPE или JNP и JPO на ассемблере

Этот вопрос касается флага четности. Я не могу понять разницу между JP и JPE или JNP и JPO. Было ли это просто другое имя для каждого или у него была какая-то разница?


person vio1etus    schedule 21.08.2018    source источник
comment
@Hovercraft Этот вопрос очень близок, но он спрашивает о знаках / переносах флагов; варианты перехода с четностью никогда не упоминаются, кроме как в таблице.   -  person Jonathon Reinhart    schedule 21.08.2018


Ответы (1)


Для данной инструкции перехода (размера) есть только два условия флага четности, которые она может проверить. Как вы уже догадались, у каждого из них по два имени:

7B cb   JNP rel8  Jump short if not parity (PF=0).
7A cb   JP  rel8  Jump short if parity (PF=1).
7A cb   JPE rel8  Jump short if parity even (PF=1).
7B cb   JPO rel8  Jump short if parity odd (PF=0).

Справочник по набору инструкций x86 — Jcc (c9x.me)

Вы можете видеть, что JNP и JPO являются одной и той же точной инструкцией (7B), как и JP и JPE (7A).

person Jonathon Reinhart    schedule 21.08.2018
comment
Не уверен, почему за этот очевидно правильный ответ проголосовали против. - person Jonathon Reinhart; 21.08.2018
comment
Большое спасибо! Вы решили мою проблему. Я просто не могу понять, почему у инструкции два имени. Я узнал, что причина, по которой были установлены JZ и JE, заключается в том, что они имеют разные предпочтения в использовании или другое значение для ПОЛЬЗОВАТЕЛЕЙ. Но JP и JPE не имеют смысла устанавливать. В любом случае, спасибо. @Jonathon Reinhart - person vio1etus; 21.08.2018
comment
@lovely: одна и та же инструкция имеет несколько имен для удобства записи и совместимости с древними процессорами, такими как 8080 и 8085, прямые предки 8088. - person wallyk; 21.08.2018
comment
@JackZhang по той же причине ... JPE читает скачок, когда четность четная, а JP - скачок, когда четность установлена ​​ ... если вы не пишете тонны сборки x86, вам может быть легче вспомнить JPE, чем вспомнить, если PF равен 1 или 0, когда младшие 8 битов результата имеют четность (также, если вы ожидаете, что реализация HW просто xor 8 бит и поместит результат в PF, вы на самом деле догадаетесь неправильно, PF=1 для четной четности, поэтому в него xor добавлена ​​дополнительная 1). Так что в этом аспекте использование JPE легче запомнить. OTOH, если вы действительно просто хотите знать, если PF = 1, JP.. - person Ped7g; 21.08.2018
comment
Точно так же JB, JC и JNAE — это одна и та же инструкция, включающая флаг переноса. - person Weather Vane; 21.08.2018