Всем привет.
Покритикуйте мою реализацию функций ABS и SGN для байта и слова, может можно как-то оптимизировать.
Байтовый аргумент поступает в регистре L, результат возвращается в нём же. Слова - в паре HL. Таковы соглашения модели вызова __z88dk_fastcall.
Код:/*--------------------------------- Cut here ---------------------------------*/
signed char Basic_ABS (signed char x) __z88dk_fastcall {
__asm
BIT 7,L
RET Z
XOR A
SUB L
LD L,A
__endasm;
} //Basic_ABS
/*--------------------------------- Cut here ---------------------------------*/
signed int Basic_ABSI (signed int x) __z88dk_fastcall {
__asm
BIT 7,H
RET Z
EX DE,HL
XOR A
LD L,A
LD H,A
SBC HL,DE
__endasm;
} //Basic_ABSI
/*--------------------------------- Cut here ---------------------------------*/
signed char Basic_SGN (signed char x) __z88dk_fastcall {
__asm
LD A,L
OR L
RET Z
BIT 7,L
LD L,#0xFF
RET NZ
LD L,#1
__endasm;
} //Basic_SGN
/*--------------------------------- Cut here ---------------------------------*/
signed char Basic_SGNI (signed int x) __z88dk_fastcall {
__asm
LD A,H
OR L
RET Z
BIT 7,H
LD L,#0xFF
RET NZ
LD L,#1
__endasm;
} //Basic_SGNI

