Vous êtes sur la page 1sur 8

IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004

GTR 1re anne Contrle Long n2 p1/1

Contrle Long n2 Nom:


Prnom:
Groupe:
Calculatrice et documents interdits Rpondre sur la feuille
Dure totale 3h Bien lire sujet en entier avant de rpondre ; Les
questions sont en grande majorit indpendantes.

1. ENTREES-SORTIES (1re partie thorie dure indicative 1h)


1.1. Quest-ce quune interruption logicielle ? Quel intrt par rapport aux procdures ?

1.2. Que se passe-t-il lorsquon fait appel une interruption logicielle ? Dtaillez les tapes.

1.3. Quest-ce que le BIOS dun ordinateur ?

1.4. Quels sont les 2 mthodes dchange de donnes avec les priphriques ? Donnez 2 exemples.

1.5. Quest-ce que la scrutation ? Quel est son inconvnient ? Quelle est la solution ?
IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p2/1
1.6. Quest-ce quune interruption matrielle ? Donnez un exemple dutilisation.

1.7. Quel est le rle dun PIC ?

1.8. Reprsentez la connexion dun priphrique et dun PIC au processeur.

1.9. Expliquez ce qui se passe lorsquune interruption matrielle se dclenche. Dtaillez les tapes.

1.10. Quel est le rle des bus ? Quappelle t-on hirarchie de bus ? Donnez un exemple.
IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p3/1
NOM:
2. COMPILATION (2me partie pratique dure indicative 1h) Prnom:
On donne en annexe I un programme C : Groupe:

2.1. La fonction principale (main) appelle protegeChaine qui elle mme appelle estSpecial
(les appels en question sont en gras).
Reprsentez ltat de la pile dappel lors du premier passage sur la ligne de commentaire
/* affiche mmoire */. Prcisez ce qui est stock dans la pile (les valeurs si vous les connaissez) et
les cases mmoires (adresses) pointes par les registres BP et SP. Remarque importante : il nest pas ncessaire
de comprendre quoi sert le programme pour rpondre cette question.
IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p4/1
2.2. On excute protegeCar en lui passant successivement en paramtre A, a et , dont
les codes ASCII sont respectivement en hexadcimal 41, 61 et 81. Donnez dans chaque cas, la valeur
de la variable caractere au niveau du commentaire // tape 0, la valeur de la variable
parite au niveau des commentaires // tape 1, // tape 2, // tape 3, et enfin la
valeur retourne. Toutes les valeurs seront donnes en hexadcimal.
A a
// tape 0

// tape 1

// tape 2

// tape 3

retour

2.3. En dduire ce que fait la fonction protegeCar.

2.4. On excute protegeChaine en lui passant en paramtre "Aa!" (le code de ! est 21).
Donnez les codes hexadcimaux des caractres de la chane retourne. Expliquez.

2.5. On dsire maintenant rutiliser les fonctions prcdentes dans un autre programme.
Expliquez les oprations raliser. Donnez le contenu du fichier den-tte.
IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p5/1
NOM:
3. INTERFACE SERIE (3me partie pratique dure indicative 1h) Prnom:
On dispose dune inteface srie au numro de port 03F8. Groupe:
Linterface est dj configure. La table des registres de lUART est reproduite en annexe II.
3.1. Ecrire une fonction envoie qui envoie un caractre sur ce port srie. On prendra bien
videmment les prcautions qui simposent.

3.2. Ecrire une fonction recois qui retourne le caractre reu sur ce port srie (en scrutation).

3.3. Ecrire une fonction setDlab qui permet de positionner le bit dlab en fonction du paramtre
active. Elle met le bit dlab 0 si active est 0 (ou 1 sinon), mais ne change rien dautre.

void setDlab(int active) {


IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p6/1
3.4. On souhaite configurer linterface srie de faon transmettre les octets en mode 7E2.
Dites quel est le registre concern et donnez la valeur du code y mettre pour la configuration au
format 7E2.

3.5. On veut aussi une rapidit de modulation de 300 Bauds. Le facteur qui rgle la rapidit de
modulation est le diviseur de frquence stock dans le registre 16bits DL (accessible par moiti). On
sait que le rglage standard 2400 Bauds correspond un DL de 0048 (en hexadcimal).
Dites quels sont les registres concerns et donnez les valeurs des codes y mettre pour la configuration
300 Bauds.

3.6. Par ailleurs, linterface sera utilise en mode scrutation et sans file dattente. Compltez la fonction
de configuration, fournie ci-dessous, pour rpondre aux souhaits prcdents.

void configPortSerie (int format, long int divFreq) {

/* positionnement du format */

outportb( , );

/* positionnement de la rapidit de modulation */


setDlab( );

setDlab( );

/* mode scrutation */

outportb( , );

/* sans file dattente */

outportb( , );

}
IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p7/1

Annexe I : Programme en C

# include <stdio.h>
# include <conio.h>
# include <alloc.h>

unsigned char protegeCar(unsigned char caractere) {


unsigned char copie;
unsigned char parite = 0;
caractere = caractere & 0x7F; // tape 0
copie = caractere;
while (copie != 0) {
if ((copie & 1) == 1) {parite = parite + 1;}
copie = copie >> 1;
} // tape 1
parite = parite % 2; // tape 2
parite = parite << 7; // tape 3
caractere = caractere | parite;
return caractere;
}

int estSpecial(unsigned char caractere) {


if ((caractere>127) || (caractere==!)) {return 1;}
/* affiche mmoire */
return 0;
}

char* protegeChaine(char* chaine) {


int position = 0;
int special = 0;
char* chaineProtege;
while (chaine[position] != 0) {
if (estSpecial(chaine[position])) {special = special + 1;}
position = position + 1;
}
chaineProtege = (char*) malloc(position+special);
position = 0;
special = 0;
while (chaine[position] != 0) {
if (estSpecial(chaine[position])) {
chaineProtege[position+special] = !;
special = special + 1;
}
chaineProtege[position+special] = protegeCar(chaine[position]);
position = position + 1;
}
chaineProtege[position+special] = 0;
return chaineProtege;
}

int main(int argc, char* argv[]) {


char* chaine;
if (argc==1) {printf("usage: envoie chaine_argument\n"); return -1;}
chaine = argv[1];
printf("%s\n",chaine);
printf("%s\n",protegeChaine(chaine));
return 0;
}
IUT Villetaneuse Architecture des ordinateurs Jeudi 4 mars 2003-2004
GTR 1re anne Contrle Long n2 p8/1

Annexe II : table des registres de lUART