-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathABSMAXX.CAS
More file actions
72 lines (60 loc) · 1.82 KB
/
ABSMAXX.CAS
File metadata and controls
72 lines (60 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/********************************************************/
/* */
/* Malte System/Absolute Max X */
/* 1993/05/14 */
/* */
/* Copyright (C) par les Chevaliers de Malte */
/* */
/********************************************************/
//
// Programmeur :
//
// Sylvain Maltais
//
// Compatible :
//
// Turbo Pascal 4.xx ou post‚rieur,
// Turbo C++ ou post‚rieur.
//
// DerniŠre modification :
//
// Vendredi, le 14 mai 1993 (Addition : AbsMaxX).
//
// Directive de compilation conditionnel :
//
// __386__ Compile en instruction 80386.
//
// *******************************************************
// INTERFACE/HEADER
// *******************************************************
#include <NUMERIC.H>
extern LongInt AbsMaxX(LongInt Value,LongInt X);
// *******************************************************
// IMPLEMENTATION
// *******************************************************
#ifndef __ABSMAXX__
#define __ABSMAXX__
#ifdef __386__
LongInt AbsMaxX(LongInt Value,LongInt X)
{
asm MOV EAX,X;
asm MOV EBX,Value;
asm CMP EBX,EAX;
asm JG TooBig;
asm PUSH EBX; // Empile la registre ‚tendu sur 32-bits
asm POP AX; // D‚sempile la partie base
asm POP BX; // D‚sempile la partie haute
return((_BX << 16) + _AX);
TooBig:
asm PUSH EAX; // Empile la registre ‚tendu sur 32-bits
asm POP AX; // D‚sempile la partie base
asm POP BX; // D‚sempile la partie haute
return((_BX << 16) + _AX);
}
#else
LongInt AbsMaxX(LongInt Value, LongInt X)
{
return(Value > X ? X : Value);
}
#endif
#endif