Assembleur
Djamal Rebaïne 2
Niveaux de programmation
Niveaux de programmation
circuit logiques 0/1
---------------------------------------------------------------------------------
unité de traitement micro-instructions
(UAL, chemins de données) = suite de 0/1
(Unité de commande) micro-pgme
= suite de micro-instructions
------------------------------------------------------------------------------------
Codop
111111 000011101010101 langage machine
= suite de 0/1
------------------------------------------------------------------------------------
ADD A,20 assembleur = remplacer les codop
JZ 13 par des mnémoniques
Djamal Rebaïne 3
Structure d’un programme
assembleur 8086
TITLE nom ; donner un nom au programme
PILE SEGMENT STACK ; déclaration d’un segment de pile
; dont le nom est pile
..........
..........
PILE ENDS ; fin de la déclaration de la pile
DONNEE SEGMENT ; déclaration d’un segment de données qui va
; contenir les variables
...........
DONNEE ENDS ; fin de la déclaration de données
LECODE SEGMENT ; déclaration du segment de code qui va contenir
; le code
Debut: ; étiquette d’indication du point d’entrée du code
.................................
LECODE ENDS ; fin de la déclaration du code
END Debut ; fin du point d’entrée du code
Exemple
Djamal Rebaïne 4
TITLE prog2.asm: Exemple sur ROL,
; pour mettre un commentaire, on écrit ;
Pile segment stack ; segemnt de pile
dw 100 dup(?)
Pile ends
DATA segment ; segement de donnée
DATA1DW 5F97H
COMPTE DB ?
DATA ends
CODE segment ; segment de code
MAIN: ASSUME CS:CODE, DS:DATA
MOV AX,DATA
MOV DS, AX
XOR BL, BL ; Mettre BL à 0 (ou bien SUB)
MOV DL, 16 ; rotation 16 fois
MOV AX, DATA1
ENCORE: ROL AX, 1 ; Rotation a gauche (a droite aussi si on préfère)
JNC PROCHAIN ; Test si CF=0
INC BL ; Si CF = 1, incrémenter le compteur du nombre de ‘1
PROCHAIN: DEC DL ; répéter 16 fois
JNZ ENCORE ; encore une fois si ce n’est pas fini
MOV COMPTE, BL ; sauvegarder le résultat dans la case mémoire COMPTE
MOV AH, 4Ch
INT 21h
MAIN ENDS
END MAIN
Pourquoi les segments?
À l'origine
- Pour pouvoir adresser plus de 64 Ko de mémoire dans un
programme car les registres sont sur 16 bits
En pratique aujourd'hui
- Permet de séparer clairement des zones mémoires selon
leur rôle
Exemple : la pile ne peut pas être écrasée par des données ou
déborder sur des données / code
Mais cela est contraignant ...
Djamal Rebaïne 5
1 / 169 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 !