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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#include <stdio.h>
#include "interne.h"
#include "simulator.h"
#include "exceptions.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#else
#define _(x) x
#endif
void Reset(Uint32 * i)
{ /* met tous les bits d'un mot à zéro */
*i &= 0;
} /* Ok */
void Set(Uint32 * i)
{ /* met le bit de poids faible à 1 */
*i &= 1;
} /* Ok */
/* Met le bit 'position' à zéro */
void ResetBit(Uint32 * i, int position)
{
if (position < 0 || position > 31) {
exception(1,_("ResetBit: Incorrect Value"));
} else {
Uint32 aux = VAL_MAX - (1 << position);
*i &= aux;
}
} /* Ok */
/* Met le bit 'position' à un */
void SetBit(Uint32 * i, int position)
{
if (position < 0 || position > 31) {
exception(1,_("SetBit: Incorrect Value"));
} else {
Uint32 aux = 1 << position;
*i |= aux;
}
} /* Ok */
/* Donne la valeur du bit 'position' */
int ValeurBit(Uint32 nombre, int position)
{
if (position < 0 || position > 31) {
exception(1,_("ValeurBit: Incorrect Value"));
return (-1);
}
return ((nombre >> position) & 1);
} /* Ok */
/* Affiche tous les bits d'un mot */
void Uint32toBin(Uint32 i)
{
int k;
for (k = 31; k >= 0; k--)
printf("%d", ValeurBit(i, k));
printf("\n");
} /* Ok */
/* Extrait un champ dans un mot */
Uint32 champ(Uint32 nombre, int taille)
{
return (nombre & (taille - 1));
} /* Ok */
Uint32 Opcode(Uint32 ins)
{
return (champ(ins >> 0, 256));
} /* Ok */
Uint32 Extension(Uint32 ins)
{
return (champ(ins >> 8, 64));
} /* Ok */
Uint32 Champ1(Uint32 ins)
{
return (champ(ins >> 14, 64));
} /* Ok */
Uint32 Champ2(Uint32 ins)
{
return (champ(ins >> 20, 64));
} /* Ok */
Uint32 Champ3(Uint32 ins)
{
return (champ(ins >> 26, 64));
} /* Ok */
|