{$R-}
UNIT MaxMin;
(**) INTERFACE (**)
  FUNCTION MaxS(A, B : ShortInt) : ShortInt;
  FUNCTION MinS(A, B : ShortInt) : ShortInt;
  FUNCTION MaxB(A, B : Byte)     : Byte;
  FUNCTION MinB(A, B : Byte)     : Byte;
  FUNCTION MaxI(A, B : Integer)  : Integer;
  FUNCTION MinI(A, B : Integer)  : Integer;
  FUNCTION MaxW(A, B : Word)     : Word;
  FUNCTION MinW(A, B : Word)     : Word;
  FUNCTION MaxL(A, B : LongInt)  : LongInt;
  FUNCTION MinL(A, B : LongInt)  : LongInt;
  FUNCTION MaxU(A, B : LongInt)  : LongInt;
  FUNCTION MinU(A, B : LongInt)  : LongInt;

(**) IMPLEMENTATION (**)
  FUNCTION MaxS(A, B : ShortInt) : ShortInt; Assembler;
  ASM
    MOV AL, A
    CMP AL, B
    JGE @no
    MOV AL, B
    @no:
  END;

  FUNCTION MinS(A, B : ShortInt) : ShortInt; Assembler;
  ASM
    MOV AL, A
    CMP AL, B
    JLE @no
    MOV AL, B
    @no:
  END;

  FUNCTION MaxB(A, B : Byte) : Byte; Assembler;
  ASM
    MOV AL, A
    CMP AL, B
    JAE @no
    MOV AL, B
    @no:
  END;

  FUNCTION MinB(A, B : Byte) : Byte; Assembler;
  ASM
    MOV AL, A
    CMP AL, B
    JBE @no
    MOV AL, B
    @no:
  END;

  FUNCTION MaxI(A, B : Integer) : Integer; Assembler;
  ASM
    MOV AX, A
    CMP AX, B
    JGE @no
    MOV AX, B
    @no:
  END;

  FUNCTION MinI(A, B : Integer) : Integer; Assembler;
  ASM
    MOV AX, A
    CMP AX, B
    JLE @no
    MOV AX, B
    @no:
  END;

  FUNCTION MaxW(A, B : Word) : Word; Assembler;
  ASM
    MOV AX, A
    CMP AX, B
    JAE @no
    MOV AX, B
    @no:
  END;

  FUNCTION MinW(A, B : Word) : Word; Assembler;
  ASM
    MOV AX, A
    CMP AX, B
    JBE @no
    MOV AX, B
    @no:
  END;

  FUNCTION MaxL(A, B : LongInt) : LongInt; Assembler;
  ASM
    MOV DX, Word(A+2)
    MOV AX, Word(A)
    CMP DX, Word(B+2)
    JL @yes
    JG @no
    CMP AX, Word(B)
    JGE @no
    @yes:
    MOV DX, Word(B+2)
    MOV AX, Word(B)
    @no:
  END;

  FUNCTION MinL(A, B : LongInt) : LongInt; Assembler;
  ASM
    MOV DX, Word(A+2)
    MOV AX, Word(A)
    CMP DX, Word(B+2)
    JG @yes
    JL @no
    CMP AX, Word(B)
    JLE @no
    @yes:
    MOV DX, Word(B+2)
    MOV AX, Word(B)
    @no:
  END;

  FUNCTION MaxU(A, B : LongInt) : LongInt; Assembler;
  ASM
    MOV DX, Word(A+2)
    MOV AX, Word(A)
    CMP DX, Word(B+2)
    JB @yes
    JA @no
    CMP AX, Word(B)
    JAE @no
    @yes:
    MOV DX, Word(B+2)
    MOV AX, Word(B)
    @no:
  END;

  FUNCTION MinU(A, B : LongInt) : LongInt; Assembler;
  ASM
    MOV DX, Word(A+2)
    MOV AX, Word(A)
    CMP DX, Word(B+2)
    JA @yes
    JB @no
    CMP AX, Word(B)
    JBE @no
    @yes:
    MOV DX, Word(B+2)
    MOV AX, Word(B)
    @no:
  END;
END.