SGN можно запилить 100500-ю способами
Код:
;оригинальная процедура
LD A,L ;4
OR L ;4
RET Z ;5 11
BIT 7,L ;8
LD L,#0xFF ;7
RET NZ ;5 11
LD L,#1 ;7
RET ;10
;+=50 0=19 -=39
;36 в среднем ; 44,5 в среднем без 0
с ходу придумалось так
Код:
ld a,l ;4
rlca ;4 возможно rla (нужно чтоб флаг С не попадал в А)
jp c,l1 ;10 (7 12 JR)
or a ;4
ret z ;5 11
ld l,$01 ;7
ret ;10
l1
ld l,$FF ;7
ret ;10
;с использованием JP
;+=44 0=33 -=35
;37,3 в среднем ;39,5 в среднем без 0
;с использованием JR
;+=41 0=30 -=37
;36 в среднем ; 39 в среднем без 0
думаю можно и в 600 раз быстрее как минимум
кажется мне оптимизировать процедуру чтоб проверка на 0(1 против 255 других входящих значений) выполнялась быстрей всего нет смысла
правда я хз в какой ситуации применять sgn
- - - Добавлено - - -
мну *****кодер 80 уровня
Я только сегодня узнал что такое sgn
глядя на код в самом верху
кто мне не дает так кодить?
- - - Добавлено - - -
MOAR SPEED!!!
Код:
rlc l ;8
ret z ;5 11
jp c,l1 ;10 (7 12 JR)
ld l,$01 ;7
ret ;10
l1
ld l,$FF ;7
ret ;10
;с использованием JP
;+=40 0=19 -=40
;33 в среднем ;40 в среднем без 0
;с использованием JR
;+=37 0=19 -=42
;32,6 в среднем ;39,5 в среднем без 0
АND MOAR!!!!
Код:
rlc l ;8
ret z ;5 11
ld l,$01 ;7 ;ld l,$FF
ret nc ;5 11 ;ret c
ld l,$FF ;7 ;ld l,$01
ret ;10
;-=31 0=19 +=42
;30,6 в среднем ;36,5 в среднем без 0
;легко реверсится в
;-=42 0=19 +=31 (если положительные числа встречаются чаще(а они наверное встречаются чаще))
- - - Добавлено - - -
Код:
;оригинальная процедура
BIT 7,L 8
RET Z 5 11
XOR A 4
SUB L 4
LD L,A 4
RET 10
;19 35
Код:
xor a ;4
sub l ;4
ret m ;5 11
ld l,a ;4
ret ;10
;19 27
;по ходу дает ложный результат при $00 и $80 перепроверьте кто нить!!!