Я хочу сравнить два 16-битных числа и ответвление по результату: эквивалент if (a<b) goto negative
.Я использую Intel 8080.
Z80 имеет подписанный арифметический флаг переполнения, который можно использовать для этого с некоторой степенью усилия.Стандартный код:
ld de, _left
ld hl, _right
ld a, e
sub a, l
ld a, d
sbc a, h
jp po, $+5 ; branch on overflow flag not set
xor a, 0x80 ; flip sign bit
jm negative ; actually do the test
Но 8080 не является строгим подмножеством Z80, и приведенный выше код не будет работать там - на 8080 арифметические инструкции устанавливают флаг P на основепо соотношению результата с веселыми результатамибитовые операции с обоими операндами и результатом, и у меня заканчиваются регистры.Кроме того, это на самом деле не то, что я хочу здесь;Я на самом деле не забочусь о переполнении.Я просто хочу сделать сравнение.
(Я не могу просто вычесть и разветвить, если результат отрицательный, потому что это не работает во всех случаях. Рассмотрим INT_MIN