Эта табличка знакома всем
Код:
+----------+-----------+----------+
|Результат | Состояние | Мнемоника|
|сравнения | флагов | условия |
+----------+-----------+----------+
| A=X | Z=1 | Z |
+----------+-----------+----------+
| A<>X | Z=0 | NZ |
+----------+-----------+----------+
| Беззнаковое сравнение (0...255) |
+----------+-----------+----------+
| A<X | CY=1 | C |
+----------+-----------+----------+
| A>=X | CY=0 | NC |
+----------+-----------+----------+
| С учетом знака (-128...+127) |
+----------+-----------+----------+
| A<X | S=1 | P (?)
+----------+-----------+----------+
| A>=X | S=0 | M (?)
+----------+-----------+----------+
Впервые встретитвшись в книге "ZX Spectrum для пользователей и программистов", она перекочевала с дополнительной ошибкой в "Как написать игру для ZX Spectrum на ассемблере", а затем во все русскоязычные статьи, посвященные этой теме.
А теперь вопрос: почему при S=1 (Sign=отрицательное число) указано условие P (Plus), а при S=0 (Sign=положительное число) указано условие M (Minus).
Ведь должно быть с точностью до наоборот. Во всяком случае так говорят все тексты, посвященные этому вопросу на других языках (отличных от русского, то есть), а также банальная практика. Да и в самой книге "Как написать игру для ZX Spectrum на ассемблере" встречаются опровержения этой таблице: например, в одной из программ при задании условия выхода за левую границу экрана указано "JR C,aaa ;(или JP M,aaa)". То есть в диапазоне положительных чисел условие A<X (т.е. "С") эквивалентно "M", а не "Р", как показывает таблица.
Я часто использую это сравнение при определении попадания спрайта на экран: сравниваю А с -2, например, и использую значения P/M, прямо противоположные таблице.
Наконец, следует также сказать, что это условие будет выполняться, только если числа в формате Two's Complement (проще, байт со знаком), будут друг от друга отличаться не более чем на 128. То есть -4<5 = -4-5 =-9 даст S=1 (условие M), а вот -128<5 = -128-5 = -133 (-->123) даст S=0 (условие P).
Так в чем же подозрительная притягательность этой таблицы, позволяющая ей без особых подозрений перепечатываться из издания в издание?
Ну, или, может, кто-то сможет объяснить ее логику? =)