Chapitre 6:
Programmation
assembleur
M. Dubacq
IUT de Villetanneuse  20082009
2/16
L'assembleur VLTN
> Machine rudimentaire pour l'étude pédagogique ;
> Inspiré de l'IBM 650 ;
> Stocke des valeurs de 6 chires en base 10 ;
> 1 registre de calcul ACCU ;
> 1 registre d'instruction INST ;
> 2 registres PC et PT sur 2 chires ;
> 2 drapeaux NUL et ERR (ACCU nul et dernier calcul avec
débordement) ;
> Mémoire adressable : 100 adresses (sur 2 chires en
base 10) ;
> Codage machine : DCB (décimal codé binaire).
3/16
Mémoire et Instructions
> Une instruction est codé par six chires XXYYZZ ;
> XX est le code d'opération (représente l'opération à ef-
fectuer) ;
> YY est l'argument ;
> ZZ est l'adresse de prochaine instruction ;
> Pas de séparation code/données : tout emplacement
peut être l'un ou l'autre ;
> Mnémonique en quatre lettres (ou moins).
4/16
Exécution
> VLTN peut être exécuté par un simulateur ;
> Un programme complet décrira la mémoire initiale et la
série d'entrées ;
> mémoire initiale : dans un chier : 10 : 40 30 24 décrit
qu'à la case 10 de la mémoire, il y a l'instruction ADD 30
24 (ou bien le nombre 403 024)
> ACCU vaut 000000, ERR et NUL valent FAUX, PC vaut 00 ;
> Disponible sur la page web http://lipn.fr/~dubacq/ ;
> Le simulateur donne les sorties et le code de n.
5/16
Instructions : Manipulations
OP MNEM Nom Effet
01 TSTN Test NUL Si NUL, PC<-YY, sinon PC<-ZZ
02 TSTE Test ERR Si ERR, PC<-YY, sinon PC<-ZZ
10 SET Set ACCU<-YY PC<-ZZ
21 LOAD Load ACCU<-MEM[YY] PC<-ZZ
31 STOR Store MEM[YY]<-ACCU PC<-ZZ
80 GOTO Nothing/Goto PC<-ZZ
À chaque cycle où ACCU est modié, ERR est mis
à VRAI si débordement, FAUX sinon. NUL est mis à
VRAI si ACCU est nul. Résultat tronqué si ERR (ex :
689210+582636=2718456).
6/16
Instructions : Arithmétique
OP MNEM Nom Effet
40 ADD Add ACCU<-ACCU+MEM[YY] PC<-ZZ
41 ADDI Add Imm. ACCU<-ACCU+YY PC<-ZZ
42 ADDM Add Imm. mid. ACCU<-ACCU+YY*100 PC<-ZZ
43 ADDL Add Imm. left ACCU<-ACCU+YY*10000 PC<-ZZ
44 SUB Sub ACCU<-ACCU-MEM[YY] PC<-ZZ
45 SUBI Sub Imm. ACCU<-ACCU-YY PC<-ZZ
46 SUBM Sub Imm. mid. ACCU<-ACCU-YY*100 PC<-ZZ
47 SUBL Sub Imm. left ACCU<-ACCU-YY*10000 PC<-ZZ
Les opérations se font en base 10 (tout est codé en binaire
en interne, mais on a programmé la table d'addition en
base 10). Quand ABdéborde (négatif), on obtient
1 000 000 + AB.
7/16
Instructions : Logique
OP MNEM Nom Effet
50 SHFL Shift left ACCU<-ACCU d´ec. g YY col. PC<-ZZ
51 SHFR Shift right ACCU<-ACCU d´ec. d YY col. PC<-ZZ
52 ROTL Rotate left ACCU<-ACCU rot. g YY col. PC<-ZZ
53 REVE Reverse ACCU<-ACCU `a l’envers PC<-ZZ
Usuellement, on a aussi les opérations AND, OR, XOR et
NOT. Pour un ordinateur qui utilise un codage décimal, ça
n'a pas tellement de sens.
8/16
Instructions : Entrées/Sorties
OP MNEM Nom Effet
90 READ Read input MEM[YY]<-input PC<-ZZ
91 WRIT Write output output<-MEM[YY] PC<-ZZ
00 EJECT Eject (fin de travail) Code de fin : YYZZ
Une entrée lue sur input est consommée (plus présente),
une sortie lue sur output est aichée.
Le code de n est conventionnellement 0000 pour un pro-
gramme qui nit normalement, le reste au choix du pro-
grammeur (par ex., un programme avec pas assez de don-
nées s'arrêterait avec 0001).
Si aucune entrée n'est disponible, READ met ERR à 1 et
renvoie un nombre aléatoire. Sinon, ERR est mis à 0.
9/16
Instructions : Indirections
OP MNEM Nom Effet
11 SETL SET Left Left(ACCU)<-YY PC<-ZZ
12 SETM Set Middle Mid(ACCU)<-YY PC<-ZZ
13 SETR Set Right Right(ACCU)<-YY PC<-ZZ
14 SAVE Save PT<-ACCU PC<-ZZ
15 COPY Copy ACCU<-PT PC<-ZZ
16 SWAP Swap PT<-Right(ACCU) ACCU<-PT PC<-ZZ
17 SETP Set PT Right(PT)<-YY PC<-ZZ
22 LDIX Load Index ACCU<-MEM[PTR+YY] PC<-ZZ
32 STIX Store Index MEM[PTR+YY]<-ACCU PC<-ZZ
81 LINK Jump and link ACCU<-PC PC<-ZZ
82 RET Return PC<-ACCU+YY PC<-ZZ
Ces instructions seront utilisées plus tard dans le cours.
Quand YY dépasse 100, on enlève 100 : +99 est donc équi-
valent à -1.
10/16
Exemple de programme
// Fichier somme2.vltn
00: 90 50 01 // READ 50 01
01: 90 51 02 // READ 51 02
02: 21 50 03 // LOAD 50 03
03: 40 51 04 // ADD 51 04
04: 31 52 05 // STOR 52 05
05: 91 52 06 // WRIT 52 06
06: 00 00 00 // EJECT 0000
// Ex´ecution
runner somme2.vltn 000024 000048
Exit code: 0000
000072
Plus en TD...
11/16
Mémoire dans un système moderne
> Adresses sur nbits, mots de xoctets ;
> Notation hexadécimale pour les adresses ;
>2noctets adressables, soit 2n/x mots.
Adresse Mémoire
0x00000000 1ermot
0x00000004 2emot
0x00000008 3emot
.
.
..
.
.
.
.
.1 mot
.
.
.= 4 octets
.
.
..
.
.
0xFFFFFFFC 230emot
12/16
Utilisation de la mémoire
> On distingue dans tous les systèmes modernes plusieurs
types d'utilisation de la mémoire ;
> Programme(segment de texte) contientles instructions ;
> Données (segment de données) contient les données ;
> Données statiques : début du segment de données ;
> Données dynamiques (tas) : au-dessus des données sta-
tiques ;
> Données de fonctionnement (pile) : à l'envers, jusqu'au
fond de pile ;
> Mémoire pour le noyau et emplacements reservés.
13/16
Représentation de la mémoire (en MIPS)
0x00000000
0x003FFFFF Reservé
0x00400000
0x0FFFFFFF Segment de texte
0x10000000
0x???????? Données statiques
0x????????
0x???????? Tas
0x???????? l
0x???????? lEspace libre
0x????????
0x7FFFFFFF Pile
0x80000000
0xFFFFFFFF Reservé
14/16
Le segment de texte
> Contient le code machine correspondant aux instruc-
tions ;
> Assembleur : forme textuelle, code machine : codage
binaire ;
> Les instructions sont consécutives dans la mémoire ;
> Exécution consécutive des instructions, sauf sauts et
branchements ;
> Registre PC : adresse d'instruction courante ;
> Point d'entrée déclarée par une étiquette main.
15/16
Le segment de données statiques
> Déclaration de données dont l'adresse et la taille sont
connues du début à la n du programme ;
> Les étiquettes sont les seuls repères dans la mémoire
pour l'assembleur ;
> Transformées en constantes lors de l'assemblage ;
> Souvent, pseudo-instruction LoadAddress met la valeur
de l'adresse dans registre ;
> Déclaration de types de base avec valeurs initiales ;
> Quand pas d'étiquette, adressage par connaissance des
tailles des objets.
16/16
La mémoire en VLTN
> Répartition conventionnelle (à part adresse 0) ;
> Adresses 0 et suivantes : programme ;
> Adresses 50 (ou plus) : variables globales (équivalent du
segment de données statiques et du tas) ;
> Adresses 99 et moins : pile (pour plus tard).
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !