Logiciel de Base Stage ADT : Différence entre versions
(→Séance 1 : Introduction au langage C et GDB) |
(→Séance 3 : Modes d'adressages) |
||
(3 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 30 : | Ligne 30 : | ||
=== Séance 1 : Introduction au langage C et GDB === | === Séance 1 : Introduction au langage C et GDB === | ||
− | + | {{boîte déroulante | |
− | + | | titre=Exemple de code C | |
− | + | | contenu= | |
− | + | <source lang="C"> | |
− | + | /* "main" est la fonction principale */ | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | /* Auteur initial : Matthieu Moy <Matthieu.Moy@imag.fr> | |
− | + | Ensimag, Grenoble INP */ | |
− | + | #include <stdio.h> | |
+ | #include <unistd.h> | ||
+ | void f(void); | ||
+ | void calcul_et_imprime_fact(int n); | ||
+ | int fact(int n); | ||
+ | int main (void) | ||
+ | { | ||
+ | unsigned i; | ||
+ | short int j; | ||
+ | printf ("Bonjour\n"); | ||
+ | f(); | ||
+ | j = 0; | ||
+ | for (i = 0; i <= 1000; ++i) { | ||
+ | j = j + i; | ||
} | } | ||
− | + | printf ("i=%i\n", i); | |
− | + | calcul_et_imprime_fact(10); | |
− | + | i = 10; | |
− | + | while (i >= 0) { | |
− | + | --i; | |
} | } | ||
+ | } | ||
+ | |||
+ | void f(void) | ||
+ | { | ||
+ | printf ("Appel de f()\n"); | ||
+ | } | ||
+ | |||
+ | void calcul_et_imprime_fact(int n) | ||
+ | { | ||
+ | int res = fact(n); | ||
+ | printf ("fact(%i) = %i\n", n, res); | ||
+ | } | ||
− | + | int fact(int n) | |
− | + | { | |
− | + | printf ("Calcul de fact(%i)\n", n); | |
− | + | if (n <= 1) { | |
− | + | return 1; | |
− | + | } else { | |
− | + | return n * fact(n - 1); | |
− | + | ||
} | } | ||
− | * Le tutorial [[GDB]] se trouve dans : {{Url Git ldba| | + | } |
+ | </source> | ||
+ | <br> | ||
+ | }} | ||
+ | * Le tutorial [[GDB]] se trouve dans : {{Url Git ldba|file=c/1b-gdb-valgrind/gdb/gdb-tutorial.c}} | ||
* QCM de révision, à faire avant la séance suivante : [[QCM GDB]] | * QCM de révision, à faire avant la séance suivante : [[QCM GDB]] | ||
Ligne 87 : | Ligne 95 : | ||
=== Séance 3 : Modes d'adressages === | === Séance 3 : Modes d'adressages === | ||
− | * Transparents : {{Url Git ldba|file=asm/2-modes-adressages/ | + | * Transparents : {{Url Git ldba|file=asm/2-modes-adressages/slides/syntaxe-asm-slides.pdf}} |
* Séance machine : [[LdB Modes d'adressages]] | * Séance machine : [[LdB Modes d'adressages]] | ||
* [[QCM Modes d'adressage]] | * [[QCM Modes d'adressage]] |
Version actuelle en date du 19 juillet 2012 à 12:50
Enseignant : Claire Maiza
Déroulement du cours
Nous aborderons les bases de la programmation en langage d'assemblage Pentium.
Pour chaque cours, vous aurez à disposition le contenu utilisé en séance (transparents, exemples de code, ...), et un QCM avec corrigé en libre service. Faites l'effort de répondre à chaque QCM entre les séances de cours, pour vous assurer que vous avez bien tous les acquis, et arriver au cours suivant avec l'essentiel du cours en tête.
Ce cours est basé sur les supports de cours et séance de TD/TP effectués en filière apprentissage et en 1A. Pour les curieux, vous trouverez le contenu de ces enseignements en suivant ces liens :
- Logiciel de Base, responsable : Christophe Rippert
- Logiciel de Base Apprentissage, responsable : Matthieu Moy
Supports de cours
Les supports de cours (transparents, code source, ...) sont disponibles via Git. Pour récupérer ces supports :
git clone http://github.com/moy/cours-ldb.git
Explications détaillées : LdB - Récupérer les supports de cours avec Git.
Supports utiles pour l'ensemble du cours
- LdB Seance 4 qui contient l'essentiel de ce que vous devez savoir (instructions incontournables, noms des registres, ...)
- Erreurs fréquentes en assembleur
-
asm/Asm09.pdf
: l'ancien polycopié -
asm/IntelCodeTable.pdf
: un résumé des instructions utiles. Attention, ce document est en syntaxe Intel et nous utilisons la syntaxe GNU => il faut inverser l'ordre des opérandes.
Planning
Séance 1 : Introduction au langage C et GDB
/* "main" est la fonction principale */
/* Auteur initial : Matthieu Moy <Matthieu.Moy@imag.fr>
Ensimag, Grenoble INP */
#include <stdio.h>
#include <unistd.h>
void f(void);
void calcul_et_imprime_fact(int n);
int fact(int n);
int main (void)
{
unsigned i;
short int j;
printf ("Bonjour\n");
f();
j = 0;
for (i = 0; i <= 1000; ++i) {
j = j + i;
}
printf ("i=%i\n", i);
calcul_et_imprime_fact(10);
i = 10;
while (i >= 0) {
--i;
}
}
void f(void)
{
printf ("Appel de f()\n");
}
void calcul_et_imprime_fact(int n)
{
int res = fact(n);
printf ("fact(%i) = %i\n", n, res);
}
int fact(int n)
{
printf ("Calcul de fact(%i)\n", n);
if (n <= 1) {
return 1;
} else {
return n * fact(n - 1);
}
}
- Le tutorial GDB se trouve dans :
c/1b-gdb-valgrind/gdb/gdb-tutorial.c
- QCM de révision, à faire avant la séance suivante : QCM GDB
Séance 2 : Introduction à l'assembleur Pentium
- Transparents projetés en cours :
asm/1-asm-intro/1-introduction-ldb.pdf
- Séance machine : LdB Seance 5
- QCM Bases Assembleur
Séance 3 : Modes d'adressages
- Transparents :
asm/2-modes-adressages/slides/syntaxe-asm-slides.pdf
- Séance machine : LdB Modes d'adressages
- QCM Modes d'adressage
Séance 4 : Pile et appels de fonctions
- Transparents : version imprimable :
asm/3-appels-fonctions/appels-de-fonctions-handout.pdf
, version pleine page :asm/3-appels-fonctions/appels-de-fonctions-slides.pdf
- Séance guidée sur EnsiWiki : LdB Seance 10 Le premier exercice est exactement celui vu en cours, vous avez le corrigé dans 6-age.S (tout le programme est en assembleur). Les squelettes sont disponibles dans le répertoire
asm/3-appels-fonctions/
de votre archive. Si le temps le permet, tentez de traduire manuellement le fichier fact.c en assembleur (un squelette est fourni dans fact_main.S) - QCM Pile et appels de fonctions
Séance 5 : Appels de fonctions
- Séance guidée sur Ensiwiki : LdB Seance 11. Les squelettes sont dans votre archive, dans
asm/4-appels-fonctions/
.