📄 math24.h
字号:
int16 operator/ _divS16_8( int16 arg1, int8 arg2)
{
uns8 rm = 0;
char counter = 16+1;
char sign = arg1.high8 ^ arg2.high8;
if (arg1 < 0) {
INVERT:
arg1 = -arg1;
if (!counter)
return arg1;
}
if (arg2 < 0)
arg2 = -arg2;
goto ENTRY;
do {
rm = rl( rm);
W = rm - arg2;
if (Carry)
rm = W;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
if (sign & 0x80)
goto INVERT;
return arg1;
}
int24 operator/ _divS24_8( int24 arg1, int8 arg2)
{
uns8 rm = 0;
char counter = sizeof(arg1)*8+1;
char sign = arg1.high8 ^ arg2.high8;
if (arg1 < 0) {
INVERT:
arg1 = -arg1;
if (!counter)
return arg1;
}
if (arg2 < 0)
arg2 = -arg2;
goto ENTRY;
do {
rm = rl( rm);
W = rm - arg2;
if (Carry)
rm = W;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
if (sign & 0x80)
goto INVERT;
return arg1;
}
int16 operator/ _divS16_16( int16 arg1, int16 arg2)
{
uns16 rm = 0;
char counter = sizeof(arg1)*8+1;
char sign = arg1.high8 ^ arg2.high8;
if (arg1 < 0) {
INVERT:
arg1 = -arg1;
if (!counter)
return arg1;
}
if (arg2 < 0)
arg2 = -arg2;
goto ENTRY;
do {
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto ENTRY;
rm.high8 = W;
rm.low8 -= arg2.low8;
Carry = 1;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
if (sign & 0x80)
goto INVERT;
return arg1;
}
int24 operator/ _divS24_16( int24 arg1, int16 arg2)
{
uns16 rm = 0;
char counter = sizeof(arg1)*8+1;
char sign = arg1.high8 ^ arg2.high8;
if (arg1 < 0) {
INVERT:
arg1 = -arg1;
if (!counter)
return arg1;
}
if (arg2 < 0)
arg2 = -arg2;
goto ENTRY;
do {
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto ENTRY;
rm.high8 = W;
rm.low8 -= arg2.low8;
Carry = 1;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
if (sign & 0x80)
goto INVERT;
return arg1;
}
int24 operator/ _divS24_24( int24 arg1, int24 arg2)
{
uns24 rm = 0;
char counter = sizeof(arg1)*8+1;
char sign = arg1.high8 ^ arg2.high8;
if (arg1 < 0) {
INVERT:
arg1 = -arg1;
if (!counter)
return arg1;
}
if (arg2 < 0)
arg2 = -arg2;
goto ENTRY;
do {
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.mid8, arg2.mid8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto ENTRY;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.mid8, arg2.mid8);
Carry = 1;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
if (sign & 0x80)
goto INVERT;
return arg1;
}
uns8 operator% _remU16_8( uns16 arg1, uns8 arg2)
{
uns8 rm = 0;
char counter = sizeof(arg1)*8;
do {
arg1 = rl( arg1);
rm = rl( rm);
uns8 tmp = rl( tmp);
W = rm - arg2;
if (tmp & 1)
Carry = 1;
if (Carry)
rm = W;
counter = decsz(counter);
} while (1);
return rm;
}
uns8 operator% _remU24_8( uns24 arg1, uns8 arg2)
{
uns8 rm = 0;
char counter = sizeof(arg1)*8;
do {
arg1 = rl( arg1);
rm = rl( rm);
uns8 tmp = rl( tmp);
W = rm - arg2;
if (tmp & 1)
Carry = 1;
if (Carry)
rm = W;
counter = decsz(counter);
} while (1);
return rm;
}
uns16 operator% _remU16_16( uns16 arg1, uns16 arg2)
{
uns16 rm = 0;
char counter = sizeof(arg1)*8;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
NOSUB:
counter = decsz(counter);
} while (1);
return rm;
}
uns16 operator% _remU24_16( uns24 arg1, uns16 arg2)
{
uns16 rm = 0;
char counter = sizeof(arg1)*8;
do {
arg1 = rl( arg1);
rm = rl( rm);
if (Carry)
goto SUBTRACT;
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
SUBTRACT:
rm.low8 -= arg2.low8;
genSub( rm.high8, arg2.high8);
NOSUB:
counter = decsz(counter);
} while (1);
return rm;
}
uns24 operator% _remU24_24( uns24 arg1, uns24 arg2)
{
uns24 rm = 0;
char counter = sizeof(arg1)*8;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.mid8, arg2.mid8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.mid8, arg2.mid8);
NOSUB:
counter = decsz(counter);
} while (1);
return rm;
}
int8 operator% (int8 arg1, int8 arg2) @
int8 operator% _remS16_8( int16 arg1, int8 arg2)
{
int8 rm = 0;
char counter = 16;
char sign = arg1.high8;
if (arg1 < 0)
arg1 = -arg1;
if (arg2 < 0)
arg2 = -arg2;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm - arg2;
if (Carry)
rm = W;
counter = decsz(counter);
} while (1);
if (sign & 0x80)
rm = -rm;
return rm;
}
int8 operator% _remS24_8( int24 arg1, int8 arg2)
{
int8 rm = 0;
char counter = sizeof(arg1)*8;
char sign = arg1.high8;
if (arg1 < 0)
arg1 = -arg1;
if (arg2 < 0)
arg2 = -arg2;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm - arg2;
if (Carry)
rm = W;
counter = decsz(counter);
} while (1);
if (sign & 0x80)
rm = -rm;
return rm;
}
int16 operator% _remS16_16( int16 arg1, int16 arg2)
{
int16 rm = 0;
char counter = sizeof(arg1)*8;
char sign = arg1.high8;
if (arg1 < 0)
arg1 = -arg1;
if (arg2 < 0)
arg2 = -arg2;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
NOSUB:
counter = decsz(counter);
} while (1);
if (sign & 0x80)
rm = -rm;
return rm;
}
int16 operator% _remS24_16( int24 arg1, int16 arg2)
{
int16 rm = 0;
char counter = sizeof(arg1)*8;
char sign = arg1.high8;
if (arg1 < 0)
arg1 = -arg1;
if (arg2 < 0)
arg2 = -arg2;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
NOSUB:
counter = decsz(counter);
} while (1);
if (sign & 0x80)
rm = -rm;
return rm;
}
int24 operator% _remS24_24( int24 arg1, int24 arg2)
{
int24 rm = 0;
char counter = sizeof(arg1)*8;
char sign = arg1.high8;
if (arg1 < 0)
arg1 = -arg1;
if (arg2 < 0)
arg2 = -arg2;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.mid8, arg2.mid8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.mid8, arg2.mid8);
NOSUB:
counter = decsz(counter);
} while (1);
if (sign & 0x80)
rm = -rm;
return rm;
}
#ifdef hw_mult8x8
#undef hw_mult8x8
#undef loRES
#undef hiRES
#endif
#undef genAdd
#undef genSub
#undef genAddW
#undef genSubW
#pragma library 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -