Z80: сравнение двух байтов

 Один перец интересовался, как сравнивать знаковые числа. Глянул на HitechC:

int main() {
char x=127;
char y=96;
if (x>y)
{
x=-x;
}
return 0;
}


loc_80F7:
ld (ix+0FFh), 7Fh
ld (ix+0FEh), 60h
ld b, (ix+0FFh)
ld a, (ix+0FEh)
call sub_812A
jp p, loc_8113
ld a, (ix+0FFh); x=-x
neg
ld (ix+0FFh), a
loc_8113:
; -------------------------------------------------------------------
sub_812A:
push de
ld e, a
xor b
jp m, loc_8134
ld a, e
sbc a, b
pop de
ret
loc_8134:
ld a, e
and 80h
ld d, a
ld a, e
sbc a, b
ld a, d
inc a
pop de
ret

Нетрудно сопоставить дизассемблер с кодом.

Комментарии