home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
On Disk Monthly 62
/
odm62.zip
/
GDSOURCE.EXE
/
FUNCTS.PAS
next >
Wrap
Pascal/Delphi Source File
|
1991-10-14
|
7KB
|
193 lines
unit functs;
interface
FUNCTION ByteMax(VA, VB: byte): byte;
FUNCTION ByteMin(VA, VB: byte): byte;
FUNCTION ShortMax(VA, VB: shortint): shortint;
FUNCTION ShortMin(VA, VB: shortint): shortint;
FUNCTION ShortSgn(VA: shortint): shortint;
FUNCTION WordMax(VA, VB: word): word;
FUNCTION WordMin(VA, VB: word): word;
FUNCTION IntMax(VA, VB: integer): integer;
FUNCTION IntMin(VA, VB: integer): integer;
FUNCTION IntSgn(VA: integer): integer;
FUNCTION LongMax(VA, VB: longint): longint;
FUNCTION LongMin(VA, VB: longint): longint;
FUNCTION LongSgn(VA: longint): longint;
implementation
FUNCTION ByteMax(VA, VB: byte): byte;
BEGIN
Inline(
$8A/$46/<VA/ { MOV AL,VA }
$3A/$46/<VB/ { CMP AL,VB }
$77/$03/ { JA EXIT }
$8A/$46/<VB/ { MOV AL,VB }
$88/$46/$FF {EXIT: MOV [BP-01],AL }
)
END;
FUNCTION ByteMin(VA, VB: byte): byte;
BEGIN
Inline(
$8A/$46/<VA/ { MOV AL,VA }
$3A/$46/<VB/ { CMP AL,VB }
$72/$03/ { JB EXIT }
$8A/$46/<VB/ { MOV AL,VB }
$88/$46/$FF {EXIT: MOV [BP-01],AL }
)
END;
FUNCTION ShortMax(VA, VB: shortint): shortint;
BEGIN
Inline(
$8A/$46/<VA/ { MOV AL,VA }
$3A/$46/<VB/ { CMP AL,VB }
$7F/$03/ { JG EXIT }
$8A/$46/<VB/ { MOV AL,VB }
$88/$46/$FF {EXIT: MOV [BP-01],AL }
)
END;
FUNCTION ShortMin(VA, VB: shortint): shortint;
BEGIN
Inline(
$8A/$46/<VA/ { MOV AL,VA }
$3A/$46/<VB/ { CMP AL,VB }
$7C/$03/ { JL EXIT }
$8A/$46/<VB/ { MOV AL,VB }
$88/$46/$FF {EXIT: MOV [BP-01],AL }
)
END;
FUNCTION ShortSgn(VA: shortint): shortint;
BEGIN
Inline(
$8A/$46/<VA/ { MOV AL,VA }
$3C/$00/ { CMP AL,00 }
$74/$0A/ { JZ EXIT }
$D0/$C0/ { ROL AL,1 }
$24/$01/ { AND AL,01 }
$D0/$E0/ { SHL AL,1 }
$FE/$C8/ { DEC AL }
$F6/$D8/ { NEG AL }
$88/$46/$FF {EXIT: MOV [BP-01],AL }
)
END;
FUNCTION WordMax(VA, VB: word): word;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$3B/$46/<VB/ { CMP AX,VB }
$77/$03/ { JA EXIT }
$8B/$46/<VB/ { MOV AX,VB }
$89/$46/$FE {EXIT: MOV [BP-02],AX }
)
END;
FUNCTION WordMin(VA, VB: word): word;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$3B/$46/<VB/ { CMP AX,VB }
$72/$03/ { JB EXIT }
$8B/$46/<VB/ { MOV AX,VB }
$89/$46/$FE {EXIT: MOV [BP-02],AX }
)
END;
FUNCTION IntMax(VA, VB: integer): integer;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$3B/$46/<VB/ { CMP AX,VB }
$7F/$03/ { JG EXIT }
$8B/$46/<VB/ { MOV AX,VB }
$89/$46/$FE {EXIT: MOV [BP-02],AX }
)
END;
FUNCTION IntMin(VA, VB: integer): integer;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$3B/$46/<VB/ { CMP AX,VB }
$7C/$03/ { JL EXIT }
$8B/$46/<VB/ { MOV AX,VB }
$89/$46/$FE {EXIT: MOV [BP-02],AX }
)
END;
FUNCTION IntSgn(VA: integer): integer;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$3D/$00/$00/ { CMP AX,0000 }
$74/$0A/ { JZ EXIT }
$D1/$C0/ { ROL AX,1 }
$25/$01/$00/ { AND AX,0001 }
$D1/$E0/ { SHL AX,1 }
$48/ { DEC AX }
$F7/$D8/ { NEG AX }
$89/$46/$FE {EXIT: MOV [BP-02],AX }
)
END;
FUNCTION LongMax(VA, VB: longint): longint;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$8B/$56/<VA+2/ { MOV DX,wo VA+2 }
$3B/$56/<VB+2/ { CMP DX,wo VB+2 }
$7F/$0D/ { JG EXIT }
$7C/$05/ { JL OTHR }
$3B/$46/<VB/ { CMP AX,VB }
$7D/<06/ { JGE EXIT }
$8B/$46/<VB/ {OTHR: MOV AX,VB }
$8B/$56/<VB+2/ { MOV DX,wo VB+2 }
$89/$46/$FC/ {EXIT: MOV [BP-04],AX }
$89/$56/$FE { MOV [BP-02],DX }
)
END;
FUNCTION LongMin(VA, VB: longint): longint;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$8B/$56/<VA+2/ { MOV DX,wo VA+2 }
$3B/$56/<VB+2/ { CMP DX,wo VB+2 }
$7C/$0D/ { JL EXIT }
$7F/$05/ { JG OTHR }
$3B/$46/<VB/ { CMP AX,VB }
$76/$06/ { JBE EXIT }
$8B/$46/<VB/ {OTHR: MOV AX,VB }
$8B/$56/<VB+2/ { MOV DX,wo VB+2 }
$89/$46/$FC/ {EXIT: MOV [BP-04],AX }
$89/$56/$FE { MOV [BP-02],DX }
)
END;
FUNCTION LongSgn(VA: longint): longint;
BEGIN
Inline(
$8B/$46/<VA/ { MOV AX,VA }
$8B/$56/<VA+2/ { MOV DX,wo VA+2 }
$09/$C2/ { OR DX,AX }
$74/$0D/ { JZ EXIT }
$89/$C2/ { MOV DX,AX }
$D1/$C0/ { ROL AX,1 }
$25/$01/$00/ { AND AX,0001 }
$D1/$E0/ { SHL AX,1 }
$48/ { DEC AX }
$F7/$D8/ { NEG AX }
$99/ { CWD }
$89/$46/$FC/ {EXIT: MOV [BP-04],AX }
$89/$56/$FE { MOV [BP-02],DX }
)
END;
END.